<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[CoderCo]]></title><description><![CDATA[A newsletter for Software, Systems and DevOps]]></description><link>https://blog.coderco.io</link><image><url>https://substackcdn.com/image/fetch/$s_!TbRJ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364bc992-cd12-43d5-8b4b-bf07d15c1214_500x500.png</url><title>CoderCo</title><link>https://blog.coderco.io</link></image><generator>Substack</generator><lastBuildDate>Fri, 10 Apr 2026 00:24:39 GMT</lastBuildDate><atom:link href="https://blog.coderco.io/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[CoderCo]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[coderco@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[coderco@substack.com]]></itunes:email><itunes:name><![CDATA[Coder Co]]></itunes:name></itunes:owner><itunes:author><![CDATA[Coder Co]]></itunes:author><googleplay:owner><![CDATA[coderco@substack.com]]></googleplay:owner><googleplay:email><![CDATA[coderco@substack.com]]></googleplay:email><googleplay:author><![CDATA[Coder Co]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Kubernetes Trifecta in 40 days - think you got what it takes❓❗️]]></title><description><![CDATA[Introduction]]></description><link>https://blog.coderco.io/p/the-kubernetes-trifecta-in-40-days</link><guid isPermaLink="false">https://blog.coderco.io/p/the-kubernetes-trifecta-in-40-days</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Thu, 21 Mar 2024 17:00:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e1a7c990-7ef2-4517-a06c-a3580f861f5f_684x233.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Introduction</strong></h2><p>Having completed all three Kubernetes practical certifications, I have received a lot of questions asking me how I was able to pass all three hands-on exams in a matter of 5&#8211;6 weeks. It even came as a surprise to me, given that the only thing holding me back was the worry of being underprepared.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2><strong>On to the article&#8230;</strong></h2><p>Before starting my Kubernetes journey, I looked around for advice and was bombarded with comments on how tough the exams were &#8212; to the point where it almost made me consider learning an easier technology. However, I came across one comment in particular that surpassed all others and inspired me to take it on:</p><div class="pullquote"><p>&#8220;An exam&#8217;s difficulty is determined by how much time you spend preparing for it&#8221;.</p></div><p>It made sense to me. All I had to do was organize my time, account for how many hours the course would take me, and determine how long I would spend on the labs (including reattempting them).</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jzIx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa8ddcb-4986-4015-ba9b-0fe5df329e0f_684x233.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jzIx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa8ddcb-4986-4015-ba9b-0fe5df329e0f_684x233.png 424w, https://substackcdn.com/image/fetch/$s_!jzIx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa8ddcb-4986-4015-ba9b-0fe5df329e0f_684x233.png 848w, https://substackcdn.com/image/fetch/$s_!jzIx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa8ddcb-4986-4015-ba9b-0fe5df329e0f_684x233.png 1272w, https://substackcdn.com/image/fetch/$s_!jzIx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa8ddcb-4986-4015-ba9b-0fe5df329e0f_684x233.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jzIx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa8ddcb-4986-4015-ba9b-0fe5df329e0f_684x233.png" width="544" height="185.30994152046785" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/faa8ddcb-4986-4015-ba9b-0fe5df329e0f_684x233.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:233,&quot;width&quot;:684,&quot;resizeWidth&quot;:544,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!jzIx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa8ddcb-4986-4015-ba9b-0fe5df329e0f_684x233.png 424w, https://substackcdn.com/image/fetch/$s_!jzIx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa8ddcb-4986-4015-ba9b-0fe5df329e0f_684x233.png 848w, https://substackcdn.com/image/fetch/$s_!jzIx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa8ddcb-4986-4015-ba9b-0fe5df329e0f_684x233.png 1272w, https://substackcdn.com/image/fetch/$s_!jzIx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffaa8ddcb-4986-4015-ba9b-0fe5df329e0f_684x233.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><em><strong>So, how long does it take to complete the trifecta?</strong></em></p><p>As mentioned in my <a href="https://medium.com/@a.abukar/the-ultimate-guide-to-becoming-kubernetes-certified-96958944e048">previous article</a>, my go-to instructor for Kubernetes is Mumshad Mannambeth. Based on my own experience, let me give you an overall understanding of how many hours you will be spending on the course based on the material.</p><ul><li><p><strong>CKA:</strong> The CKA course was 18.5 hours in video time. Double this to include labs for each section, assuming that the lab takes you the same length of time as the video for it. Now add 20 hours of real-time (no breaks included) for the mock exams, attempts, and reattempts, until you get 100% (regardless of how many tries it takes you to get there). The mock labs are short &#8212; each at 1 hour long - and only include 8-9 questions. That is a total of 57 hours of study time</p></li><li><p><strong>CKAD:</strong> Having done CKA, you are now warmed up with enough hands-on experience. So all you really need to do at this point is complete the course and do the labs 1.5x faster than CKA. Crunching the numbers, that is 57/1.5 = 38 hours</p></li><li><p><strong>CKS:</strong> Now, CKS includes new software which needs to be covered. So this will be a repeat of CKA and no longer because you are still warmed up, and no shorter because the topics being covered require more time. As a rule of thumb, when covering new topics, the length it takes you to cover the videos is roughly the same as the time it will take to do the labs accompanying it. Total = 57 hours.</p></li><li><p>To put things into perspective, I watched the videos at a speed of 1.5x the original &#8212; <strong>Total hours required = 152 hours</strong></p></li><li><p>So use this equation to figure out how long it will take you:</p></li></ul><pre><code><code>152 hours / hours (per week) = Number of weeks to get the Trifecta</code></code></pre><ul><li><p>For example, if you have <strong>20 hours</strong> to study Kubernetes per week (~3 hours a day), you will become <strong>CKA, CKAD, and CKS certified in 152 / 20 = ~ 8 weeks</strong></p></li></ul><p><em><strong>Pre-requisites</strong></em></p><p>The figures above are applicable to those who are new to Kubernetes, but not for those who are new to DevOps altogether. It is necessary to have the below prerequisite knowledge before starting the journey to Trifecta:</p><ul><li><p><strong>Linux Fundamentals:</strong> A basic understanding of Linux commands are a must. Commands like &#8212; ls (listing the current directory, or an external directory you pass), cd (change directory), grep, absolute path, .. (double-dot) for the parent directory, mkdir (creating directories), cat (viewing files), and other more basic commands.</p></li><li><p><strong>VIM:</strong> A text editor that you will be using often throughout the course of your Kubernetes studies.</p></li><li><p>Awareness of <strong>networking and services</strong></p></li><li><p>Awareness of <strong>apiserver in Kubernetes</strong></p></li><li><p><strong>Docker fundamentals:</strong> Basic docker commands, creating stand-alone containers using docker, etc.</p></li><li><p>The further you go into the course, the more grounding you should have on the fundamentals of Kubernetes. For example, <strong>CKS requires a solid grounding in Kubernetes fundamentals.</strong></p></li><li><p>Good familiarity with writing <strong>YAML files</strong>, with the correct <strong>indentation.</strong></p></li><li><p>Although YAML is important to know, <strong>efficiency is even more important</strong> &#8212; so really simplifying the creation of resources using <strong>imperative commands</strong> and <strong>dry-runs</strong> saves you lots of time (and time is vital in the exam).</p></li></ul><h2><em><strong>Understanding the essentials</strong></em></h2><p>Now that we have the prereqs out of the way, let&#8217;s dive a little deeper into what is required for the exams. As previously mentioned, efficiency is key, so knowing all the tips and tricks to save time in the exam is of utmost importance:</p><ul><li><p>Using <strong>k=kubectl</strong>, instead of writing the whole command.</p></li></ul><pre><code><code>alias k=kubectl # To set up the alias</code></code></pre><ul><li><p>Using &#8212; dry-run=client -o YAML to create a skeleton YAML file if you aren&#8217;t able to pass all flags on the command line imperatively.</p></li></ul><pre><code><code>&gt; export do="--dry-run=client -o yaml"# To call on the export, use $do&gt; k run test --image nginx $do &gt; test.yaml
&gt; vi test.yaml</code></code></pre><ul><li><p>When deleting object-like pods, Kubernetes allows for graceful termination when pods get deleted. This is by default set to 30 seconds, so we have to manually set this grace period to 0 when deleting the pods. The easiest way to do this is by using an export.</p></li></ul><pre><code><code>&gt; export now="--force --grace-period=0"# To call on this export, use $now# Create the pod
&gt; k run test --image nginx # Delete the pod with 0 grace period
&gt; k delete test $now</code></code></pre><ul><li><p>As you go through Mumshad&#8217;s course and labs, you will find yourself navigating the documentation &#8212; this is a process that can only be improved with repetition. Alternatively, having the pages you need to be bookmarked for easy access is a good approach.</p></li><li><p>Do not spend too long on a question, especially if the percentage weight for the question is 4% or less. Too long = &gt;5 minutes.</p></li><li><p>Most objects have a shorthand notation, so practice using these beforehand:</p></li></ul><pre><code><code>po - PODs
rs - ReplicaSets
deploy - Deployments
svc - Services
ns - Namespaces
netpol - Network Policies
pv - Persistent Volumes
pvc - Persistent Volume Claims
sa - Service Accounts</code></code></pre><h1><strong>CKA (Certified Kubernetes Administrator):</strong></h1><p>The main focus of this exam is the configuration of objects, maintenance tasks like etcd backup and restore, upgrading the cluster to a newer version, marking nodes as un-schedulable (cordoning), and removing pods from nodes (draining). An administrator in the exam and Linux Foundation terms is someone who has:</p><blockquote><p><em>&#8220;demonstrated proficiency in Application Lifecycle management, Installation, Configuration &amp; Validation, Core concepts, Networking, Scheduling, Security, Cluster Maintenance, Logging / Monitoring, Storage, and Troubleshooting&#8221;</em></p></blockquote><p><em><strong>Here are some tips specifically for questions in the exam:</strong></em></p><ul><li><p><strong>Linux</strong>: As you are required to work on the terminal, knowing key Linux commands and understanding services is a must. Being able to configure services and interacting with them (start, stop, disable, etc) is also vital.</p></li><li><p><strong>Troubleshooting key components</strong>: When asked to troubleshoot a worker node that is not working, you should know that it is the kubelet in the node that needs restarting. You should also understand that to restart the kubelet, you have to use the &#8216;systemctl&#8217; tool to interact with it, and any other services, for that matter. Here&#8217;s how:</p></li></ul><pre><code><code>&gt; ssh node1
-------SSH message-------node1 &gt; systemctl restart kubelet
node1 &gt; systemctl daemon-reload
node1 &gt; exit------Exit message-------&gt; k get nodes# Node is schedulable again</code></code></pre><ul><li><p><strong>ETCD Backup and Restore:</strong> This is much more straightforward than it is made out to be. A thorough read of the <a href="https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/">ETCD documentation page</a> is sufficient. As shown in the command below, you would just replace the generic files with the files given in the question:</p></li></ul><pre><code><code>&gt; ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \\
  --cacert=&lt;trusted-ca-file&gt; --cert=&lt;cert-file&gt; --key=&lt;key-file&gt; \\
  snapshot save &lt;backup-file-location&gt;</code></code></pre><ul><li><p><strong>Network Policies:</strong> Lots of people tend to dread this topic. But it is as easy as copying the skeleton file from the <strong><a href="https://kubernetes.io/docs/concepts/services-networking/network-policies/">Network Policies documentation page</a>,</strong> then removing and replacing the file with what you need. Most of the correct indentation is done for you. Understanding them is important and repeats on all three of the exams. The question will give you all the detail that is needed, so understand which policyType and selector you will be using.</p></li></ul><pre><code><code>&gt; vi np1.yaml
---------------------
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:                           # delete
        cidr: 172.17.0.0/16              # delete
        except:                          # delete
        - 172.17.1.0/24                  # delete
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978</code></code></pre><ul><li><p>If you have less than 15 hours a week to spend learning Kubernetes, it is likely you will forget things and have a tendency to go back to the course. As such, it may be beneficial for you to take notes &#8212; typing them is recommended as you can include screenshots of YAML files to refer to later on.</p></li><li><p><strong>Persistent Volumes:</strong> This is a topic that will likely appear in the exam. Understanding the flow of this question is key to remembering how to answer it. First, create a Persistent Volume as per the question requirements and refer to the <strong><a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/">documentation for the definition file</a></strong>. Then, create a Persistent Volume Claim (same page), dry run, and change storage to match the PV. Finally, configure the pod to use the PVC by adding a volume and volume mount as per the question.</p></li></ul><pre><code><code>apiVersion: v1
kind: Pod
metadata:
  name: task-pv-pod
spec:
  volumes:
    - name: task-pv-storage                   # add
      persistentVolumeClaim:                  # add
        claimName: task-pv-claim              # add
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:                           # add
        - mountPath: "/usr/share/nginx/html". # add
          name: task-pv-storage               # add</code></code></pre><ul><li><p><strong>RBAC</strong>: Configuring Role Base Access Control is key in the exam. Knowing how to configure RBAC for both service accounts and users is important. First, create the service account in the required namespace. Then, configure a role as per the question, and a role-binding that uses the role for the service account or user. The page you will find useful on creating these resources is the <strong><a href="https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands">reference page on the documentation, under create</a>.</strong></p></li><li><p><strong>Multi-container and Sidecar container pods:</strong> This is a topic that usually confuses everyone. The key to answering this question is to dry-run a pod with a single container to begin with. Usually, this will be the container that has extra commands, which you can do imperatively. Then, edit the file to include the second container and the information for it. Don&#8217;t forget to change the name of the pod &#8212; the name will be the same as the first container (given that you passed that first imperatively) but it should be different as per the question.</p></li><li><p><strong>The rest:</strong> The rest of the topics are covered well in Mumshad&#8217;s course. Following the course and doing the labs is the best way to pass the exam&#8230;muscle memory!!</p></li></ul><h1><strong>CKAD (Certified Kubernetes Application Developer):</strong></h1><p>Now that you have successfully completed CKA, it is time to start learning CKAD. Some people tend to skip this exam and move straight on to the CKS, but as this article is meant for all three, this section will cover tips on the exam for CKAD.</p><ul><li><p>There are a total of 19 questions to be completed in 2 hours.</p></li><li><p>For details on the topics, check the <strong><a href="https://training.linuxfoundation.org/certification/certified-kubernetes-application-developer-ckad/">official Linux Foundation page</a></strong></p></li><li><p><strong>Topics:</strong> The topics for the CKAD are usually more straightforward than the CKA. This is because there is less need to create new objects and instead change currently existing objects. For example, liveness and readiness probes are just extra components that you pass into a file at the container level, and the <a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/">documentation page for it</a> is sufficient.</p></li><li><p><strong>Time:</strong> When there are more questions in the exam, there are more problems that you are likely to face if you have little time to solve them. There are 19 questions in the exam, so following the tips provided on time management above will help you here.</p></li><li><p><strong>Dockerfile</strong>: This comes up in the exam at a basic level, but knowing it well will mean less time spent on the question.</p></li><li><p><strong>Jobs/Cronjobs:</strong> This is a must-know and will be tested. Read up on the documentation for <a href="https://kubernetes.io/docs/concepts/workloads/controllers/job/">Jobs</a> and <a href="https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/">Cronjobs</a>.</p></li><li><p><strong>Labels and selectors:</strong> Labels and selectors are used heavily, especially for Network Policies, but the question could also simply ask you to label an object such as a node. To show the labels for objects, use the &#8220; &#8212; show-labels&#8221; flag on the command line. This will show the objects and their labels in<strong> </strong>key=value form. Labeling other components such as pods require you to edit the object:</p></li></ul><pre><code><code>&gt; kubectl label node key1=value1&gt; kubectl get nodes --show-labels&gt; kubectl edit po test-----Add label to pod-----</code></code></pre><ul><li><p><strong>ConfigMap and secrets: </strong>Ensuring that you know how to mount configmaps and secrets as either environment variables or volumes is a crucial aspect of successful DevOps practice.</p></li></ul><pre><code><code>&gt; vi configmap-pod-volume.yamlapiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    configMap:
      name: myconfigmap&gt; vi secret-pod-env.yamlapiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    env:                                 # add
      - name: SECRET_USERNAME            # add
        valueFrom:                       # add
          secretKeyRef:                  # add
            name: mysecret               # add
            key: username                # add
            optional: false              # add
                            
      - name: SECRET_PASSWORD            # add
        valueFrom:                       # add
          secretKeyRef:                  # add
            name: mysecret               # add
            key: password                # add
            optional: false              # add
                            
  restartPolicy: Never</code></code></pre><h1><strong>CKS (Certified Kubernetes Security Specialist)</strong></h1><ul><li><p>A pre-requisite to the CKS is the CKA</p></li><li><p>The exam is 2 hours long and there are a total of 16 questions</p></li></ul><p>In an era where security has become vital and containers are becoming popular, it comes as no surprise that CKS is a very respectable certification to have, and attractive to many DevOps employers. Doing the cert not only improves your security knowledge of Kubernetes but dives deep into some Linux fundamentals. You get to learn more about Linux security modules, Dockerfile security best practices, how TLS communication is used, and other external tools that are utilized by Kubernetes, such as Trivy and Falco.</p><p>To discover all of the topics that materialize in the exam, visit the <strong><a href="https://training.linuxfoundation.org/certification/certified-kubernetes-security-specialist/">official Linux Foundation page for CKS</a>.</strong></p><p>While <strong><a href="https://kodekloud.com/courses/certified-kubernetes-security-specialist-cks/">Mumshad&#8217;s KodeKloud course</a></strong> is sufficient for learning all of these new tools, you maybe also benefit from some additional tips for the exam:</p><ul><li><p>The tools you are taught in CKS also have their own documentation &#8212; for example, when studying Falco, you will notice that you need filters to display the specific Falco logs. These are found on <a href="https://falco.org/docs/rules/supported-fields/">Falco&#8217;s documentation page for supported fields</a>. This is a page that can be accessed during the exam</p></li><li><p>These third-party tools are usually configured as services on the Kubernetes cluster, so you will need to know how to interact with these services:</p></li></ul><pre><code><code>&gt; systemctl start falco&gt; systemctl list-units --type services | grep &lt;service-name&gt;&gt; systemctl stop &lt;service-name&gt;&gt; systemctl disable &lt;service-name&gt;</code></code></pre><ul><li><p>You will come to notice that best security practices are obvious &#8212; for example, if asked to fix a docker file to follow security best practices, you will need to ensure that you run as a user instead of root to apply the principle of least privilege.</p></li><li><p>The same applies to objects such as pods and deployments &#8212; containers should not run as root or be able to escalate their privileges. In the code below, runAsUser = 0 is running as the root user, so we change this to 1000 and also make the Security Context, allowPrivilegedEscalation = false, as by default it is set to true:</p></li></ul><pre><code><code>apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000                                     # change
    runAsGroup: 3000
    fsGroup: 2000
  volumes:
  - name: sec-ctx-vol
    emptyDir: {}
  containers:
  - name: sec-ctx-demo
    image: busybox
    command: [ "sh", "-c", "sleep 1h" ]
    volumeMounts:
    - name: sec-ctx-vol
      mountPath: /data/demo
    securityContext:                                    # add
      allowPrivilegeEscalation: false                   # add</code></code></pre><ul><li><p><strong>Security Contexts:</strong> Knowing how to use &#8216;Security Contexts&#8217; is vital, as this is used quite often in definition files &#8212; it is used when adding security practices such as privileged users and escalation privileges. It is also seen in third-party tools such as Seccomp profiles<strong> </strong>(which are used to restrict or allow a subset of syscalls &#8212; only the necessary syscalls required for a pod to run). We load it in the Security context shown below:</p></li></ul><pre><code><code>apiVersion: v1
kind: Pod
metadata:
  name: audit-pod
  labels:
    app: audit-pod
spec:
  securityContext:                                 # add
    seccompProfile:                                # add
      type: Localhost                              # add
      localhostProfile: profiles/audit.json        # add
  containers:
  - name: test-container
    image: hashicorp/http-echo:0.2.3
    args:
    - "-text=just made some syscalls!"
    securityContext:
      allowPrivilegeEscalation: false</code></code></pre><ul><li><p><strong>Api-server (or Kube-apiserver):</strong> As you know by now, the kube-apiserver is the brain of the operation in Kubernetes, and it lives in the controlplane node. To give you a proper definition: the Kubernetes API server validates and configures data for the API objects which include pods, services, replication controllers, and others. So, a security specialist should be prepared to configure the kube-apiserver more than twice in the exam and on different clusters and master nodes. You will be configuring the main manifest file for kube-apiserver at /etc/kubernetes/manifests/kube-apiserver.yaml. These static pod files create their objects without the need to run them directly</p></li><li><p><strong>Kube-apiserver (cont..):</strong> By changing the kube-apiserver, the API-server automatically restarts and applies your changes &#8212; if a change is incorrect, the cluster fails. This a common cause for panic in the CKS exam<strong> </strong>&#8212; but here&#8217;s how to prevent that:</p></li></ul><p>Make a copy of the kube-apiserver.yaml manifest file in your home directory, then proceed to make a change. Restart your cluster and observe if kubectl is working. If you don&#8217;t know where you went wrong, and you are running out of time, you can just bring the copied file back into the manifest file. Follow the below steps:</p><pre><code><code>&gt; cd /etc/kubernetes/manifests
&gt; cp kube-apiserver.yaml ~/kube1.yaml
&gt; vi kube-apiserver.yaml-----Changes-made--------&gt; k get po
---Connection to host failed message---
&gt; rm kube-apiserver.yaml
&gt; mv ~/kube1.yaml /etc/kubernetes/manifests/kube-apiserver.yaml# When resetting api-server&gt; cd /etc/kubernetes/manifests
&gt; vi kube-apiserver.yaml-----Changes-made--------&gt; mv kube-apiserver.yaml ../
&gt; crictl ps 
&gt; mv ../kube-apiserver.yaml ./</code></code></pre><ul><li><p>In the above code, the first scenario is for the kube-apiserver crashing &#8212; to go back to a working version, we restore it from the manifest copy. In the second scenario, we are resetting the kube-apiserver after our changes. This is a good way to reset, as we are moving the file away from the manifests directory to the parent directory. This terminates the container associated with the kube-apiserver (we check using crictl to make sure it has successfully been removed), then brings it back to the manifest directory. By using the parent directory, we just pass in .. (double-dot).</p></li><li><p><strong>Node components:</strong> The kube-apiserver is the main component you will interact with on the master node and as part of it, you will use it for admission controller plugins such as ImagePolicyWebhook, PodSecurityPolicies, and Audit-logs. However, other components such as the kubelet, AppArmor, and seccomp profiles are only available to be used in the worker nodes.</p></li><li><p><strong>SSH:</strong> You will find yourself SSH-ing more than half the exam to interact with the correct node. You will often be told which node you need to SSH into, but it&#8217;s good to know where these components are.</p></li><li><p><strong>Apparmor:</strong> Make sure to read the apparmor documentation well, as there are steps involved which can be easily forgotten. For example, adding the required annotation after loading the apparmor profile.</p></li><li><p><strong>Audit-logs:</strong> Setting up audit-logs means you have to add the relevant sections in the kube-apiserver. Take this question <em>very </em>slowly and carefully, as you will be adding two sets of volumes and volume mounts in the kube-apiserver.yaml file itself. This question has the most changes in the kube-apiserver. <strong><a href="https://kubernetes.io/docs/tasks/debug-application-cluster/audit/">The documentation for audit logs</a></strong> explains the process well, so have a thorough read and keep it bookmarked. Here is a snippet of the volume hosts and mounts to be added, and the paths will be provided. However, you will need to create the policy &#8212; a skeleton file will be provided to you:</p></li></ul><pre><code><code>### VolumeMounts for auditing in kube-apiserver manifest file
...
volumeMounts:
- mountPath: /etc/kubernetes/audit-policy.yaml
  name: audit
  readOnly: true
- mountPath: /var/log/kubernetes/audit/
  name: audit-log
  readOnly: false### Volumes for auditing in kube-apiserver manifest file
...
volumes:
- name: audit
  hostPath:
    path: /etc/kubernetes/audit-policy.yaml
    type: File
- name: audit-log
  hostPath:
    path: /var/log/kubernetes/audit/
    type: DirectoryOrCreate</code></code></pre><ul><li><p><strong>OPA:</strong> This topic introduces a new file &#8212; the rego file. It is not necessary to know how to write rego files, but it is important to be able to read them. The necessary thing to understand is that rego files can appear as configmaps, and these configmaps will tell you what type of &#8216;images&#8217; the OPA policy accepts.</p></li><li><p><strong><a href="http://killer.sh/">Killer.sh</a>:</strong> Finally, the <a href="http://killer.sh/">Killer.sh</a> simulator &#8212; is given to you when you purchase the exam. It&#8217;s a no-brainer to do this as it will give you a feel for the exam. It is fairly difficult and covers content that you don&#8217;t necessarily need to know, but I personally picked up a lot of Linux and K8s secrets (not the topic) from there, that I wouldn&#8217;t have otherwise come across in a while.</p></li><li><p>If you&#8217;ve come this far, then you have all of the tips and tricks for passing the exam (including the tips I didn&#8217;t have, but wish I knew). Anything that I haven&#8217;t already covered need not mentioning as it is covered well in both the course and the accompanying labs (so make sure to do them well!)</p></li></ul><h2><strong>Parting words</strong></h2><p>Above is a detailed walkthrough of the process I took to pass the exam, but I found myself debugging and looking for answers even after I had finished Mumshad&#8217;s course. This taught me that you need to be active in the learning process, as it will help you pick up on a lot along the way. Above all, good preparation prevails.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zIAa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe373fd68-4589-4b44-8be6-fd40a4c4d529_326x339.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zIAa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe373fd68-4589-4b44-8be6-fd40a4c4d529_326x339.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zIAa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe373fd68-4589-4b44-8be6-fd40a4c4d529_326x339.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zIAa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe373fd68-4589-4b44-8be6-fd40a4c4d529_326x339.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zIAa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe373fd68-4589-4b44-8be6-fd40a4c4d529_326x339.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zIAa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe373fd68-4589-4b44-8be6-fd40a4c4d529_326x339.jpeg" width="326" height="339" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e373fd68-4589-4b44-8be6-fd40a4c4d529_326x339.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:339,&quot;width&quot;:326,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!zIAa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe373fd68-4589-4b44-8be6-fd40a4c4d529_326x339.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zIAa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe373fd68-4589-4b44-8be6-fd40a4c4d529_326x339.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zIAa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe373fd68-4589-4b44-8be6-fd40a4c4d529_326x339.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zIAa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe373fd68-4589-4b44-8be6-fd40a4c4d529_326x339.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>In summary</strong></p><p>The learning process for Kubernetes is a really enjoyable one, and looking at it in this way makes it easier. By the time you obtain the trifecta, you will become an expert in not only Kubernetes but in docker and Linux too. The certifications are challenging, but every topic has its own flow, so understanding this will help you to achieve the best results.</p><h2>Psst, before you leave&#8230;</h2><p>Behind the scenes at Coderco, we the founders Mohamed and Abdurahman (brothers), do our best to regularly bring you the latest tech content both on LinkedIn and here on our Newsletter - as we dive deeper into trending and useful topics, we ask you to support us via a paid subscription.</p><p>Why subscribe? Your support allows us to produce exclusive, in-depth content and build a community for tech enthusiasts like you. It's not just about access; it's about joining a movement towards better understanding and innovating within the tech world - creating content in visual, appealing animations like the one below.</p><p>For the price of <em><strong>a coffee a month</strong></em> - support us to bring you more value</p><h3>Simply click on the button below to become a paid subscriber&#8230;</h3><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><em><strong>If you have any questions on the topic discussed in this blog, comment below or reach our to me on <a href="https://www.linkedin.com/in/a-abukar/">LinkedIn</a> </strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y9aa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4232f1-913b-4da4-bd29-01542397def7_1125x1065.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y9aa!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4232f1-913b-4da4-bd29-01542397def7_1125x1065.gif 424w, https://substackcdn.com/image/fetch/$s_!Y9aa!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4232f1-913b-4da4-bd29-01542397def7_1125x1065.gif 848w, https://substackcdn.com/image/fetch/$s_!Y9aa!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4232f1-913b-4da4-bd29-01542397def7_1125x1065.gif 1272w, https://substackcdn.com/image/fetch/$s_!Y9aa!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4232f1-913b-4da4-bd29-01542397def7_1125x1065.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y9aa!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4232f1-913b-4da4-bd29-01542397def7_1125x1065.gif" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d4232f1-913b-4da4-bd29-01542397def7_1125x1065.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7586666,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y9aa!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4232f1-913b-4da4-bd29-01542397def7_1125x1065.gif 424w, https://substackcdn.com/image/fetch/$s_!Y9aa!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4232f1-913b-4da4-bd29-01542397def7_1125x1065.gif 848w, https://substackcdn.com/image/fetch/$s_!Y9aa!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4232f1-913b-4da4-bd29-01542397def7_1125x1065.gif 1272w, https://substackcdn.com/image/fetch/$s_!Y9aa!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d4232f1-913b-4da4-bd29-01542397def7_1125x1065.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><p>Interested in reading more articles from me, subscribe to the blog:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://blog.coderco.io/subscribe?"><span>Subscribe now</span></a></p><p>Share our blog with your network:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share CoderCo&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://blog.coderco.io/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share CoderCo</span></a></p>]]></content:encoded></item><item><title><![CDATA[📌 The Linux Boot Process: An INTERVIEW favourite ]]></title><description><![CDATA[Introduction]]></description><link>https://blog.coderco.io/p/the-linux-boot-process-an-interview</link><guid isPermaLink="false">https://blog.coderco.io/p/the-linux-boot-process-an-interview</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Mon, 26 Feb 2024 19:27:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7166548b-16d5-4a6e-bbfb-a59da3a4f437_800x1158.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Introduction</strong></h2><p>When you power on your Linux machine, it embarks on a journey&#8212;a sequence of events that transition it from a powered-off state to a fully operational system, ready for your commands. This sequence is known as the boot process. Let's dive into the first steps that your computer takes from the moment you hit the power button.</p><h2>Some quick announcements &#10071;&#65039;&#10071;&#65039;:</h2><ol><li><p><em><strong>Up your Linux skills with me and Nelson:</strong></em> <strong><a href="https://www.amigoscode.com/courses/linux">Click Here</a> </strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pSe1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93d2ba5-140c-49e6-a6b3-83e5db62e3a2_1740x1432.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pSe1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93d2ba5-140c-49e6-a6b3-83e5db62e3a2_1740x1432.png 424w, https://substackcdn.com/image/fetch/$s_!pSe1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93d2ba5-140c-49e6-a6b3-83e5db62e3a2_1740x1432.png 848w, https://substackcdn.com/image/fetch/$s_!pSe1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93d2ba5-140c-49e6-a6b3-83e5db62e3a2_1740x1432.png 1272w, https://substackcdn.com/image/fetch/$s_!pSe1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93d2ba5-140c-49e6-a6b3-83e5db62e3a2_1740x1432.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pSe1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93d2ba5-140c-49e6-a6b3-83e5db62e3a2_1740x1432.png" width="1456" height="1198" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e93d2ba5-140c-49e6-a6b3-83e5db62e3a2_1740x1432.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1198,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:451409,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pSe1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93d2ba5-140c-49e6-a6b3-83e5db62e3a2_1740x1432.png 424w, https://substackcdn.com/image/fetch/$s_!pSe1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93d2ba5-140c-49e6-a6b3-83e5db62e3a2_1740x1432.png 848w, https://substackcdn.com/image/fetch/$s_!pSe1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93d2ba5-140c-49e6-a6b3-83e5db62e3a2_1740x1432.png 1272w, https://substackcdn.com/image/fetch/$s_!pSe1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93d2ba5-140c-49e6-a6b3-83e5db62e3a2_1740x1432.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li><li><p><em><strong>Become a System Design Expert with ByteByteGo:</strong></em> <strong><a href="https://bytebytego.com?fpr=system-design-101">Click Here</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BS2r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa30976fc-2851-4377-89a2-7174ff871561_1622x1122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BS2r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa30976fc-2851-4377-89a2-7174ff871561_1622x1122.png 424w, https://substackcdn.com/image/fetch/$s_!BS2r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa30976fc-2851-4377-89a2-7174ff871561_1622x1122.png 848w, https://substackcdn.com/image/fetch/$s_!BS2r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa30976fc-2851-4377-89a2-7174ff871561_1622x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!BS2r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa30976fc-2851-4377-89a2-7174ff871561_1622x1122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BS2r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa30976fc-2851-4377-89a2-7174ff871561_1622x1122.png" width="1456" height="1007" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a30976fc-2851-4377-89a2-7174ff871561_1622x1122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1007,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:872958,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BS2r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa30976fc-2851-4377-89a2-7174ff871561_1622x1122.png 424w, https://substackcdn.com/image/fetch/$s_!BS2r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa30976fc-2851-4377-89a2-7174ff871561_1622x1122.png 848w, https://substackcdn.com/image/fetch/$s_!BS2r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa30976fc-2851-4377-89a2-7174ff871561_1622x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!BS2r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa30976fc-2851-4377-89a2-7174ff871561_1622x1122.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>On to article&#8230;</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-vdO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb6d61c-91d7-4de9-9774-9a36d607eb34_1101x1594.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-vdO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb6d61c-91d7-4de9-9774-9a36d607eb34_1101x1594.gif 424w, https://substackcdn.com/image/fetch/$s_!-vdO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb6d61c-91d7-4de9-9774-9a36d607eb34_1101x1594.gif 848w, https://substackcdn.com/image/fetch/$s_!-vdO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb6d61c-91d7-4de9-9774-9a36d607eb34_1101x1594.gif 1272w, https://substackcdn.com/image/fetch/$s_!-vdO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb6d61c-91d7-4de9-9774-9a36d607eb34_1101x1594.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-vdO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb6d61c-91d7-4de9-9774-9a36d607eb34_1101x1594.gif" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cdb6d61c-91d7-4de9-9774-9a36d607eb34_1101x1594.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4943468,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-vdO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb6d61c-91d7-4de9-9774-9a36d607eb34_1101x1594.gif 424w, https://substackcdn.com/image/fetch/$s_!-vdO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb6d61c-91d7-4de9-9774-9a36d607eb34_1101x1594.gif 848w, https://substackcdn.com/image/fetch/$s_!-vdO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb6d61c-91d7-4de9-9774-9a36d607eb34_1101x1594.gif 1272w, https://substackcdn.com/image/fetch/$s_!-vdO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdb6d61c-91d7-4de9-9774-9a36d607eb34_1101x1594.gif 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p></p><div><hr></div><h2><strong>Step 1: BIOS/UEFI - The System's Initial Checkpoint</strong></h2><p>Upon powering on, your computer doesn't immediately jump into loading your operating system. Instead, it starts with a fundamental program that resides on a chip on your motherboard: the BIOS (Basic Input/Output System) or, in more modern systems, the UEFI (Unified Extensible Firmware Interface). Here's what they do:</p><h3><strong>BIOS - The Legacy Firmware</strong></h3><ul><li><p><strong>Loading</strong>: The BIOS is stored in non-volatile memory, which means it doesn't forget its contents when the power is off. It's the first code that the CPU executes upon power-up.</p></li><li><p><strong>POST</strong>: Before anything else, the BIOS performs the Power-On Self Test (POST), a diagnostic testing sequence for essential system components like RAM, drives, and other hardware interfaces. It ensures that all necessary hardware is present and functioning correctly before proceeding.</p></li></ul><h3><strong>UEFI - The Modern Alternative</strong></h3><ul><li><p><strong>Enhancements over BIOS</strong>: UEFI is the modern replacement for BIOS, offering faster boot times and support for larger hard drives, among other advantages.</p></li><li><p><strong>Interface and Boot Management</strong>: UEFI provides a user interface that can be navigated with a mouse and keyboard, and it manages boot loaders for multiple operating systems.</p></li></ul><p>In either case, BIOS or UEFI serves as the initial touchpoint, orchestrating the system's readiness to load the operating system. This step is crucial because it sets the stage for a successful boot process by verifying that the system's hardware is ready to go.</p><p></p><h2><strong>Step 2: Detecting Devices - The Hardware Roll Call</strong></h2><p>Once the BIOS/UEFI has successfully completed its initial checks, the system moves on to the next phase&#8212;detecting the available hardware devices. This step is crucial as it determines what components the operating system will have at its disposal once it starts up.</p><h3><strong>How Devices are Detected</strong></h3><ul><li><p><strong>Enumeration</strong>: The system firmware scans the hardware buses (like PCI, USB, etc.) to enumerate all connected devices. This includes your storage drives, USB devices, graphics cards, and more.</p></li><li><p><strong>Drivers</strong>: For the most basic hardware, the system BIOS/UEFI has built-in drivers &#8212; small programs that tell the operating system how to interact with the hardware. These basic drivers are enough to get the system up and running.</p></li></ul><p>This process is akin to a conductor making sure every musician is present and ready before a concert begins. The BIOS/UEFI ensures each piece of hardware is accounted for and functioning. Without this step, the operating system might not recognize some of your hardware, leading to a less than optimal experience.</p><p></p><h2><strong>Step 3: Choosing a Boot Device - The Launchpad Selection</strong></h2><p>After ensuring all the necessary hardware components are present and accounted for, the system needs to decide where to begin the actual booting process. This is like choosing the starting point for the journey to the operating system.</p><h3><strong>Boot Priority</strong></h3><ul><li><p><strong>Boot Order</strong>: In the settings that you can configure within BIOS or UEFI, there's a specified boot order. This tells the system the sequence in which to check connected devices for bootable information.</p></li><li><p><strong>Selection Process</strong>: The firmware searches through the devices in the order specified&#8212;be it a hard drive, SSD, USB drive, or optical media&#8212;and looks for a boot loader, a small program responsible for loading the operating system.</p></li></ul><h3><strong>Why the Right Boot Device Matters</strong></h3><ul><li><p><strong>Multiple Devices</strong>: Often, more than one connected device is capable of booting the system. For example, if you have a bootable USB drive inserted, you might want to boot from that instead of the internal hard drive.</p></li><li><p><strong>Boot Loaders</strong>: The boot loader resides on the selected boot device and acts as a bridge to the operating system. It's crucial to select the correct device that contains the necessary bootloader for your Linux distribution.</p></li></ul><p>This step in the boot process is like setting the correct destination in a GPS before starting a trip. The system needs to know exactly where to look for the instructions to continue the journey, ensuring it starts in the right direction.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coderco.io/subscribe?"><span>Subscribe now</span></a></p><p></p><h2><strong>Step 4: The Boot Loader - Orchestrating the Kernel Launch</strong></h2><p>With the boot device selected, the system turns its attention to the boot loader. This component is crucial in the transition from firmware to operating system.</p><h3><strong>The Role of GRUB</strong></h3><ul><li><p><strong>GRUB (Grand Unified Bootloader)</strong>: In the Linux world, GRUB is the most popular boot loader. It presents a menu that allows users to select from multiple operating system kernels or even different operating systems entirely.</p></li><li><p><strong>Configuration</strong>: GRUB's behavior is dictated by its configuration file, usually found at <code>/etc/grub2.cfg</code>. This file includes the locations of kernel files and initial RAM disk images, as well as any parameters that need to be passed to the kernel at boot time.</p></li></ul><h3><strong>What GRUB Does</strong></h3><ul><li><p><strong>Kernel Execution</strong>: GRUB locates the kernel specified in its configuration, loads it into memory, and starts it.</p></li><li><p><strong>Initial RAM Disk</strong>: Alongside the kernel, GRUB also loads an initial RAM disk (initrd), which contains temporary file systems and drivers required by the kernel to boot the system.</p></li></ul><h3><strong>Why GRUB is Important</strong></h3><ul><li><p><strong>Flexibility</strong>: GRUB allows for a high degree of flexibility in boot configurations. It can handle multiple kernel versions and operating systems, providing a robust environment for recovery and testing.</p></li><li><p><strong>User Interaction</strong>: Before loading the kernel, GRUB waits for a brief period to receive user input. This is when users can choose different boot options or kernel parameters, especially useful for troubleshooting.</p></li></ul><p>The boot loader is the conductor, ensuring all the sections of the "orchestra" are ready before signaling the start of the "performance" &#8212; the loading of the Linux kernel. Without GRUB, the system would lack direction, unable to proceed to the next phase of the boot process.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4QcE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec1e30b-0b4a-4c1f-be55-94edbde4db2b_1101x1594.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4QcE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec1e30b-0b4a-4c1f-be55-94edbde4db2b_1101x1594.gif 424w, https://substackcdn.com/image/fetch/$s_!4QcE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec1e30b-0b4a-4c1f-be55-94edbde4db2b_1101x1594.gif 848w, https://substackcdn.com/image/fetch/$s_!4QcE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec1e30b-0b4a-4c1f-be55-94edbde4db2b_1101x1594.gif 1272w, https://substackcdn.com/image/fetch/$s_!4QcE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec1e30b-0b4a-4c1f-be55-94edbde4db2b_1101x1594.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4QcE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec1e30b-0b4a-4c1f-be55-94edbde4db2b_1101x1594.gif" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ec1e30b-0b4a-4c1f-be55-94edbde4db2b_1101x1594.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4943468,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4QcE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec1e30b-0b4a-4c1f-be55-94edbde4db2b_1101x1594.gif 424w, https://substackcdn.com/image/fetch/$s_!4QcE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec1e30b-0b4a-4c1f-be55-94edbde4db2b_1101x1594.gif 848w, https://substackcdn.com/image/fetch/$s_!4QcE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec1e30b-0b4a-4c1f-be55-94edbde4db2b_1101x1594.gif 1272w, https://substackcdn.com/image/fetch/$s_!4QcE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ec1e30b-0b4a-4c1f-be55-94edbde4db2b_1101x1594.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><h2><strong>Step 5: The Kernel Takes Charge - Core System Initialization</strong></h2><p>After the boot loader hands off control, the Linux kernel springs into action. The kernel is the core of the Linux operating system, responsible for managing the system's resources and facilitating communication between hardware and software.</p><h3><strong>Kernel Initialization</strong></h3><ul><li><p><strong>Loading</strong>: The kernel, loaded by GRUB, initializes and configures the CPU, memory, and hardware devices such as disk drives and network interfaces.</p></li><li><p><strong>Device Drivers</strong>: It loads device drivers, which are programs specifically designed to allow the kernel to interact with hardware devices.</p></li><li><p><strong>Mounting Root Filesystem</strong>: The kernel then mounts the root filesystem as read-only. This is the filesystem containing all the files necessary for the operating system to run.</p></li></ul><h3><strong>System Services and Processes</strong></h3><ul><li><p><strong>Init Process</strong>: Once the root filesystem is in place, the kernel starts the <code>init</code> process. This is the first process that runs on a Linux system (traditionally it has process ID 1) and is responsible for starting other processes.</p></li><li><p><strong>Switch to User Space</strong>: The kernel switches from "kernel space" to "user space", which is the environment where user applications and services run.</p></li></ul><h3><strong>The Importance of the Kernel</strong></h3><ul><li><p><strong>System Management</strong>: The kernel manages CPU resources between processes, handles memory allocation, and oversees input/output requests from software, making it a critical component in the system's functionality.</p></li><li><p><strong>Security</strong>: It enforces permissions and segregates processes to prevent malicious or malfunctioning programs from destabilizing the system.</p></li></ul><p>The kernel&#8217;s role is comparable to that of an air traffic controller, expertly managing the takeoffs and landings of processes and ensuring that the system's resources are allocated efficiently and safely.</p><p></p><h2><strong>Step 6: Systemd - The System and Service Manager</strong></h2><p>Once the kernel is up and running, it hands over control to the <code>systemd</code> process. <code>Systemd</code> is the init system for most modern Linux distributions, and it orchestrates the startup of services and the overall system environment.</p><h3><strong>The Initial Handover to Systemd</strong></h3><ul><li><p><strong>PID 1</strong>: <code>Systemd</code> takes on the Process ID 1, replacing the traditional <code>init</code> process. It becomes the parent of all other processes.</p></li><li><p><strong>Service Startup</strong>: It starts services in parallel, speeding up the boot process. These services could be anything from network management to printing services.</p></li></ul><h3><strong>Systemd Targets</strong></h3><ul><li><p><strong>Targets</strong>: <code>Systemd</code> uses a concept called 'targets' to group services and tasks that should be achieved during the boot process. It's somewhat similar to the concept of runlevels but more flexible.</p></li><li><p><strong>Default Target</strong>: The system typically boots into a default target, which on most desktop systems is a graphical user interface.</p></li></ul><h3><strong>Why Systemd is a Game-Changer</strong></h3><ul><li><p><strong>Control</strong>: <code>Systemd</code> provides fine-grained control over system components and a consistent method of managing services across different distributions.</p></li><li><p><strong>Debugging and Management</strong>: With <code>systemd</code>, administrators have powerful tools for debugging and managing the state of the system.</p></li></ul><p><code>Systemd</code> is like a conductor, ensuring that all services start at the right time, in the right order, and under the right conditions. Its efficient management is essential for a smooth and speedy system startup.</p><p></p><h2><strong>Step 7: Target Files - Establishing the User Environment</strong></h2><p><code>Systemd</code> uses target files to group together and manage services and tasks that the system should achieve during boot. These targets are a flexible replacement for the older SysVinit runlevels, providing a more dynamic and configurable boot process.</p><h3><strong>Understanding Targets</strong></h3><ul><li><p><strong>Multi-User Target</strong>: For systems without a graphical interface, the multi-user target is the standard, providing a fully operational system with multiple user logins available via network or console.</p></li><li><p><strong>Graphical Target</strong>: Desktop systems usually aim for the graphical target, which is similar to the multi-user target but also starts the graphical display manager, allowing users to log in through a graphical user interface (GUI).</p></li></ul><h3><strong>Default and Custom Targets</strong></h3><ul><li><p><strong>Default Target</strong>: During installation, Linux systems are configured with a default target. This is the state the system aims to reach on boot, whether it's a server environment or a desktop.</p></li><li><p><strong>Customization</strong>: Administrators can create custom targets for specific use cases, such as a rescue or emergency target that provides a minimal environment for troubleshooting.</p></li></ul><h3><strong>Role of Target Files</strong></h3><ul><li><p><strong>Organization</strong>: Targets organize services into units, which can depend on each other. <code>Systemd</code> analyzes these dependencies to optimize the boot process, starting independent services simultaneously.</p></li><li><p><strong>Flexibility</strong>: Targets can be changed on the fly, allowing administrators to switch the system's state without rebooting, which is especially useful for maintenance or when changing system configurations.</p></li></ul><p><code>Systemd</code> target files define the end goal of the boot process. They ensure that all necessary services are up and running, laying down the foundation for user interaction and system operations.</p><p></p><h2><strong>Step 8: Users Can Log In - Welcome to Your Linux System</strong></h2><p>The culmination of the Linux boot process is the moment when the system is ready for user interaction. After <code>systemd</code> has successfully reached the default target, the stage is set for users to log in and start using the system.</p><h3><strong>Logging In</strong></h3><ul><li><p><strong>Display Manager</strong>: On desktop systems, a display manager presents a graphical login screen. It manages user sessions and handles user authentication.</p></li><li><p><strong>Getty</strong>: On server systems or those without a GUI, <code>getty</code> processes manage virtual terminals, waiting for user logins through the console.</p></li></ul><h3><strong>User Profiles and Environment</strong></h3><ul><li><p><strong>Shell Initialization</strong>: Once a user logs in, shell initialization files are sourced. These include global settings in <code>/etc/profile</code> and user-specific settings in <code>~/.bashrc</code> or similar files for different shells.</p></li><li><p><strong>Environment Setup</strong>: These scripts set up the user's environment, including the PATH variable, aliases, and functions, ensuring the user's shell is customized to their preferences.</p></li></ul><h3><strong>System Readiness</strong></h3><ul><li><p><strong>Startup Applications</strong>: For graphical sessions, once logged in, users may have startup applications configured which will launch automatically, further personalizing the computing experience.</p></li><li><p><strong>Full System Access</strong>: The user now has full access to their configured environment, applications, and system resources.</p></li></ul><h3><strong>The Final Touch</strong></h3><ul><li><p><strong>Background Services</strong>: While the user interacts with the system, <code>systemd</code> continues to manage background services, ensuring that the system operates smoothly and securely.</p></li><li><p><strong>User Services</strong>: <code>systemd</code> also allows users to start their own background services, which can be managed independently of system services.</p></li></ul><p>At this point, the boot process is complete. The system has transitioned from a powered-off state to a dynamic environment, ready for productivity, entertainment, or whatever tasks the user intends to perform.</p><p></p><h2><strong>Conclusion: The Significance of Understanding the Linux Boot Process</strong></h2><p>Understanding the Linux boot process is more than just a technical exercise; it holds practical significance, especially in professional scenarios such as job interviews and system administration tasks.</p><h3><strong>Vital in Interviews</strong></h3><ul><li><p><strong>Demonstrates Depth of Knowledge</strong>: In technical interviews, especially for roles related to Linux system administration, DevOps, or System Development Engineering, a clear understanding of the boot process demonstrates a comprehensive grasp of Linux systems. It shows that you're not just familiar with high-level concepts but also understand what happens under the hood.</p></li><li><p><strong>Problem-Solving Skills</strong>: Troubleshooting is a key skill in many tech roles. Knowing the boot process enables you to diagnose and resolve system startup issues effectively. This ability to pinpoint problems is highly valued in technical interviews.</p></li></ul><h3><strong>Essential for System Administrators</strong></h3><ul><li><p><strong>Configuration and Optimization</strong>: System administrators often need to customize the boot process for performance, security, or specific functional requirements. Knowledge of each step allows for informed decisions when optimizing or configuring systems.</p></li><li><p><strong>Troubleshooting and Recovery</strong>: A deep understanding of the boot process is crucial for recovering a system that fails to start. Identifying where the process breaks down is the first step in resolving critical system failures.</p></li></ul><h3><strong>Broader Linux Ecosystem Understanding</strong></h3><ul><li><p><strong>Interconnected Knowledge</strong>: The boot process touches various aspects of the Linux system, from kernel behavior to service management with <code>systemd</code>. Understanding it contributes to a broader knowledge of the Linux operating system as a whole.</p></li><li><p><strong>Technology Evolution</strong>: As technology evolves, so do boot mechanisms (like the transition from BIOS to UEFI). Staying informed about the boot process helps in adapting to new technologies and methodologies in system booting and management.</p></li></ul><p>In conclusion, the Linux boot process is a fundamental topic that has far-reaching implications in the realms of system administration, technical problem-solving, and professional development in IT-related fields. Its understanding forms a cornerstone for anyone looking to deepen their expertise in Linux or pursue a career where Linux systems play a key role.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cql1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ea9f41-6fc5-4fb3-ac5b-cdbd31096a59_1101x1594.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cql1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ea9f41-6fc5-4fb3-ac5b-cdbd31096a59_1101x1594.gif 424w, https://substackcdn.com/image/fetch/$s_!Cql1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ea9f41-6fc5-4fb3-ac5b-cdbd31096a59_1101x1594.gif 848w, https://substackcdn.com/image/fetch/$s_!Cql1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ea9f41-6fc5-4fb3-ac5b-cdbd31096a59_1101x1594.gif 1272w, https://substackcdn.com/image/fetch/$s_!Cql1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ea9f41-6fc5-4fb3-ac5b-cdbd31096a59_1101x1594.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cql1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ea9f41-6fc5-4fb3-ac5b-cdbd31096a59_1101x1594.gif" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35ea9f41-6fc5-4fb3-ac5b-cdbd31096a59_1101x1594.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4943468,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Cql1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ea9f41-6fc5-4fb3-ac5b-cdbd31096a59_1101x1594.gif 424w, https://substackcdn.com/image/fetch/$s_!Cql1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ea9f41-6fc5-4fb3-ac5b-cdbd31096a59_1101x1594.gif 848w, https://substackcdn.com/image/fetch/$s_!Cql1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ea9f41-6fc5-4fb3-ac5b-cdbd31096a59_1101x1594.gif 1272w, https://substackcdn.com/image/fetch/$s_!Cql1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35ea9f41-6fc5-4fb3-ac5b-cdbd31096a59_1101x1594.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><div><hr></div><h1>A final word from us&#8230;</h1><p>We hope you found our detailed guide on the Linux boot process insightful and helpful. At Coderco, we're committed to providing high-quality, informative content like this for free, to help you deepen your understanding and skills in technology - we take time to create these <strong>animated diagrams</strong> and share them with you (our amazing community) to aid your understanding.</p><p>If you appreciate our work and find our articles valuable, consider becoming a paid subscriber. Your support is like buying us a coffee each month&#8212;a simple yet impactful gesture that enables us to continue creating and sharing knowledge in the tech community.</p><p>Your subscription not only helps us sustain our efforts but also ensures that we can consistently offer up-to-date and comprehensive content. Every coffee, every contribution, makes a big difference!</p><p>Thank you for considering supporting us :) </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kbed!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5712e2d9-9d35-4553-8bd0-5112338e956f_1736x496.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kbed!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5712e2d9-9d35-4553-8bd0-5112338e956f_1736x496.png 424w, https://substackcdn.com/image/fetch/$s_!kbed!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5712e2d9-9d35-4553-8bd0-5112338e956f_1736x496.png 848w, https://substackcdn.com/image/fetch/$s_!kbed!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5712e2d9-9d35-4553-8bd0-5112338e956f_1736x496.png 1272w, https://substackcdn.com/image/fetch/$s_!kbed!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5712e2d9-9d35-4553-8bd0-5112338e956f_1736x496.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kbed!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5712e2d9-9d35-4553-8bd0-5112338e956f_1736x496.png" width="1456" height="416" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5712e2d9-9d35-4553-8bd0-5112338e956f_1736x496.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:416,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Pitchgarden - about&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Pitchgarden - about" title="Pitchgarden - about" srcset="https://substackcdn.com/image/fetch/$s_!kbed!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5712e2d9-9d35-4553-8bd0-5112338e956f_1736x496.png 424w, https://substackcdn.com/image/fetch/$s_!kbed!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5712e2d9-9d35-4553-8bd0-5112338e956f_1736x496.png 848w, https://substackcdn.com/image/fetch/$s_!kbed!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5712e2d9-9d35-4553-8bd0-5112338e956f_1736x496.png 1272w, https://substackcdn.com/image/fetch/$s_!kbed!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5712e2d9-9d35-4553-8bd0-5112338e956f_1736x496.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[The Ultimate AWS re:Invent Grant Guide]]></title><description><![CDATA[Table of Contents]]></description><link>https://blog.coderco.io/p/the-ultimate-aws-reinvent-grant-guide</link><guid isPermaLink="false">https://blog.coderco.io/p/the-ultimate-aws-reinvent-grant-guide</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Sat, 30 Dec 2023 17:59:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!28BP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!28BP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg 424w, https://substackcdn.com/image/fetch/$s_!28BP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg 848w, https://substackcdn.com/image/fetch/$s_!28BP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!28BP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!28BP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg" width="1200" height="627" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:627,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AWS re:Invent: 5 key new features to remember | VISEO&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="AWS re:Invent: 5 key new features to remember | VISEO" title="AWS re:Invent: 5 key new features to remember | VISEO" srcset="https://substackcdn.com/image/fetch/$s_!28BP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg 424w, https://substackcdn.com/image/fetch/$s_!28BP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg 848w, https://substackcdn.com/image/fetch/$s_!28BP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!28BP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96ab878e-c650-44ae-b23e-43c995b7806f_1200x627.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Table of Contents</h2><ol><li><p><strong>Introduction</strong></p></li><li><p><strong>What is re:Invent and how can I get the grant?</strong></p><ul><li><p>How to get an offer for the Grant Program?</p></li></ul></li><li><p><strong>What is All Builders Welcome (ABW)?</strong></p></li><li><p><strong>Building up to the Event - Things to Know Before You Go!</strong></p><ul><li><p>So You've Been Accepted as a Grant Attendee...</p></li><li><p>Certification at AWS re:Invent</p></li><li><p>Visa Requirements for Entry to the US</p></li><li><p>Confirming Flights and Hotel Reservations</p></li><li><p>Apps and Social Media (You can&#8217;t escape them!)</p></li><li><p>Packing Smart for AWS re:Invent</p></li></ul></li><li><p><strong>At re:Invent</strong></p><ul><li><p>Getting Around</p></li><li><p>Badge Pickup</p></li><li><p>ABW Grant Schedule of Events</p></li><li><p>The ABW Grant Lounge and Order of Events</p></li><li><p>Food</p></li><li><p>The Expo</p></li><li><p>SWAG</p></li></ul></li><li><p><strong>Extra-Curricular Activities</strong></p><ul><li><p>The Grand Canyon</p></li></ul></li><li><p><strong>Tips and Tricks for the Packed Week</strong></p></li><li><p><strong>Timeline of Events</strong></p></li><li><p><strong>Checklists</strong></p><ul><li><p>Pre-Travel Checklist</p></li><li><p>Arrival Checklist</p></li></ul></li><li><p><strong>Conclusion</strong></p></li></ol><div><hr></div><h1>1. Introduction</h1><p>To kick things off, let me share a little secret: AWS re:Invent is not just an event; it&#8217;s a whirlwind of innovation, learning, and networking. If you&#8217;re gearing up for your first in-person experience, brace yourself - it&#8217;s a thrilling experience, but without preparation, you&#8217;re doomed&#8230;sort of.</p><p>That&#8217;s where I step in. As a 2023 Grant Program attendee, I&#8217;ve navigated the ins and outs of this extraordinary event and I&#8217;ve put together this playbook to make your experience a smooth one.</p><p>In this blog, we&#8217;ll journey together through a crafted guide, tailored for first-timers at the AWS re:Invent Grant Program. Think of it as your personal roadmap, covering everything from the essentials like food and clothing to the nitty-gritty of booking flights, managing your schedule, and yes the much-anticipated SWAG!</p><p>I&#8217;ll sprinkle in my personal tips and tricks, offer advice on how to make the most of networking opportunities, and even provide a peek into some side-quests you can do at Vegas. Plus, I've included a handy checklist at the end &#8211; your go-to resource for ensuring you've got everything covered, from pre-event preparation to post-event reflections.</p><p>So, whether you're a Grant Program attendee or just curious about what makes AWS re:Invent a standout experience, this guide is your ticket to navigating the event like a pro. Let's dive in!</p><p></p><p></p><h1>2. What is re:Invent and how can I get the Grant?</h1><p>AWS re:Invent is a learning conference hosted by Amazon Web Services for the global cloud computing community. The event features keynote announcements, training and certification opportunities, access to more than 2400+ technical sessions, a partner expo, and after-hours events; it's a hub of innovation, learning, and community. Imagine thousands of tech enthusiasts, from developers to executives, converging to explore the latest in cloud technology, AI, machine learning, and much more.</p><p>The week will also be packed with breakout sessions, hands-on workshops, and endless networking opportunities. So much that you will DEFINITELY miss sessions.</p><p>All in all, it is an unforgettable experience.</p><p></p><h2>Applying for the Grant Program</h2><p>Applying for the AWS re:Invent Grant Program is an exciting opportunity, but it also requires thoughtful preparation and a strategic approach. Your application should effectively showcase your achievements, career plans, and how attending re:Invent  aligns with your professional goals. </p><p>Here's a guide to crafting a compelling application:</p><p><strong>1. Understanding the Grant Program:</strong></p><ul><li><p>First, familiarize yourself with the specifics of the Grant Program. Know what it offers, who it&#8217;s targeted towards, and the criteria for selection.</p></li></ul><p><strong>2. Highlighting Your Achievements:</strong></p><ul><li><p>Detail your achievements, particularly those related to technology. This could include projects you've led, challenges you've overcome, or innovations you've contributed to.</p></li><li><p>Emphasize any experience with AWS products or services. If you&#8217;ve utilized AWS in your projects or at your workplace, explain how it has impacted your work or the outcomes.</p></li></ul><p><strong>3. Articulating Career Plans and Goals:</strong></p><ul><li><p>Clearly state your technology-related career plans and professional goals. Be specific about how these align with AWS and cloud computing.</p></li><li><p>Discuss how attending re:Invent fits into your career trajectory. What specific skills or knowledge are you hoping to gain?</p></li></ul><p><strong>4. Personal and Professional Growth:</strong></p><ul><li><p>Reflect on your personal journey and professional growth. Share experiences that have shaped your career path and your perspective on technology.</p></li><li><p>Mention any professional accomplishments that you hold dear and explain why they are significant to you.</p></li></ul><p><strong>5. Demonstrating Enthusiasm and Commitment:</strong></p><ul><li><p>Convey your enthusiasm for learning and staying updated with the latest technology trends.</p></li><li><p>Show your commitment to applying the knowledge gained from re:Invent in your professional life.</p></li></ul><p><strong>6. Writing Tips:</strong></p><ul><li><p>Be concise yet comprehensive. Avoid unnecessary details but ensure you provide enough context to make your points clear.</p></li><li><p>Use a confident and positive tone. It&#8217;s important to show that you&#8217;re excited about the opportunity and confident in your ability to benefit from it.</p></li></ul><p><strong>7. Review and Refine:</strong></p><ul><li><p>Before submitting, review your application for clarity and coherence. Make sure it&#8217;s free of errors and well-structured.</p></li><li><p>It can be helpful to get feedback from peers or mentors who can provide insights or suggest improvements.</p></li></ul><p></p><p></p><h1>3. What is All Builders Welcome (ABW)?</h1><p>You&#8217;ll hear this term a lot (the abbreviated version), so you&#8217;ll find yourself wondering what it is. This isn't just a catchy slogan; it's actually a foundational principle that shapes what the event is all about.</p><p>All Builders Welcome is the belief that innovation and progress in technology require diverse perspectives. It's an acknowledgment that builders from all backgrounds &#8211; irrespective of their ethnicity, gender, experience level, or field of expertise &#8211; bring unique insights and ideas to the table.</p><p>The "All Builders Welcome" initiative at AWS re:Invent, particularly through the lens of the Grant Program, is a testament to the power of diversity in shaping the future of technology. It's a reminder that every voice matters and that the tech world is at its best when it's inclusive and collaborative. As a Grant Program attendee, your presence and participation at re:Invent is vital to this ongoing narrative of innovation and inclusivity.</p><p></p><p></p><h1><strong>4. Building up to the Event - Things to Know Before You Go!</strong></h1><p>Congratulations on being accepted as a Grant attendee for AWS re:Invent! This chapter is your pre-event checklist, ensuring you're fully prepared to make the most of this incredible opportunity.</p><p></p><h2><strong>So You've Been Accepted as a Grant Attendee...</strong></h2><p>Your journey to AWS re:Invent as a Grant attendee begins now. With this unique opportunity comes the need for careful preparation. Let's start by focusing on some key pre-event steps:</p><ol><li><p>Catalog: Start by visiting the re:Invent portal and navigate to the Catalog tab on the Navbar. Here, you'll find the comprehensive list of all the sessions, workshops, chalk talks, and other events scheduled for re:Invent.</p></li><li><p>Filter and Search: As you can see in the image below, you can filter the sessions based on your interests, experience level, and professional goals. You can filter by topics, type of sessions (e.g., lecture, workshop), 1. level of expertise, and more. This makes it easier to find sessions that are most relevant to you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HPpO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8c86f2-7f17-4f12-a5e1-508e89ce7a97_3166x1712.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HPpO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8c86f2-7f17-4f12-a5e1-508e89ce7a97_3166x1712.png 424w, https://substackcdn.com/image/fetch/$s_!HPpO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8c86f2-7f17-4f12-a5e1-508e89ce7a97_3166x1712.png 848w, https://substackcdn.com/image/fetch/$s_!HPpO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8c86f2-7f17-4f12-a5e1-508e89ce7a97_3166x1712.png 1272w, https://substackcdn.com/image/fetch/$s_!HPpO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8c86f2-7f17-4f12-a5e1-508e89ce7a97_3166x1712.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HPpO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8c86f2-7f17-4f12-a5e1-508e89ce7a97_3166x1712.png" width="1456" height="787" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a8c86f2-7f17-4f12-a5e1-508e89ce7a97_3166x1712.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:787,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:905340,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HPpO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8c86f2-7f17-4f12-a5e1-508e89ce7a97_3166x1712.png 424w, https://substackcdn.com/image/fetch/$s_!HPpO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8c86f2-7f17-4f12-a5e1-508e89ce7a97_3166x1712.png 848w, https://substackcdn.com/image/fetch/$s_!HPpO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8c86f2-7f17-4f12-a5e1-508e89ce7a97_3166x1712.png 1272w, https://substackcdn.com/image/fetch/$s_!HPpO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8c86f2-7f17-4f12-a5e1-508e89ce7a97_3166x1712.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p>Session Formats:</p><ul><li><p><strong>Workshops and Chalk Talks:</strong> These are typically more interactive and hands-on, offering a deeper dive into specific topics.</p></li><li><p><strong>Lectures and Keynotes:</strong> These are more informational, providing insights into new services, technologies, and best practices.</p></li></ul></li><li><p>Reserving Sessions</p><ul><li><p>Once you've identified the sessions you're interested in, it's time to start reserving your spots. Remember, popular sessions fill up quickly, so act fast.</p></li><li><p>Go to the session details in the Catalog and click on the &#8216;Reserve&#8217; button. This adds the session to your schedule.</p></li><li><p>Be mindful of the time and location of each session to ensure you can realistically attend without rushing from one end of the venue to another.</p></li><li><p>You can see in the image below, that your reserved and favorited sessions appear on your Calendar. You will see +n appear next to sessions showing you the clashes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gnvc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09f634-a4f2-4e69-8e84-04c111466ce2_2792x1654.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gnvc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09f634-a4f2-4e69-8e84-04c111466ce2_2792x1654.png 424w, https://substackcdn.com/image/fetch/$s_!gnvc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09f634-a4f2-4e69-8e84-04c111466ce2_2792x1654.png 848w, https://substackcdn.com/image/fetch/$s_!gnvc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09f634-a4f2-4e69-8e84-04c111466ce2_2792x1654.png 1272w, https://substackcdn.com/image/fetch/$s_!gnvc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09f634-a4f2-4e69-8e84-04c111466ce2_2792x1654.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gnvc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09f634-a4f2-4e69-8e84-04c111466ce2_2792x1654.png" width="1456" height="863" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af09f634-a4f2-4e69-8e84-04c111466ce2_2792x1654.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:863,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:785349,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gnvc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09f634-a4f2-4e69-8e84-04c111466ce2_2792x1654.png 424w, https://substackcdn.com/image/fetch/$s_!gnvc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09f634-a4f2-4e69-8e84-04c111466ce2_2792x1654.png 848w, https://substackcdn.com/image/fetch/$s_!gnvc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09f634-a4f2-4e69-8e84-04c111466ce2_2792x1654.png 1272w, https://substackcdn.com/image/fetch/$s_!gnvc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09f634-a4f2-4e69-8e84-04c111466ce2_2792x1654.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul></li><li><p>Building a Balanced Schedule</p><ul><li><p>Try to strike a balance between sessions that are directly related to your current skills and those that might challenge you or expose you to new areas.</p></li><li><p>Leave some free time in your schedule for networking, exploring the expo hall, and unplanned opportunities that may arise.</p></li></ul></li><li><p>Be Flexible:</p><ul><li><p>While it's great to have a plan, be open to changing your schedule on the fly. You might hear about a must-attend session from fellow attendees or find that some sessions don't meet your expectations.</p></li><li><p>Also, you might even miss a &#8216;reserved&#8217; session simply because you couldn&#8217;t make it on time and your space was taken by another attendee.</p></li></ul></li><li><p>Use the AWS Events App:</p><ul><li><p>In addition to the re:Invent portal, use the AWS Events app to manage your schedule on the go. The app can be a handy tool for last-minute changes and staying updated with any session adjustments.</p></li></ul></li></ol><p>Remember, the goal is to make the most out of re:Invent without overwhelming yourself. A well-thought-out schedule that aligns with your goals and interests will ensure a more enjoyable and productive experience at the event.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share CoderCo&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coderco.io/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share CoderCo</span></a></p><h2>Certification at AWS re:Invent</h2><p>Gaining an AWS certification before attending re:Invent can be a major highlight of your experience, especially as a Grant Program attendee. It not only validates your cloud skills but also opens up additional opportunities during the event. Here's how to navigate it:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VbnO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc20b295-4587-4bc5-8fcb-1b8e380b825a_299x169.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VbnO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc20b295-4587-4bc5-8fcb-1b8e380b825a_299x169.png 424w, https://substackcdn.com/image/fetch/$s_!VbnO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc20b295-4587-4bc5-8fcb-1b8e380b825a_299x169.png 848w, https://substackcdn.com/image/fetch/$s_!VbnO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc20b295-4587-4bc5-8fcb-1b8e380b825a_299x169.png 1272w, https://substackcdn.com/image/fetch/$s_!VbnO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc20b295-4587-4bc5-8fcb-1b8e380b825a_299x169.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VbnO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc20b295-4587-4bc5-8fcb-1b8e380b825a_299x169.png" width="299" height="169" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc20b295-4587-4bc5-8fcb-1b8e380b825a_299x169.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:169,&quot;width&quot;:299,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:30797,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VbnO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc20b295-4587-4bc5-8fcb-1b8e380b825a_299x169.png 424w, https://substackcdn.com/image/fetch/$s_!VbnO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc20b295-4587-4bc5-8fcb-1b8e380b825a_299x169.png 848w, https://substackcdn.com/image/fetch/$s_!VbnO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc20b295-4587-4bc5-8fcb-1b8e380b825a_299x169.png 1272w, https://substackcdn.com/image/fetch/$s_!VbnO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc20b295-4587-4bc5-8fcb-1b8e380b825a_299x169.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ol><li><p><strong>Understanding the Value of Certification:</strong></p><ul><li><p>AWS certifications are highly respected in the tech industry. They demonstrate your expertise and commitment to professional growth in the cloud computing field.</p></li><li><p>As a Grant attendee, you have a unique opportunity to leverage these certifications to enhance your learning and networking opportunities at re:Invent.</p></li></ul></li><li><p><strong>Utilizing Your 100% Off Voucher:</strong></p><ul><li><p>As part of the Grant Program, you should have received a 100% off voucher for AWS certification from XVoucher. This is a fantastic opportunity to get certified at no cost.</p></li><li><p>Choose a certification that aligns with your current skills and career goals. The AWS Certified Cloud Practitioner is a great starting point if you&#8217;re new to AWS, as it covers fundamental cloud concepts.</p></li></ul></li><li><p><strong>Preparing for the Exam:</strong></p><ul><li><p>Begin your preparation well in advance. Make use of AWS training resources, study guides, and practice exams.</p></li><li><p>Engage with the Grant Program community on the Slack channel for tips, study groups, and moral support.</p></li></ul></li><li><p><strong>Scheduling Your Exam:</strong></p><ul><li><p>Plan to schedule your exam early; at least a couple of weeks before the event. This way, if you pass, you can enjoy additional perks throughout re:Invent.</p></li><li><p>Check the AWS re:Invent portal or contact the event organizers for details on how to schedule your exam.</p></li></ul></li><li><p><strong>Certification Lounge Access:</strong></p><ul><li><p>Upon passing your certification, you&#8217;ll gain access to the VIP Certification Lounge. This exclusive space is a great spot for networking with other certified professionals, relaxing between sessions, and enjoying some special treats.</p></li></ul></li><li><p><strong>Additional SWAG for Certified Attendees:</strong></p><ul><li><p>AWS often rewards certified attendees with exclusive SWAG. Make sure to claim yours, as it&#8217;s not only a fun souvenir but also a badge of honor for your achievement.</p></li></ul></li><li><p><strong>Leverage Your Certification for Networking:</strong></p><ul><li><p>Having an AWS certification can be a great conversation starter. Use it to connect with fellow attendees, explore job opportunities, or discuss technical challenges and solutions.</p></li></ul></li><li><p><strong>Post-Certification Opportunities:</strong></p><ul><li><p>Even after re:Invent, your certification opens doors. It enhances your resume, gives you credibility in your field, and connects you to a global community of AWS professionals.</p></li></ul></li></ol><p>Securing an AWS certification at re:Invent is more than just an academic accomplishment; it&#8217;s a stepping stone to new opportunities and a way to enhance your experience at the event. Make sure to take full advantage of this aspect of your Grant Program benefits.</p><p></p><h2>Visa Requirements for Entry to the US</h2><p>When preparing for AWS re:Invent, it's important to address visa requirements for entry into the United States. The process is simplified for Grant Program attendees with support from the Grant Support team. Ensuring you have the correct documentation for entry into the United States is essential for a smooth travel experience. Here's what you need to know:</p><ol><li><p><strong>Visa Invitation Letter:</strong></p><ul><li><p>As part of the Grant Program, you'll receive a Visa Invitation Letter from the Grant Support team.</p></li><li><p>The letter typically includes essential information like the embassy it's intended for, the event's address (The Venetian, 3355 Las Vegas Blvd. South, Las Vegas, NV 89109), and other relevant details.</p></li></ul></li><li><p><strong>Country-Specific Visa Information:</strong></p><ul><li><p><strong>For UK Attendees:</strong> If you're traveling from the UK, you'll generally need to apply for an ESTA (Electronic System for Travel Authorization) under the Visa Waiver Program. This is a simpler process compared to a traditional visa application.</p></li><li><p><strong>For Other Countries:</strong> The visa requirements vary depending on your country of origin. You may need to apply for a B-1 (Business Visitor) visa or another appropriate type. Consult the U.S. Embassy or Consulate website in your country for specific guidance.</p></li></ul></li><li><p><strong>Visa Approval and Preparation:</strong></p><ul><li><p>Once your visa is approved, make sure to check its validity and understand the terms of your entry (like duration of stay allowed).</p></li><li><p>Keep copies of your visa and related travel documents accessible during your journey.</p></li></ul></li></ol><p></p><h2>Confirming Flights and Hotel Reservations</h2><p>It&#8217;s important to finalise your travel and accommodation arrangements early in the preparation for Re:Invent:</p><ol><li><p><strong>Choosing Your Flight with BCD Travel:</strong></p><ul><li><p>BCD Travel, the official travel partner for the AWS re:Invent Grant Program, will provide you with multiple flight options. These options will include details like the airline, flight number, booking reference, departure and arrival times, and destinations.</p></li><li><p>Review these options carefully and select the one that best fits your schedule and aligns with your hotel booking times.</p></li><li><p>Here&#8217;s a picture of what that might look like</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vSgX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e715f5d-36ea-4497-9c61-a94d105fc6a2_1188x681.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vSgX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e715f5d-36ea-4497-9c61-a94d105fc6a2_1188x681.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vSgX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e715f5d-36ea-4497-9c61-a94d105fc6a2_1188x681.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vSgX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e715f5d-36ea-4497-9c61-a94d105fc6a2_1188x681.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vSgX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e715f5d-36ea-4497-9c61-a94d105fc6a2_1188x681.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vSgX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e715f5d-36ea-4497-9c61-a94d105fc6a2_1188x681.jpeg" width="1188" height="681" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7e715f5d-36ea-4497-9c61-a94d105fc6a2_1188x681.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:681,&quot;width&quot;:1188,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59691,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vSgX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e715f5d-36ea-4497-9c61-a94d105fc6a2_1188x681.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vSgX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e715f5d-36ea-4497-9c61-a94d105fc6a2_1188x681.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vSgX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e715f5d-36ea-4497-9c61-a94d105fc6a2_1188x681.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vSgX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e715f5d-36ea-4497-9c61-a94d105fc6a2_1188x681.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul></li><li><p><strong>Confirming Your Flight Reservation:</strong></p><ul><li><p>Once you've made your selection, double-check your flight reservations. You can do this via your itinerary provided by BCD Travel and also by contacting the airline directly.</p></li><li><p>For any issues with flights while traveling or onsite, you can contact BCD Travel at +1 (833) 598-4764, option 4. This is a toll-free number, available for assistance.</p></li></ul></li><li><p><strong>Hotel Booking Confirmation:</strong></p><ul><li><p>You should receive an email directly from Treasure Island (or your designated hotel) confirming your accommodation reservation.</p></li><li><p>Ensure that the dates on your hotel reservation align with your flight dates. Any discrepancies or changes needed should be reported as soon as possible.</p></li></ul></li><li><p><strong>Additional Travel Queries:</strong></p><ul><li><p>If you have further questions regarding travel arrangements, the ABW Grant FAQs section is a valuable resource. It can provide additional guidance and answer common queries.</p></li></ul></li></ol><p></p><h2>Apps and Social Media (You can&#8217;t escape them!)</h2><h3><strong>Stay Connected with Apps</strong></h3><ul><li><p><strong>The AWS Events App:</strong> A must-have for any re:Invent attendee. Once the event launches on the app, log in to access your personalised agenda, navigate the campus with the wayfinding map, and stay updated with notifications about various activities happening throughout the week. It's available for download in both the App Store and Google Play.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ghLO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bef4b57-532b-4760-b637-fb22328a0374_1024x498.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ghLO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bef4b57-532b-4760-b637-fb22328a0374_1024x498.png 424w, https://substackcdn.com/image/fetch/$s_!ghLO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bef4b57-532b-4760-b637-fb22328a0374_1024x498.png 848w, https://substackcdn.com/image/fetch/$s_!ghLO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bef4b57-532b-4760-b637-fb22328a0374_1024x498.png 1272w, https://substackcdn.com/image/fetch/$s_!ghLO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bef4b57-532b-4760-b637-fb22328a0374_1024x498.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ghLO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bef4b57-532b-4760-b637-fb22328a0374_1024x498.png" width="1024" height="498" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6bef4b57-532b-4760-b637-fb22328a0374_1024x498.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:498,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85947,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ghLO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bef4b57-532b-4760-b637-fb22328a0374_1024x498.png 424w, https://substackcdn.com/image/fetch/$s_!ghLO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bef4b57-532b-4760-b637-fb22328a0374_1024x498.png 848w, https://substackcdn.com/image/fetch/$s_!ghLO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bef4b57-532b-4760-b637-fb22328a0374_1024x498.png 1272w, https://substackcdn.com/image/fetch/$s_!ghLO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bef4b57-532b-4760-b637-fb22328a0374_1024x498.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul><ul><li><p><strong>The Slack App:</strong> This is where the re:Invent community comes alive. Also available in the App Store and Google Play, the Slack app will be your lifeline onsite. The ABW Grant chat is the primary channel for onsite communication. It's a fantastic space to network with other grant participants, ask questions, interact with your mentor, and make plans. Plus, after the event, you'll be added to the grant alumni channel, extending your network and opportunities beyond re:Invent.</p></li></ul><h3><strong>Join Your Mentor Group Virtual Meetup</strong></h3><ul><li><p>Before setting foot in Las Vegas, take the opportunity to connect with your mentor group virtually. This pre-event meetup is an excellent way to familiarise yourself with fellow attendees and mentors, ensuring you're not just prepared but also excited for the event.</p></li><li><p>These meetups can be a source of invaluable tips, insights, and personal connections that can significantly enhance your re:Invent experience.</p></li></ul><h3><strong>Uber App</strong></h3><ul><li><p>You&#8217;ll receive a $75 Uber e-gift card to cover the costs of getting to and from the airport in Las Vegas - via email</p></li><li><p>Use the voucher by going to Account &#8594; Wallet &#8594; Add Funds &#8594; Gift Card</p></li><li><p>If you are traveling internationally, connect to the airport Wi-Fi when you arrive to reserve a car on the app</p></li><li><p>Try to find someone who is arriving around the same time as you so you can split the Uber fare</p></li></ul><p></p><h2>Packing Smart for AWS re:Invent</h2><p>Packing for AWS re:Invent is an exciting part of your pre-event preparation. It's about striking the right balance between being practical and ready for various scenarios you'll encounter.</p><h3><strong>Essentials for any tech conference</strong></h3><ul><li><p>Tech Gear: Your laptop, smartphone, and chargers are non-negotiable. Also, bring a portable power bank for those long days. And don't forget any specific tech accessories you rely on, like a wireless mouse or noise-cancelling headphones. For me, it&#8217;s my AirPods Pro - noise cancelling and easy to carry</p></li><li><p>Note-taking: For this, I&#8217;d recommend digital note-taking, so you only need to carry your laptop/iPad and no additional paper</p></li></ul><h3><strong>Clothing and Comfort</strong></h3><ul><li><p>Comfortable Clothes: Opt for a casual attire that you&#8217;re comfortable in. Go for layers instead of wearing a coat. It&#8217;s really warm inside the conference venues (over 60k attendees), and only slightly cool in the evening outdoors.</p></li><li><p>Footwear: Comfortable shoes are a must. You'll be doing a lot of walking, so prioritise comfort over style.</p></li><li><p>Luggage: You will be able to take a 23kg/50lb check-in, a carry-on, and a personal item. You won&#8217;t need all these bags on the way there, but you may definitely need them on the way back. So I&#8217;d recommend you pack light, and take a carry-on, even if you don&#8217;t need it - otherwise, you&#8217;ll find yourself scrambling for luggage space, and carrying another backpack as your carry-on</p></li></ul><h3><strong>Travel Essentials</strong></h3><ul><li><p>Travel Documents: Keep your ID, passport, visa, flight, and hotel information easily accessible. Print out copies to be safe.</p></li><li><p>Health and safety:</p><ul><li><p>Necessary medication</p></li><li><p>Hand Sanitiser (you&#8217;ll be shaking a lot of hands!)</p></li><li><p>Reusable water bottle</p></li><li><p>Chapstick: If you&#8217;re anything like me, you will talk a lot with lots of different people, so using a chapstick or lip balm is part of the survival routine.</p></li></ul></li></ul><h3><strong>Networking and Socialising</strong></h3><ul><li><p>Leisure clothing: You may want to explore Vegas in your downtime, or attend social gatherings. So pack an outfit or two for these occasions.</p></li><li><p>QR code: A great way to exchange contact information like your LinkedIn is to have your LinkedIn QR code ready (you can do this in the app, in the search bar &#128071;&#127997;)</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Oh56!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F333be0aa-91f3-4e17-aa53-4a4de0717b16_1284x195.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Oh56!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F333be0aa-91f3-4e17-aa53-4a4de0717b16_1284x195.png 424w, https://substackcdn.com/image/fetch/$s_!Oh56!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F333be0aa-91f3-4e17-aa53-4a4de0717b16_1284x195.png 848w, https://substackcdn.com/image/fetch/$s_!Oh56!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F333be0aa-91f3-4e17-aa53-4a4de0717b16_1284x195.png 1272w, https://substackcdn.com/image/fetch/$s_!Oh56!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F333be0aa-91f3-4e17-aa53-4a4de0717b16_1284x195.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Oh56!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F333be0aa-91f3-4e17-aa53-4a4de0717b16_1284x195.png" width="1284" height="195" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/333be0aa-91f3-4e17-aa53-4a4de0717b16_1284x195.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:195,&quot;width&quot;:1284,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46715,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Oh56!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F333be0aa-91f3-4e17-aa53-4a4de0717b16_1284x195.png 424w, https://substackcdn.com/image/fetch/$s_!Oh56!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F333be0aa-91f3-4e17-aa53-4a4de0717b16_1284x195.png 848w, https://substackcdn.com/image/fetch/$s_!Oh56!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F333be0aa-91f3-4e17-aa53-4a4de0717b16_1284x195.png 1272w, https://substackcdn.com/image/fetch/$s_!Oh56!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F333be0aa-91f3-4e17-aa53-4a4de0717b16_1284x195.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li></ul><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h1>5. At re:Invent</h1><h2>Getting around</h2><p>Once you arrive at AWS re:Invent, navigating the event efficiently is key to maximizing your experience. re:Invent is known for how big it is and a vast array of sessions and activities spread across multiple venues in Las Vegas.</p><h3><strong>Understanding the Venue Layout:</strong></h3><ul><li><p><strong>Familiarize Yourself Early:</strong> Take some time to understand the layout of re:Invent. The event is hosted across several venues, including major hotels and conference centers. A quick study of the map in the AWS Events app or on the re:Invent website can give you a good sense of the layout.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ud1Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f8dd40-6731-4d33-90eb-5640ce473dbf_1024x498.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ud1Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f8dd40-6731-4d33-90eb-5640ce473dbf_1024x498.png 424w, https://substackcdn.com/image/fetch/$s_!Ud1Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f8dd40-6731-4d33-90eb-5640ce473dbf_1024x498.png 848w, https://substackcdn.com/image/fetch/$s_!Ud1Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f8dd40-6731-4d33-90eb-5640ce473dbf_1024x498.png 1272w, https://substackcdn.com/image/fetch/$s_!Ud1Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f8dd40-6731-4d33-90eb-5640ce473dbf_1024x498.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ud1Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f8dd40-6731-4d33-90eb-5640ce473dbf_1024x498.png" width="1024" height="498" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91f8dd40-6731-4d33-90eb-5640ce473dbf_1024x498.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:498,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85947,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ud1Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f8dd40-6731-4d33-90eb-5640ce473dbf_1024x498.png 424w, https://substackcdn.com/image/fetch/$s_!Ud1Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f8dd40-6731-4d33-90eb-5640ce473dbf_1024x498.png 848w, https://substackcdn.com/image/fetch/$s_!Ud1Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f8dd40-6731-4d33-90eb-5640ce473dbf_1024x498.png 1272w, https://substackcdn.com/image/fetch/$s_!Ud1Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91f8dd40-6731-4d33-90eb-5640ce473dbf_1024x498.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><strong>Wayfinding with the AWS Events App:</strong> The app is not just for schedules; it's also your digital guide to navigate the event. Use its wayfinding feature to find the quickest routes to different sessions, amenities, and key locations.</p></li></ul><h3><strong>Utilising Shuttle Services</strong></h3><ul><li><p><strong>Shuttle Routes:</strong> AWS re:Invent typically offers shuttle services between various venues.</p><ul><li><p>These shuttles are a convenient and free way to move around, especially when you have sessions in different locations.</p></li><li><p>The shuttle route is: <em>Venetian | Caesar's Forum | Wynn | Encore | MGM Grand | Mandalay Bay</em></p></li><li><p>Campus shuttles do not stop at Treasure Island. You can walk to neighboring Venetian to catch the shuttle.</p></li></ul></li><li><p><strong>Shuttle Schedules:</strong> Check the shuttle schedules in the AWS Events app or at the shuttle stops. Knowing the timings can help you plan your movements between sessions and activities.</p></li></ul><h3><strong>In Case of Confusion</strong></h3><ul><li><p><strong>Ask for Help:</strong> Don't hesitate to ask re:Invent staff or volunteers if you're unsure where to go. They're there to help and can provide directions or advice on the best way to get to your next destination. Look for re:Invent staff in yellow T-shirts (they are your guides, and lovely to chat to)</p></li><li><p><strong>Group Travel:</strong> If you&#8217;ve made connections with other attendees, consider traveling to sessions together. It&#8217;s not only more fun but also a way to ensure you don&#8217;t get lost.</p></li></ul><h3>ABW Grant hotel information</h3><ul><li><p><em>Treasure Island | 3300 Las Vegas Blvd South, Las Vegas, NV 89101 | +1 (702) 894-7111</em></p></li><li><p><em>You will not need to provide a credit card upon check-in at the hotel</em></p></li><li><p><em>If you arrive before check-in time (3:00 PM), the front desk can check your bags so you can proceed to badge pick-up without a heavy load. This applies for check-out as well if your flight is late in the day on Friday</em></p></li></ul><p></p><h2>Badge Pickup</h2><p>One of the first things you'll do upon arriving at AWS re:Invent is pick up your event badge. This badge is your key to accessing sessions, venues, and activities throughout the event. Here&#8217;s everything you need to know about where and when to get your badge:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QgJK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2f6452-1db0-47e0-a9da-2cf2ce63bbd5_960x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QgJK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2f6452-1db0-47e0-a9da-2cf2ce63bbd5_960x720.png 424w, https://substackcdn.com/image/fetch/$s_!QgJK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2f6452-1db0-47e0-a9da-2cf2ce63bbd5_960x720.png 848w, https://substackcdn.com/image/fetch/$s_!QgJK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2f6452-1db0-47e0-a9da-2cf2ce63bbd5_960x720.png 1272w, https://substackcdn.com/image/fetch/$s_!QgJK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2f6452-1db0-47e0-a9da-2cf2ce63bbd5_960x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QgJK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2f6452-1db0-47e0-a9da-2cf2ce63bbd5_960x720.png" width="960" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c2f6452-1db0-47e0-a9da-2cf2ce63bbd5_960x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1160539,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QgJK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2f6452-1db0-47e0-a9da-2cf2ce63bbd5_960x720.png 424w, https://substackcdn.com/image/fetch/$s_!QgJK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2f6452-1db0-47e0-a9da-2cf2ce63bbd5_960x720.png 848w, https://substackcdn.com/image/fetch/$s_!QgJK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2f6452-1db0-47e0-a9da-2cf2ce63bbd5_960x720.png 1272w, https://substackcdn.com/image/fetch/$s_!QgJK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c2f6452-1db0-47e0-a9da-2cf2ce63bbd5_960x720.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D1vk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d69c6c3-40c0-44ec-861d-15dd3daa7fd0_562x1000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D1vk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d69c6c3-40c0-44ec-861d-15dd3daa7fd0_562x1000.png 424w, https://substackcdn.com/image/fetch/$s_!D1vk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d69c6c3-40c0-44ec-861d-15dd3daa7fd0_562x1000.png 848w, https://substackcdn.com/image/fetch/$s_!D1vk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d69c6c3-40c0-44ec-861d-15dd3daa7fd0_562x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!D1vk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d69c6c3-40c0-44ec-861d-15dd3daa7fd0_562x1000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D1vk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d69c6c3-40c0-44ec-861d-15dd3daa7fd0_562x1000.png" width="562" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d69c6c3-40c0-44ec-861d-15dd3daa7fd0_562x1000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:562,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:796605,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!D1vk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d69c6c3-40c0-44ec-861d-15dd3daa7fd0_562x1000.png 424w, https://substackcdn.com/image/fetch/$s_!D1vk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d69c6c3-40c0-44ec-861d-15dd3daa7fd0_562x1000.png 848w, https://substackcdn.com/image/fetch/$s_!D1vk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d69c6c3-40c0-44ec-861d-15dd3daa7fd0_562x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!D1vk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d69c6c3-40c0-44ec-861d-15dd3daa7fd0_562x1000.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Badge Pickup Locations</strong></h3><ul><li><p>You have multiple options for picking up your badge, making it convenient depending on where you are. The main locations are:</p><ul><li><p><strong>The Venetian</strong></p></li><li><p><strong>Mandalay Bay</strong></p></li><li><p><strong>MGM</strong></p></li><li><p>Additionally, for those just landing in Las Vegas, you can pick up your badge directly at the <strong>Harry Reid International Airport</strong>, both in Terminal 1 and Terminal 3.</p></li></ul></li></ul><h3><strong>Badge Pickup Times</strong></h3><ul><li><p><strong>At Harry Reid International Airport:</strong></p><ul><li><p><strong>Sunday and Monday:</strong> Badge pickup is available from early morning until midnight, specifically 6:00 AM to 11:59 PM. This is especially convenient if you&#8217;re arriving over the weekend or early Monday.</p></li></ul></li><li><p><strong>At The Venetian, Mandalay Bay, and MGM:</strong></p><ul><li><p><strong>Sunday:</strong> Badge pickup starts a bit later, from 10:00 AM, and goes until 8:00 PM.</p></li><li><p><strong>Monday to Thursday:</strong> You can pick up your badge from as early as 6:30 AM, with the counters staying open until 8:00 PM or 9:00 PM on Monday.</p></li></ul></li></ul><h3><strong>Tips for Badge Pickup</strong></h3><ul><li><p><strong>Avoid Peak Times:</strong> If possible, try to avoid peak times to minimize waiting. Early mornings or mid-afternoons can be less crowded.</p></li><li><p><strong>Have Your ID Ready:</strong> Ensure you have a valid ID with you for badge pickup. This is crucial for verifying your registration.</p></li><li><p><strong>Check Your Badge Details:</strong> Once you receive your badge, quickly check that all details are correct, including your name and any sessions or special access you&#8217;ve registered for.</p></li><li><p><strong>Keep Your Badge Safe:</strong> Your badge is essential for the duration of the event. Keep it safe and always with you during re:Invent.</p></li></ul><p></p><h2>ABW Grant Schedule of Events</h2><p>As a Grant Program attendee at AWS re:Invent, you have the privilege of participating in exclusive Grant-specific events.</p><ol><li><p><strong>Kickoff Celebration:</strong></p><ul><li><p><strong>Where:</strong> TBD</p></li><li><p><strong>When:</strong> TBD</p></li><li><p><strong>What to Expect:</strong> The Kickoff Celebration is the perfect way to start your re:Invent journey. It's a chance to meet fellow Grant recipients, interact in a relaxed atmosphere, and set the tone for the exciting week ahead.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LLFP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e42dad-8a9c-4bbf-b125-d483f7c3d55f_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LLFP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e42dad-8a9c-4bbf-b125-d483f7c3d55f_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!LLFP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e42dad-8a9c-4bbf-b125-d483f7c3d55f_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!LLFP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e42dad-8a9c-4bbf-b125-d483f7c3d55f_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!LLFP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e42dad-8a9c-4bbf-b125-d483f7c3d55f_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LLFP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e42dad-8a9c-4bbf-b125-d483f7c3d55f_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1e42dad-8a9c-4bbf-b125-d483f7c3d55f_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2657148,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LLFP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e42dad-8a9c-4bbf-b125-d483f7c3d55f_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!LLFP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e42dad-8a9c-4bbf-b125-d483f7c3d55f_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!LLFP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e42dad-8a9c-4bbf-b125-d483f7c3d55f_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!LLFP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1e42dad-8a9c-4bbf-b125-d483f7c3d55f_1600x900.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul></li><li><p><strong>Mentoring Luncheon:</strong></p><ul><li><p><strong>Where:</strong> TBD</p></li><li><p><strong>When:</strong> There are two opportunities to attend &#8211; TBD</p></li><li><p><strong>What to Expect:</strong> These luncheons are an invaluable part of the Grant experience, offering a chance to connect with mentors and peers. It's an environment conducive to sharing experiences, gaining insights, and fostering meaningful connections.</p></li></ul></li><li><p><strong>Closing Reception:</strong></p><ul><li><p><strong>Where:</strong> TBD</p></li><li><p><strong>When:</strong> TBD</p></li><li><p><strong>What to Expect:</strong> The Closing Reception is an opportunity to reflect on the week's experiences, celebrate the connections you've made, and look ahead to future endeavors. It&#8217;s the perfect conclusion to your re:Invent journey.</p></li></ul></li></ol><p><strong>Making the Most of Grant Events:</strong></p><ul><li><p><strong>Be Present:</strong> Try to attend these exclusive events as they are tailored specifically for Grant recipients and offer unique opportunities that are not available to all attendees.</p></li><li><p><strong>Network Actively:</strong> These gatherings are perfect for building a network with like-minded professionals and mentors. Don't shy away from starting conversations.</p></li></ul><p></p><h2><strong>The ABW Grant Lounge and Order of Events</strong></h2><p>The ABW Grant Lounge at AWS re:Invent serves as a special hub for Grant Program attendees, offering a range of exclusive benefits and activities. Located at the Venetian, it's a place to relax, network, and enjoy unique experiences tailored for Grant recipients. Here&#8217;s what you can look forward to:</p><p><strong>ABW Grant Lounge Details:</strong></p><ul><li><p><strong>Location:</strong> Venetian | Level 1 | Casanova 501 (Could be a new location year on year)</p></li><li><p><strong>Lounge Hours:</strong></p><ul><li><p><strong>Sunday:</strong> 12:00 PM &#8211; 6:00 PM.</p></li><li><p><strong>Monday to Thursday:</strong> 8:00 AM &#8211; 6:00 PM.</p></li></ul></li></ul><p><strong>What&#8217;s Inside the Lounge:</strong></p><ol><li><p><strong>Welcome Kit Pickup (Sunday and Monday):</strong></p><ul><li><p>Start your re:Invent experience by picking up your exclusive Welcome Kit. This kit includes:</p><ul><li><p>An exclusive re:Invent Backpack</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LrkZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2579968-5e73-4bf0-8ff9-9eddbe852479_791x1052.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LrkZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2579968-5e73-4bf0-8ff9-9eddbe852479_791x1052.png 424w, https://substackcdn.com/image/fetch/$s_!LrkZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2579968-5e73-4bf0-8ff9-9eddbe852479_791x1052.png 848w, https://substackcdn.com/image/fetch/$s_!LrkZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2579968-5e73-4bf0-8ff9-9eddbe852479_791x1052.png 1272w, https://substackcdn.com/image/fetch/$s_!LrkZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2579968-5e73-4bf0-8ff9-9eddbe852479_791x1052.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LrkZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2579968-5e73-4bf0-8ff9-9eddbe852479_791x1052.png" width="791" height="1052" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2579968-5e73-4bf0-8ff9-9eddbe852479_791x1052.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1052,&quot;width&quot;:791,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1275976,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LrkZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2579968-5e73-4bf0-8ff9-9eddbe852479_791x1052.png 424w, https://substackcdn.com/image/fetch/$s_!LrkZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2579968-5e73-4bf0-8ff9-9eddbe852479_791x1052.png 848w, https://substackcdn.com/image/fetch/$s_!LrkZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2579968-5e73-4bf0-8ff9-9eddbe852479_791x1052.png 1272w, https://substackcdn.com/image/fetch/$s_!LrkZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2579968-5e73-4bf0-8ff9-9eddbe852479_791x1052.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p>A $250 Visa gift card to cover incidentals throughout the week.</p></li><li><p>A Cloud Track sticker, giving you front-of-the-line access to keynotes.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6U3g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F997252ba-760c-46f3-aca2-42888dba210a_225x166.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6U3g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F997252ba-760c-46f3-aca2-42888dba210a_225x166.png 424w, https://substackcdn.com/image/fetch/$s_!6U3g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F997252ba-760c-46f3-aca2-42888dba210a_225x166.png 848w, https://substackcdn.com/image/fetch/$s_!6U3g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F997252ba-760c-46f3-aca2-42888dba210a_225x166.png 1272w, https://substackcdn.com/image/fetch/$s_!6U3g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F997252ba-760c-46f3-aca2-42888dba210a_225x166.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6U3g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F997252ba-760c-46f3-aca2-42888dba210a_225x166.png" width="225" height="166" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/997252ba-760c-46f3-aca2-42888dba210a_225x166.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:166,&quot;width&quot;:225,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50177,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6U3g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F997252ba-760c-46f3-aca2-42888dba210a_225x166.png 424w, https://substackcdn.com/image/fetch/$s_!6U3g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F997252ba-760c-46f3-aca2-42888dba210a_225x166.png 848w, https://substackcdn.com/image/fetch/$s_!6U3g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F997252ba-760c-46f3-aca2-42888dba210a_225x166.png 1272w, https://substackcdn.com/image/fetch/$s_!6U3g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F997252ba-760c-46f3-aca2-42888dba210a_225x166.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li><li><p>An ABW Grant pin to be worn on your badge lanyard, identifying you as a grant participant and granting access to the lounge and Grant events.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_Bif!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f44e88-b021-4f4e-b3c2-9a5baf98a0d8_184x213.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_Bif!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f44e88-b021-4f4e-b3c2-9a5baf98a0d8_184x213.png 424w, https://substackcdn.com/image/fetch/$s_!_Bif!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f44e88-b021-4f4e-b3c2-9a5baf98a0d8_184x213.png 848w, https://substackcdn.com/image/fetch/$s_!_Bif!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f44e88-b021-4f4e-b3c2-9a5baf98a0d8_184x213.png 1272w, https://substackcdn.com/image/fetch/$s_!_Bif!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f44e88-b021-4f4e-b3c2-9a5baf98a0d8_184x213.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_Bif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f44e88-b021-4f4e-b3c2-9a5baf98a0d8_184x213.png" width="184" height="213" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78f44e88-b021-4f4e-b3c2-9a5baf98a0d8_184x213.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:213,&quot;width&quot;:184,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:71078,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_Bif!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f44e88-b021-4f4e-b3c2-9a5baf98a0d8_184x213.png 424w, https://substackcdn.com/image/fetch/$s_!_Bif!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f44e88-b021-4f4e-b3c2-9a5baf98a0d8_184x213.png 848w, https://substackcdn.com/image/fetch/$s_!_Bif!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f44e88-b021-4f4e-b3c2-9a5baf98a0d8_184x213.png 1272w, https://substackcdn.com/image/fetch/$s_!_Bif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f44e88-b021-4f4e-b3c2-9a5baf98a0d8_184x213.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li></ul></li></ul></li><li><p><strong>Snacks and Drinks (Sunday to Thursday):</strong></p><ul><li><p>Recharge any time during the lounge hours with complimentary snacks and drinks &#8211; a perfect little break from the busy event schedule.</p></li></ul></li><li><p><strong>Exclusive Content (Monday to Thursday):</strong></p><ul><li><p>The lounge will feature exclusive content, including talks, meetups, or interactive sessions just for Grant recipients.</p></li></ul></li><li><p><strong>Professional Headshots (Tuesday and Wednesday):</strong></p><ul><li><p>A professional photographer will be available for headshots &#8211; a valuable addition to your professional portfolio.</p></li><li><p><strong>Hours:</strong> 8:00 AM &#8211; 6:00 PM, on a walk-up basis with no reservations required.</p></li><li><p><strong>Picture Delivery:</strong> You&#8217;ll receive an individual code to download your images from the photographer's website within 2-3 days.</p></li></ul></li></ol><p><strong>Making the Most of the ABW Grant Lounge:</strong></p><ul><li><p><strong>Plan Visits:</strong> Incorporate lounge visits into your daily schedule for breaks, networking, or attending exclusive content sessions.</p></li><li><p><strong>Networking Opportunities:</strong> Utilize this space to connect with other Grant recipients, share experiences, and make lasting connections.</p></li><li><p><strong>Headshots:</strong> Don&#8217;t miss out on getting professional headshots done &#8211; they can be a game-changer for your professional image.</p></li></ul><p></p><h2>Food</h2><p>One of the great aspects of AWS re:Invent is the variety and availability of food options to cater to diverse dietary needs, including halal and kosher requirements.</p><h3><strong>Diverse Dietary Accommodations</strong></h3><ul><li><p>re:Invent provides halal and kosher food options. These are typically marked clearly, making it easy for you to identify and choose meals that align with your dietary requirements.</p></li></ul><h3><strong>Food Availability Across Venues</strong></h3><ul><li><p><strong>All Venues Catered:</strong> One of the conveniences of re:Invent is that food is served at all event venues. This ensures that regardless of where your sessions or meetings are, you&#8217;ll have access to meals and snacks.</p></li><li><p><strong>Meal Times:</strong> Typically, meal times are aligned with the event schedule. Lunch and coffee breaks are strategically timed to coincide with session intermissions or end times, allowing attendees to grab a bite without missing out on important events.</p></li></ul><h3><strong>Tips for Meal Times</strong></h3><ul><li><p><strong>Plan Ahead:</strong> While the schedule is designed to provide ample time for meals, planning ahead can help you avoid long lines during peak meal times.</p></li><li><p><strong>Stay Hydrated:</strong> Along with meals, staying hydrated is key. Water stations are usually available throughout the venues.</p></li></ul><p>Let me just say, the food is GREAT!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xBQM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e94524-00ee-43cd-900b-8b7ba97fb55d_497x427.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xBQM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e94524-00ee-43cd-900b-8b7ba97fb55d_497x427.png 424w, https://substackcdn.com/image/fetch/$s_!xBQM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e94524-00ee-43cd-900b-8b7ba97fb55d_497x427.png 848w, https://substackcdn.com/image/fetch/$s_!xBQM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e94524-00ee-43cd-900b-8b7ba97fb55d_497x427.png 1272w, https://substackcdn.com/image/fetch/$s_!xBQM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e94524-00ee-43cd-900b-8b7ba97fb55d_497x427.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xBQM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e94524-00ee-43cd-900b-8b7ba97fb55d_497x427.png" width="497" height="427" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6e94524-00ee-43cd-900b-8b7ba97fb55d_497x427.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:427,&quot;width&quot;:497,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:445901,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xBQM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e94524-00ee-43cd-900b-8b7ba97fb55d_497x427.png 424w, https://substackcdn.com/image/fetch/$s_!xBQM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e94524-00ee-43cd-900b-8b7ba97fb55d_497x427.png 848w, https://substackcdn.com/image/fetch/$s_!xBQM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e94524-00ee-43cd-900b-8b7ba97fb55d_497x427.png 1272w, https://substackcdn.com/image/fetch/$s_!xBQM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6e94524-00ee-43cd-900b-8b7ba97fb55d_497x427.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>The Expo</h2><p>The Expo at AWS re:Invent is a highlight for many attendees. It's not just a showcase of the latest in cloud technology and services but also a hub for learning, networking, and experiencing the innovative culture of AWS and its partners.</p><ul><li><p><em>300+ Sponsor booths</em></p></li><li><p><em>AWS All Builders Welcome Lounge</em></p></li><li><p><em>AWS Community Developer Lounge</em></p></li><li><p><em>AWS Audit Acceleration Booth</em></p></li><li><p><em>AWS DeepRacer</em></p></li><li><p><em>AWS Challenge Lounge</em></p></li><li><p><em>AWS Village</em></p></li><li><p><em>Builders&#8217; Fair</em></p></li><li><p><em>AWS on Air</em></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YTs6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b4f7f3-50f4-49f0-81aa-72c617e796ab_776x540.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YTs6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b4f7f3-50f4-49f0-81aa-72c617e796ab_776x540.png 424w, https://substackcdn.com/image/fetch/$s_!YTs6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b4f7f3-50f4-49f0-81aa-72c617e796ab_776x540.png 848w, https://substackcdn.com/image/fetch/$s_!YTs6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b4f7f3-50f4-49f0-81aa-72c617e796ab_776x540.png 1272w, https://substackcdn.com/image/fetch/$s_!YTs6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b4f7f3-50f4-49f0-81aa-72c617e796ab_776x540.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YTs6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b4f7f3-50f4-49f0-81aa-72c617e796ab_776x540.png" width="776" height="540" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53b4f7f3-50f4-49f0-81aa-72c617e796ab_776x540.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:776,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:501812,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YTs6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b4f7f3-50f4-49f0-81aa-72c617e796ab_776x540.png 424w, https://substackcdn.com/image/fetch/$s_!YTs6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b4f7f3-50f4-49f0-81aa-72c617e796ab_776x540.png 848w, https://substackcdn.com/image/fetch/$s_!YTs6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b4f7f3-50f4-49f0-81aa-72c617e796ab_776x540.png 1272w, https://substackcdn.com/image/fetch/$s_!YTs6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53b4f7f3-50f4-49f0-81aa-72c617e796ab_776x540.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Networking Opportunities</strong></h3><ul><li><p><strong>Connect with Industry Experts:</strong> The Expo is a great place to meet professionals from various fields. Engage with exhibitors, ask questions, and gain insights from their expertise.</p></li><li><p><strong>Exchange Ideas:</strong> Use this space to discuss current trends, challenges, and opportunities in the cloud computing landscape with peers and experts.</p></li></ul><h3><strong>Exclusive SWAG and Giveaways</strong></h3><ul><li><p><strong>Collect SWAG:</strong> Many booths at the Expo offer unique SWAG &#8211; everything from t-shirts and gadgets to software trials. It's not only fun but also a way to remember the event and the technologies you encountered.</p><p>See below the SWAG I got!</p></li><li><p><strong>Participate in Giveaways:</strong> Keep an eye out for special giveaways or contests held by exhibitors. These can range from high-tech gadgets to vouchers for services. You can win Gift cards, Lego sets, headphones, all the way to iPhones and iPads</p></li></ul><h3><strong>Attend Special Sessions and Talks</strong></h3><ul><li><p><strong>Learn from Brief Talks:</strong> In addition to the main event sessions, some exhibitors host short talks or discussions at their booths. These can provide quick, deep dives into specific topics. And some of these short talks give out Raffles for mini-prizes (you can win Amazon gift cards) &#128064;</p></li><li><p><strong>Stay Updated:</strong> Check the AWS Events app for schedules of any talks or special sessions happening within the Expo.</p></li></ul><h3><strong>Tips for Navigating the Expo</strong></h3><ul><li><p><strong>Plan Your Visit:</strong> With so much to see, it helps to have a plan. Identify exhibitors or technologies you&#8217;re particularly interested in beforehand.</p></li><li><p><strong>Be Open to Exploration:</strong> While it&#8217;s good to have a plan, allow some time for spontaneous exploration. You might stumble upon something unexpected and intriguing.</p></li></ul><p>The Expo Hall first Opens at the Welcome event on Monday (4-7pm), and will be open 9-5pm throughout the week!</p><p></p><h2>SWAG</h2><p>Now this is a topic that brings an extra spark of excitement to AWS re:Invent &#8211; did you know SWAG stands for &#8220;Stuff We All Get&#8221;! &#129327;</p><p>SWAG at re:Invent is not just about collecting freebies; it's a fun and integral part of the event experience.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JcXB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9060c1a-57cc-4460-8072-d7e55bca310e_768x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JcXB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9060c1a-57cc-4460-8072-d7e55bca310e_768x1024.png 424w, https://substackcdn.com/image/fetch/$s_!JcXB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9060c1a-57cc-4460-8072-d7e55bca310e_768x1024.png 848w, https://substackcdn.com/image/fetch/$s_!JcXB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9060c1a-57cc-4460-8072-d7e55bca310e_768x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!JcXB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9060c1a-57cc-4460-8072-d7e55bca310e_768x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JcXB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9060c1a-57cc-4460-8072-d7e55bca310e_768x1024.png" width="768" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9060c1a-57cc-4460-8072-d7e55bca310e_768x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1167746,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JcXB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9060c1a-57cc-4460-8072-d7e55bca310e_768x1024.png 424w, https://substackcdn.com/image/fetch/$s_!JcXB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9060c1a-57cc-4460-8072-d7e55bca310e_768x1024.png 848w, https://substackcdn.com/image/fetch/$s_!JcXB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9060c1a-57cc-4460-8072-d7e55bca310e_768x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!JcXB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9060c1a-57cc-4460-8072-d7e55bca310e_768x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Where to Find SWAG</strong></h3><ul><li><p><strong>Expo Hall:</strong> This is the primary hunting ground for SWAG. Most exhibitors have their own range of goodies to give away &#8211; from t-shirts and stickers to more unique items like tech gadgets - the best thing I got was an Anker Powercore 10k Powerbank</p></li><li><p><strong>Special Events and Sessions:</strong> Keep an eye out for special SWAG at various events or sessions you attend. Sometimes, speakers or sponsors will have special items for attendees.</p></li></ul><h3><strong>Types of SWAG</strong></h3><ul><li><p><strong>Branded Merchandise:</strong> T-shirts, caps, pens, notebooks &#8211; these are classic SWAG items you&#8217;ll find in abundance. They&#8217;re great souvenirs and often come in handy.</p></li><li><p><strong>Tech Gadgets:</strong> USB drives, phone chargers, and other tech accessories are popular SWAG items. They&#8217;re not only cool but also practical.</p></li><li><p><strong>Exclusive Items:</strong> Look out for exclusive or limited-edition SWAG. These items are often sought after and can be a nice memento from the event.</p></li></ul><h3><strong>Tips for SWAG Collection</strong></h3><ul><li><p><strong>Plan Your Approach:</strong> If you&#8217;re serious about your SWAG collection, plan which booths to visit. Some of the more popular items might run out quickly.</p></li><li><p><strong>Balance Your Time:</strong> While hunting for SWAG is exciting, balance it with attending sessions and networking. Remember, the main goal of re:Invent is learning and connecting.</p></li><li><p><strong>Be Selective:</strong> You might not need or want everything that&#8217;s offered. Be selective about what you take to avoid unnecessary waste. Better yet, you can donate your SWAG (there are donation points - just ask one of the AWS yellow T-shirt employees)</p></li></ul><h3><strong>Beyond the Fun</strong></h3><ul><li><p><strong>Networking Opportunity:</strong> Collecting SWAG can be a great conversation starter. It can lead to interesting discussions with exhibitors and fellow attendees.</p></li><li><p><strong>Learning About Companies:</strong> The type of SWAG offered can give you insights into a company&#8217;s culture and brand identity. It&#8217;s a small window into who they are and what they value.</p></li></ul><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.coderco.io/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h1>6. Extra-Curricular Activities</h1><p>AWS re:Invent isn't just about learning and technology; it's also about community, fun, and making connections. The event is packed with a variety of activities and networking receptions that offer a chance to relax, meet new people, and enjoy the lighter side of the tech world.</p><p><strong>Community Activities:</strong></p><ul><li><p><strong>5K Run:</strong> Kickstart your day with energy</p></li><li><p><strong>Bingo:</strong> A classic game with a re:Invent twist</p></li><li><p><strong>Table Tennis and Pickleball Tournaments</strong></p></li><li><p><strong>Rec Center:</strong> A casual space to relax</p></li><li><p><strong>Sunday Sports Showcase</strong></p></li><li><p><strong>Photo Wall</strong></p></li><li><p>Yoga</p></li><li><p><strong>Slide:</strong> Speaking of which, the slide is a must-try! They&#8217;ll even snap a photo for you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TEI0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d830844-5b2a-4d32-8d31-944e44eb9050_768x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TEI0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d830844-5b2a-4d32-8d31-944e44eb9050_768x1024.png 424w, https://substackcdn.com/image/fetch/$s_!TEI0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d830844-5b2a-4d32-8d31-944e44eb9050_768x1024.png 848w, https://substackcdn.com/image/fetch/$s_!TEI0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d830844-5b2a-4d32-8d31-944e44eb9050_768x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!TEI0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d830844-5b2a-4d32-8d31-944e44eb9050_768x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TEI0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d830844-5b2a-4d32-8d31-944e44eb9050_768x1024.png" width="768" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d830844-5b2a-4d32-8d31-944e44eb9050_768x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1347198,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TEI0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d830844-5b2a-4d32-8d31-944e44eb9050_768x1024.png 424w, https://substackcdn.com/image/fetch/$s_!TEI0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d830844-5b2a-4d32-8d31-944e44eb9050_768x1024.png 848w, https://substackcdn.com/image/fetch/$s_!TEI0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d830844-5b2a-4d32-8d31-944e44eb9050_768x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!TEI0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d830844-5b2a-4d32-8d31-944e44eb9050_768x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul><p></p><h3><strong>Networking Receptions</strong></h3><ul><li><p>These receptions are designed to help you relax, forge meaningful connections, and engage in conversations with peers and AWS Partners. It&#8217;s a blend of casual and professional networking.</p></li></ul><h3><strong>re:Play &#8211; The Grand Celebration</strong></h3><ul><li><p><strong>What:</strong> The final night of AWS re:Invent 2023 culminates in the re:Play party &#8211; a spectacular celebration.</p></li><li><p><strong>Where:</strong> Las Vegas Festival Grounds.</p></li><li><p><strong>When:</strong> Thursday, December 1, from 7:30 PM to 12:00 AM.</p></li><li><p><strong>Experience:</strong> Expect music, entertainment, and a chance to celebrate with new friends and contacts you&#8217;ve made throughout the week.</p></li></ul><p></p><h3>The Grand Canyon</h3><p>Wrapping up an eventful week at AWS re:Invent, a visit to the Grand Canyon stands out as a spectacular highlight. This excursion is not just a chance to witness one of the natural wonders of the world, but also a perfect way to decompress after a week full of learning, networking, and exploration</p><ul><li><p>The scenic views of the Grand Canyon are a photographer&#8217;s paradise. Capture stunning photos to remember your trip by, and share them with colleagues and friends.</p></li><li><p>Look at some of the photos I took, with some friends I met during re:Invent</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eU3x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63bb5cb3-50db-4a0c-adff-653652d82222_768x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eU3x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63bb5cb3-50db-4a0c-adff-653652d82222_768x1024.png 424w, https://substackcdn.com/image/fetch/$s_!eU3x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63bb5cb3-50db-4a0c-adff-653652d82222_768x1024.png 848w, https://substackcdn.com/image/fetch/$s_!eU3x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63bb5cb3-50db-4a0c-adff-653652d82222_768x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!eU3x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63bb5cb3-50db-4a0c-adff-653652d82222_768x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eU3x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63bb5cb3-50db-4a0c-adff-653652d82222_768x1024.png" width="768" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63bb5cb3-50db-4a0c-adff-653652d82222_768x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1327670,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eU3x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63bb5cb3-50db-4a0c-adff-653652d82222_768x1024.png 424w, https://substackcdn.com/image/fetch/$s_!eU3x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63bb5cb3-50db-4a0c-adff-653652d82222_768x1024.png 848w, https://substackcdn.com/image/fetch/$s_!eU3x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63bb5cb3-50db-4a0c-adff-653652d82222_768x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!eU3x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63bb5cb3-50db-4a0c-adff-653652d82222_768x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3L3i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5173038d-d9f1-4651-96af-e22d25c055cb_1024x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3L3i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5173038d-d9f1-4651-96af-e22d25c055cb_1024x768.png 424w, https://substackcdn.com/image/fetch/$s_!3L3i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5173038d-d9f1-4651-96af-e22d25c055cb_1024x768.png 848w, https://substackcdn.com/image/fetch/$s_!3L3i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5173038d-d9f1-4651-96af-e22d25c055cb_1024x768.png 1272w, https://substackcdn.com/image/fetch/$s_!3L3i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5173038d-d9f1-4651-96af-e22d25c055cb_1024x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3L3i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5173038d-d9f1-4651-96af-e22d25c055cb_1024x768.png" width="1024" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5173038d-d9f1-4651-96af-e22d25c055cb_1024x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1624780,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3L3i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5173038d-d9f1-4651-96af-e22d25c055cb_1024x768.png 424w, https://substackcdn.com/image/fetch/$s_!3L3i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5173038d-d9f1-4651-96af-e22d25c055cb_1024x768.png 848w, https://substackcdn.com/image/fetch/$s_!3L3i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5173038d-d9f1-4651-96af-e22d25c055cb_1024x768.png 1272w, https://substackcdn.com/image/fetch/$s_!3L3i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5173038d-d9f1-4651-96af-e22d25c055cb_1024x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul><p></p><p></p><h1>7. Tips and Tricks for the Packed Week</h1><p>Now that we've covered everything you need to know before and during re:Invent, let's dive into some practical tips and tricks to enhance your experience.</p><ul><li><p><strong>Allocate Sufficient Buffer Time:</strong> Plan for 30-45 minutes between sessions for travel, especially since navigating through the large venues can be challenging and you might get lost&#8230;No, you WILL get lost (at least once!)</p></li><li><p><strong>Stay Hydrated Throughout the Day:</strong> Keep a water bottle handy at all times, as it's easy to forget to drink water during the busy event schedule.</p></li><li><p><strong>Prioritise Comfortable Footwear:</strong> Given the amount of walking you'll be doing, choosing comfortable shoes is crucial for your overall comfort and endurance.</p><p>My steps for this week went up 5x!</p></li><li><p><strong>Utilise Help Desks and App Chat for Assistance:</strong> Don't hesitate to use the Help Desk or the chat function in the AWS Events app for any questions or guidance.</p></li><li><p><strong>Keep Your LinkedIn QR Code Accessible:</strong> Save your LinkedIn QR code on your phone for efficient networking and easy sharing of contact information.</p></li><li><p><strong>Follow and Use #reInvent on Social Media:</strong> Stay updated and engage with fellow attendees through social media, especially using the #reInvent hashtag for the latest updates, meetups, and networking opportunities.</p></li><li><p><strong>Don&#8217;t Skip Meals - Refuel Often:</strong> With a packed agenda, it&#8217;s vital to remember to eat. Fortunately, there&#8217;s free food at most places, so take advantage of it to stay energised.</p></li><li><p><strong>Avoid Walking Through Casinos:</strong> To ensure better air quality, try to avoid routes that pass through casino areas where smoking is permitted.</p></li><li><p><strong>Request a Humidifier from Your Hotel:</strong> The air in Las Vegas can be very dry, so asking for a humidifier can help maintain comfort in your room.</p></li><li><p><strong>Schedule Time to Rest and Recharge:</strong> It&#8217;s important to take breaks and rest, ensuring you&#8217;re not overwhelmed or exhausted. Use quiet spaces, reflection rooms, and the Grant Lounge for downtime.</p></li><li><p><strong>Be Flexible with Your Schedule:</strong> Leave room for spontaneous activities, impromptu meetings, or discovering fun activities along the way.</p></li><li><p><strong>Donate Unneeded SWAG:</strong> If you have SWAG items you can&#8217;t fit in your luggage, consider donating them at designated bins near transportation locations and exits on the re:Invent campus.</p></li><li><p><strong>Take Concise Notes During Sessions:</strong> This helps in retaining important information and sharing insights post-event.</p></li><li><p><strong>Explore Las Vegas in Your Downtime:</strong> The city has a lot to offer in terms of entertainment and sightseeing, so take some time to enjoy it.</p></li><li><p><strong>Follow-Up with New Contacts After the Event:</strong> Strengthen the connections you&#8217;ve made by reaching out to your new contacts post-re:Invent.</p></li></ul><p></p><p></p><h1>8. Timeline of events</h1><p>Now let&#8217;s build a timeline of events (from the moment you get offered the grant, to the last day)</p><ul><li><p><strong>October 11:</strong> Grant Offered</p><ul><li><p>You receive the exciting news that you have been offered the grant to attend AWS re:Invent.</p></li></ul></li><li><p>October 12: Confirming your grant, and securing your spot!</p><ul><li><p>Register for re:Invent</p></li><li><p>Book a hotel on the Re:Invent portal</p></li><li><p>Complete the onboarding survery</p></li><li><p>Book your flight with BCD Travel</p></li></ul></li><li><p><strong>November 8:</strong> Kickoff and KBYG (Know Before You Go) Webinar</p><ul><li><p>Attend the webinar to get informed about what to expect and how to prepare for re:Invent.</p></li></ul></li><li><p><strong>November 8:</strong> Webinar Recording and Slides Shared via Slack</p><ul><li><p>Access the recorded webinar and slides for reference and preparation.</p></li></ul></li><li><p><strong>November 13:</strong> re:Invent Update Email</p><ul><li><p>Receive an update email covering:</p><ul><li><p>Mentor group assignments.</p></li><li><p>Confirmation of the Mentoring Luncheon date (Tuesday or Wednesday).</p></li><li><p>Sharing of Uber e-gift card codes.</p></li><li><p>Re-sharing of the link to the webinar recording and slides.</p></li></ul></li></ul></li><li><p><strong>November 13:</strong> AWS Certification Exam Vouchers Shared via XVoucher</p><ul><li><p>Get your AWS Certification Exam vouchers, an opportunity to get certified at re:Invent.</p></li></ul></li><li><p><strong>November 13 &#8211; 24:</strong> Complete Pre-Travel Checklist</p><ul><li><p>Ensure all travel preparations are completed, including visa arrangements, flight bookings, and packing.</p></li></ul></li><li><p><strong>November 17:</strong> Calendar Invites for Grant Events and Grant Lounge Content Sent</p><ul><li><p>Receive and respond to all invites related to exclusive grant events and lounge content.</p></li></ul></li><li><p><strong>November 26:</strong> Arrive in Las Vegas and Complete Arrival Checklist</p><ul><li><p>Land in Las Vegas and go through your arrival checklist, including hotel check-in and familiarising yourself with the city.</p></li></ul></li><li><p><strong>November 27 &#8211; December 1:</strong> AWS re:Invent</p><ul><li><p>Immerse yourself in the full AWS re:Invent experience, attending sessions, networking events, the expo, and enjoying the various activities and opportunities offered.</p></li><li><p>For this, make your own Calendar (organise it for food, buffer times, walking, and all of your sessions) - it might look like this</p><ul><li><p>Sunday: Pick up badge (Venetian), ABW Grant Welcome Kit (<em>Grant Lounge at Venetian | Level 1 | Casanova 501), ABW Grant Kickoff Celebration (Area15 | 6:00 PM &#8211; 9:00 PM) - transportation provided to/from Treasure Island)</em></p></li><li><p>Monday: AWS Cert Lounge, Breakfast at Venetian, Sessions ++, Expo at Venetian (4-7pm)</p></li><li><p>Tuesday, Wednesday, Thursday</p></li><li><p>Friday: Packing + Grand Canyon</p></li></ul></li></ul></li><li><p><strong>December 4 &#8211; 15:</strong> Rest and Recover, Complete Feedback Survey</p><ul><li><p>Take time to rest after the eventful week. Reflect on your experiences and complete the feedback survey to share your insights and thoughts about the event.</p></li></ul></li></ul><p></p><p></p><h1>9. Checklists</h1><p>To make the whole process smoother, here are some checklists I&#8217;ve put together to help you prepare, and make the most of AWS re:Invent.</p><h2>Pre-Travel Checklist</h2><ul><li><p><strong>Confirm Registration and Upload Badge Photo:</strong> Ensure your registration for re:Invent is complete, and upload a photo for your event badge.</p></li><li><p><strong>Verify AWS Certification:</strong> If applicable, confirm the status of your AWS Certification.</p></li><li><p><strong>Align Flight and Hotel Dates:</strong> Double-check that your flight arrival and departure dates match your hotel check-in and check-out times.</p></li><li><p><strong>Visa Status Update:</strong> If you're waiting on a visa, keep the grant team updated on its status.</p></li><li><p><strong>Download Essential Apps:</strong> Install the AWS Events, Slack, and Uber apps on your mobile device. Log into each and add your Uber voucher code.</p></li><li><p><strong>Agenda Planning:</strong> Build your re:Invent agenda, making sure to include all grant-related events.</p></li><li><p><strong>Utilise Certification Exam Voucher:</strong> Use your AWS Certification Exam voucher to get certified or further your credentials.</p></li><li><p><strong>Attend Mentor Group Meetup:</strong> Join your mentor group's virtual meetup and reach out to your mentor with any questions.</p></li><li><p><strong>Packing Essentials:</strong> Pack your bag, including:</p><ul><li><p>Valid ID and/or passport</p></li><li><p>Visa (if required)</p></li><li><p>Travel documents (flight tickets, hotel confirmations)</p></li><li><p>Charging cables for devices</p></li><li><p>Personal items (toothbrush, toiletries, etc.)</p></li><li><p>Comfortable clothing and shoes</p></li><li><p>Business cards for networking</p></li></ul></li><li><p><strong>Rest and Prepare:</strong> Get plenty of rest before the event to ensure you're energised and ready for an exciting and impactful week in Las Vegas.</p></li><li><p><strong>Health and Safety Preparations:</strong> Depending on current guidelines, consider packing masks, hand sanitiser, and any personal medication.</p></li><li><p><strong>Check Weather and Pack Accordingly:</strong> Look up the weather forecast for Las Vegas during re:Invent and pack suitable clothing.</p></li><li><p><strong>Backup Documentation:</strong> Have digital or physical copies of important documents like your passport, visa, and travel insurance.</p></li><li><p><strong>Portable Charger/Power Bank:</strong> Essential for keeping your devices charged throughout the day.</p></li><li><p><strong>Snacks for Travel:</strong> Have some snacks handy for your journey or in case you need a quick bite during the event.</p></li><li><p><strong>Contact Information:</strong> Keep a list of important contacts, including the hotel, event organisers, and emergency services in Las Vegas.</p></li><li><p><strong>Travel Insurance:</strong> Consider purchasing travel insurance for added security.</p></li></ul><h2>Arrival Checklist</h2><ul><li><p><strong>Use Uber Voucher for Airport Transfer:</strong> Upon landing at LAS, utilise your Uber voucher for a smooth transfer to your hotel.</p></li><li><p><strong>Hotel Check-In and Luggage Storage:</strong> Check in at Treasure Island and store your luggage if you arrive before your room is ready.</p></li><li><p><strong>Badge Pickup:</strong> If you haven&#8217;t already picked up your badge at the airport, do so upon arrival. The pickup location will typically be at the event venue.</p></li><li><p><strong>SWAG Collection:</strong> Head over to the Venetian to collect your SWAG. It&#8217;s one of the fun aspects of re:Invent!</p><ul><li><p>You get a cool re:Invent hoodie and a water bottle</p></li></ul></li><li><p><strong>Verify AWS Certification:</strong> If you haven&#8217;t verified your AWS Certification before the event, you can do this at the Venetian.</p></li><li><p><strong>ABW Grant Welcome Kit:</strong> Don&#8217;t forget to pick up your ABW Grant Welcome Kit at the Grant Lounge located in the Venetian (Level 1, Casanova 501).</p></li><li><p><strong>Attach Grant Pin to Badge Lanyard:</strong> Your ABW Grant pin will identify you as a grant participant. Attach it to your badge lanyard.</p></li><li><p><strong>Explore Sunday Sports Showcase and Rec Center:</strong> If time allows, visit the Sunday Sports Showcase at the Venetian and the re:Invent Rec Center at Mandalay Bay for some fun activities.</p></li><li><p><strong>Kickoff Celebration:</strong> Cap off your arrival day by attending the ABW Grant Kickoff Celebration at Area15 from 6:00 PM to 9:00 PM.</p></li></ul><p></p><p></p><h1>Conclusion</h1><p>As we conclude this guide, remember that AWS re:Invent is more than just a conference; it's a gateway to new knowledge, connections, and opportunities in the world of cloud computing and beyond. Whether you're a first-timer or a seasoned attendee, each re:Invent journey is unique, filled with potential for personal and professional growth. </p><p>So, embrace the experience, soak in every learning opportunity, and most importantly, enjoy the journey. Until next time, keep exploring, keep innovating, and keep reaching for new technological heights!</p><p>If you liked the blog, consider becoming a paid subscriber - it would help us a lot and ensure we are regular with the blog writing journey:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[🛡️ mTLS with Traefik: A Step-by-Step Guide 🚀]]></title><description><![CDATA[A demo going through the setup of mTLS on Traefik]]></description><link>https://blog.coderco.io/p/mtls-with-traefik-a-step-by-step</link><guid isPermaLink="false">https://blog.coderco.io/p/mtls-with-traefik-a-step-by-step</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Thu, 23 Nov 2023 10:43:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OhWK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>Introduction - mutual TLS</strong></h2><p>In the world of web security, mTLS (mutual TLS) stands as a robust method for ensuring two-way authentication between a client and a server. This guide dives into setting up mTLS with Traefik, ensuring your connections are not just secure, but mutually trusted. &#127760;&#128272;.</p><h2><strong>Why mTLS?</strong></h2><p>mTLS goes a step beyond standard TLS by requiring both the client and server to verify each other's identity as well as making sure traffic is secure and trusted in both directions between a client and a server. This is crucial for secure network access and verifying non-login client devices. &#128260;</p><p>This provides an additional layer of security for users who log in to an organization&#8217;s network or applications. It also verifies connections with client devices that do not follow a login process.</p><h2><strong>How mTLS works?</strong></h2><p>Normally in TLS, the server has a TLS certificate and a public/private key pair, while the client does not. </p><p>In mTLS, however, both client and server have a certificate, and both sides authenticate using their public/private key pair. Compared to regular TLS, there are additional steps in the mTLS to verify both parties:</p><ol><li><p>&#128421;&#65039; The client connects to the server.</p></li><li><p>&#128220; The server presents its TLS certificate.</p></li><li><p>&#128269; The client verifies the server&#8217;s certificate.</p></li><li><p>&#128196; The client then presents its TLS certificate.</p></li><li><p>&#10004;&#65039; The server verifies the client&#8217;s certificate.</p></li><li><p>&#9989; Access is granted.</p></li><li><p>&#128260; Secure, encrypted communication begins over an encrypted TLS connection.</p><p></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OhWK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OhWK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png 424w, https://substackcdn.com/image/fetch/$s_!OhWK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png 848w, https://substackcdn.com/image/fetch/$s_!OhWK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png 1272w, https://substackcdn.com/image/fetch/$s_!OhWK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OhWK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;mTLS Authentication 02&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="mTLS Authentication 02" title="mTLS Authentication 02" srcset="https://substackcdn.com/image/fetch/$s_!OhWK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png 424w, https://substackcdn.com/image/fetch/$s_!OhWK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png 848w, https://substackcdn.com/image/fetch/$s_!OhWK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png 1272w, https://substackcdn.com/image/fetch/$s_!OhWK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd35a8d10-79bd-4808-8236-9e0adef86538_1999x972.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Demo &#129520; &#128736;&#65039;</h1><h3><strong>Prerequisites</strong></h3><ul><li><p>Familiarity with load balancers (L7) and reverse proxies</p></li></ul><ul><li><p>Familiarity with Traefik &amp; Smallstep.</p></li><li><p>Basic understanding of TLS &amp; mTLS.</p></li><li><p>Install stepCLI, DNSMasq &amp; Traefik via Brew (if using macOS)</p></li><li><p>Clone the repo code to follow along &#187; <strong>https://github.com/moabukar/playground/tree/main/traefik-mTLS</strong></p></li></ul><h2><strong>Configuring Certificates and Hosts</strong></h2><ol><li><p><strong>Edit the Hosts File:</strong> Add these </p><pre><code><code>127.0.0.1 localhost mo.test server.test ca.test</code></code></pre><ul><li><p>&#127968; <code>localhost</code>: The default entry.</p></li><li><p>&#128272; <code>ca.test</code>: For the CA (Certificate Authority).</p></li><li><p>&#128421;&#65039; <code>mo.test</code>: For the Traefik dashboard.</p></li><li><p>&#127760; <code>mo.ab</code>: For local app access.</p></li></ul><p></p></li><li><p>Create a DNS server locally (the hard way) &#8212; use dnsmasq for macOS. </p></li></ol><pre><code>brew install dnsmasq

vi /usr/local/etc/dnsmasq.conf

Edit dnsmasq Configuration: Open /usr/local/etc/dnsmasq.conf in a text editor and add your custom DNS settings. For example, to resolve .test domains to your local machine, add:

address=/.test/127.0.0.1

brew services start dnsmasq
----
Configure your macOS to Use dnsmasq

- Open System Preferences: Go to System Preferences &gt; Network.

- Select Your Network: Choose your active network interface (like Wi-Fi) and click Advanced.

- Add DNS Server: Go to the DNS tab and add 127.0.0.1 as a DNS server. This will direct DNS queries to your local dnsmasq instance.

- Apply Changes: Click OK, then Apply to save the changes.

--- 
Then test it

dig mo.test
or
dig mo.test @127.0.0.1
</code></pre><ol start="3"><li><p><strong>Initialize the Step CA</strong>:</p></li></ol><pre><code><strong>step ca init --profile=test.ca --context=test.ca</strong> 

? What deployment type would you like to configure?: 
Use the arrow keys to navigate: &#8595; &#8593; &#8594; &#8592; 
&#10004; Deployment Type: <strong>Standalone</strong>
What would you like to name your new PKI?
&#10004; (e.g. Smallstep): <strong>Test</strong>
What DNS names or IP addresses will clients use to reach your CA?
&#10004; (e.g. ca.example.com[,10.1.2.3,etc.]): <strong>localhost,ca.test</strong>
What IP and port will your new CA bind to? (:443 will bind to 0.0.0.0:443)
&#10004; (e.g. :443 or 127.0.0.1:443): <strong>:54321</strong>
What would you like to name the CA's first provisioner?
&#10004; (e.g. you@smallstep.com): <strong>mo@example.com</strong>
Choose a password for your CA keys and first provisioner.
&#10004; Password: &lt;...&gt;
&#10004; Password: &lt;...&gt;
Generating root certificate... done!
Generating intermediate certificate... done!

</code></pre><ol start="4"><li><p><strong>Add a Provisioner for ACME Protocol</strong>: Necessary for Traefik.</p></li></ol><pre><code><strong>step ca provisioner add acme --type ACME --x509-min-dur 1h --x509-default-dur 9490h1m0s --x509-max-dur 9490h1m0s</strong></code></pre><ol start="5"><li><p><strong>Install the Root Certificate Locally</strong>:</p></li></ol><pre><code><strong>step certificate install /Users/mohameda/.step/authorities/test.ca/certs/root_ca.crt</strong>

## add system password ^</code></pre><ol start="6"><li><p><strong>Start smallstep CA server</strong></p></li></ol><pre><code><strong>step-ca --context=test.ca</strong></code></pre><h2><strong>Setting Up Traefik</strong></h2><ol><li><p><strong>Install Traefik</strong>: Use a package manager like <code>brew</code>.</p></li><li><p><strong>Configure </strong><code>static.yml</code><strong> and </strong><code>dynamic.yml</code>: Set up your routing and TLS options.</p><ul><li><p>&#128736;&#65039; Include <code>entryPoints</code>, <code>certificatesResolvers</code>, and <code>tls</code> configurations.</p></li></ul></li></ol><pre><code>providers:
  file:
    directory: /etc/traefik/conf
    watch: true
  http:
    endpoint: http://host.docker.internal/config

ping:
  entryPoint: "traefik"

entryPoints:
  http:
    address: ":80"

  https:
    address: ":443"

# API and dashboard configuration
api:
  insecure: true
  dashboard: true

accessLog:
  bufferingSize: 100
  filePath: log-access.log 

log:
  filePath: log-file.log
  level: DEBUG

serversTransport:
  insecureSkipVerify: true
certificatesResolvers:
  local:
    acme:
      caserver: https://ca.test:54321/acme/acme/directory
      storage: acme.json
      httpChallenge:
        entryPoint: https


metrics:
  prometheus:
    addRoutersLabels: true
</code></pre><ul><li><p><strong>Setup dynamic.yml</strong></p></li></ul><pre><code>http:
  routers:
    dashboard:
      rule: "Host(`mo.test`)"
      service: "noop@internal"
      entryPoints:
        - "http"
      middlewares:
        - "secured-redirect"
    dashboard-secured:
      entryPoints:
        - "https"
      rule: "Host(`mo.test`)"
      service: "api@internal"
      tls:
        certResolver: "local"
        domains:
          - main: "mo.test"

    moab:
      rule: "Host(`mo.ab`)"
      service: "noop@internal"
      entryPoints:
        - "http"
      middlewares:
        - "secured-redirect"
    moab-secured:
      entryPoints:
        - "https"
      rule: "Host(`mo.ab`)"
      service: "example-service"
      tls:
        certResolver: "local"
        options: acmeClient
        domains:
          - main: "mo.ab"          

  middlewares:
    secured-redirect:
      redirectscheme:
        scheme: https
        permanent: true

  services:
    example-service:
      loadBalancer:
        passHostHeader: true
        servers:
          - url: "http://localhost:8080/"

tls:
  options:
    acmeClient:
      clientAuth:
        caFiles:
          - /Users/mohameda/.step/authorities/test.ca/certs/root_ca.crt
# the path of root certificate might be like below:-
# Users/&lt;User_name&gt;/.step/authorities/test.ca/certs/root_ca.crt
        clientAuthType: RequireAndVerifyClientCert

log:
  filePath: log-file.log # relative to current location, will be created
  level: DEBUG
</code></pre><ul><li><p><strong>Create Symlink for </strong><code>dynamic.yml</code>:</p></li></ul><pre><code>sudo ln -s $(pwd)/dynamic.yml /etc/traefik/conf/dynamic.yml</code></pre><ul><li><p>Start Traefik</p></li></ul><pre><code>traefik --configfile=./static.yml</code></pre><h3><strong>Creating Certificates for mTLS Connection</strong></h3><ol><li><p><strong>Generate Client Certificate</strong>:</p></li></ol><pre><code>step ca certificate client client.crt client.key --set emailAddresses=mo@example.com --context=test.ca --size=4096 --kty=RSA

## if you run the above, make sure the CA server is running!! (step-ca --context=test.ca)

use the provisioner created previously to create a certificate for the client. (Provisioner: mo@example.com (JWK))</code></pre><ol start="2"><li><p><strong>create a .p12 &#8212; pkcs12</strong> bundle:</p></li></ol><pre><code>step certificate p12 client.p12 client.crt client.key</code></pre><p>As you can see the site cert is verified using the cert we created. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cjOV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc696a98f-c87b-4ba1-b3d8-ff894abe6a95_2212x1918.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cjOV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc696a98f-c87b-4ba1-b3d8-ff894abe6a95_2212x1918.png 424w, https://substackcdn.com/image/fetch/$s_!cjOV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc696a98f-c87b-4ba1-b3d8-ff894abe6a95_2212x1918.png 848w, https://substackcdn.com/image/fetch/$s_!cjOV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc696a98f-c87b-4ba1-b3d8-ff894abe6a95_2212x1918.png 1272w, https://substackcdn.com/image/fetch/$s_!cjOV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc696a98f-c87b-4ba1-b3d8-ff894abe6a95_2212x1918.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cjOV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc696a98f-c87b-4ba1-b3d8-ff894abe6a95_2212x1918.png" width="1456" height="1262" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c696a98f-c87b-4ba1-b3d8-ff894abe6a95_2212x1918.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1262,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:291636,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cjOV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc696a98f-c87b-4ba1-b3d8-ff894abe6a95_2212x1918.png 424w, https://substackcdn.com/image/fetch/$s_!cjOV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc696a98f-c87b-4ba1-b3d8-ff894abe6a95_2212x1918.png 848w, https://substackcdn.com/image/fetch/$s_!cjOV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc696a98f-c87b-4ba1-b3d8-ff894abe6a95_2212x1918.png 1272w, https://substackcdn.com/image/fetch/$s_!cjOV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc696a98f-c87b-4ba1-b3d8-ff894abe6a95_2212x1918.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Note: TLS works with Safari fine but there&#8217;s an issue with Chrome (need to look into this)</p><p>Check the Traefik dashboard to see the routes secured with TLS certificates.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0wkY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25152e-ffc7-4203-a7d3-6e6d91cbcfd4_2652x1450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0wkY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25152e-ffc7-4203-a7d3-6e6d91cbcfd4_2652x1450.png 424w, https://substackcdn.com/image/fetch/$s_!0wkY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25152e-ffc7-4203-a7d3-6e6d91cbcfd4_2652x1450.png 848w, https://substackcdn.com/image/fetch/$s_!0wkY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25152e-ffc7-4203-a7d3-6e6d91cbcfd4_2652x1450.png 1272w, https://substackcdn.com/image/fetch/$s_!0wkY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25152e-ffc7-4203-a7d3-6e6d91cbcfd4_2652x1450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0wkY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25152e-ffc7-4203-a7d3-6e6d91cbcfd4_2652x1450.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c25152e-ffc7-4203-a7d3-6e6d91cbcfd4_2652x1450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:381063,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0wkY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25152e-ffc7-4203-a7d3-6e6d91cbcfd4_2652x1450.png 424w, https://substackcdn.com/image/fetch/$s_!0wkY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25152e-ffc7-4203-a7d3-6e6d91cbcfd4_2652x1450.png 848w, https://substackcdn.com/image/fetch/$s_!0wkY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25152e-ffc7-4203-a7d3-6e6d91cbcfd4_2652x1450.png 1272w, https://substackcdn.com/image/fetch/$s_!0wkY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c25152e-ffc7-4203-a7d3-6e6d91cbcfd4_2652x1450.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Conclusion</h2><p>To wrap up, implementing mTLS with Traefik effectively elevates the security of your network communications. This setup ensures that both clients and servers are authenticated, providing a higher level of trust and security in your connections. While it requires some initial setup, the enhanced security is well worth the effort. Remember, in a world where digital threats are ever-present, taking proactive steps to secure your network is not just a best practice&#8212;it's a necessity.</p><p><strong>CODE: https://github.com/moabukar/playground/tree/main/traefik-mTLS</strong></p>]]></content:encoded></item><item><title><![CDATA[How to Fortify Your Docker Containers: A Guide to Advanced Security Practices]]></title><description><![CDATA[Introduction]]></description><link>https://blog.coderco.io/p/how-to-fortify-your-docker-containers</link><guid isPermaLink="false">https://blog.coderco.io/p/how-to-fortify-your-docker-containers</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Tue, 21 Nov 2023 10:01:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!luA0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Introduction</h1><p>DevOps has been rapidly evolving in the software development landscape, and from the cornerstone Docker has emerged. Its ability to package applications into portable, scalable containers has taken deployment strategies to the next level. However, with this power, comes the responsibility of securing the containers. In this blog, we dive deep into advanced techniques and best practices for securing Docker containers, ensuring your deployments are not just efficient but also fortified against a variety of cyber threats.</p><h3>We will cover the following:</h3><ul><li><p>Securing container images</p></li><li><p>Vulnerability scanning and management</p></li><li><p>Post-deployment? Runtime container security</p></li><li><p>Docker in CI/CD pipelines</p></li><li><p>Continuous security monitoring and feedback loops</p></li><li><p>Real-world scenario - securing containers in a CI/CD workflow</p></li></ul><p>In short, this blog is not just a guide; it&#8217;s a journey into the depths of Docker container security. So I hope by the end of this blog, you will be equipped not just with knowledge but with practical, actionable strategies to fortify your containers against the never-ending cyber threats.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!luA0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!luA0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!luA0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!luA0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!luA0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!luA0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png" width="1456" height="1061" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1061,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!luA0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!luA0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!luA0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!luA0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4278a2da-a6fb-483c-b6f6-50443b414cc1_1768x1288.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><em>Quick Reminders:</em></h3><ol><li><p>Join our 10-hour Linux Course waiting list &#10145;&#65039; <a href="https://www.amigoscode.com/courses/linux">Waiting List! </a></p></li><li><p>Subscribe to our YouTube Channel, we are currently working on something, click on the &#128276; so you don&#8217;t miss out: <a href="https://www.youtube.com/@coderco">CoderCo</a></p></li></ol><div><hr></div><h1>Building Secure Docker Images</h1><p>When it comes to Docker, the image is everything - literally. It&#8217;s the blueprint of your application, dictating how it will run in various environments. But not all Docker images are created equal, especially if we look at it from a security standpoint. Let&#8217;s dissect how to build secure Docker images, spotlighting common pitfalls and showcasing better practices.</p><h2>The Not-So-Great Dockerfile</h2><p>First, let's look at an example of what you might call a 'less-than-ideal' Dockerfile. It's common, maybe a bit too common, in the wild:</p><pre><code><code># Example of a suboptimal Dockerfile

FROM ubuntu:latest

RUN apt-get update &amp;&amp; apt-get install -y python3 python3-pip python3-dev
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt

CMD ["python3", "app.py"]
</code></code></pre><h3>At first glance, it seems okay, right? But let's break it down:</h3><ul><li><p>Using <code>ubuntu:latest</code> as a base image. It's like rolling the dice with security.</p></li><li><p>Installing unnecessary packages (<code>python3-dev</code>), adding to the attack surface.</p></li><li><p>No specific user is defined, meaning the container might run with root privileges.</p></li></ul><h2><strong>The Improved Dockerfile</strong></h2><p>Now, let's refactor this Dockerfile with security in mind:</p><pre><code><code># Example of a more secure Dockerfile

FROM python:3.9-slim

RUN useradd -m dockeruser
WORKDIR /home/dockeruser
COPY . .

RUN pip install --no-cache-dir -r requirements.txt
USER dockeruser

CMD ["python", "app.py"]
</code></code></pre><h3>Why is this one better?</h3><ul><li><p>We're using <code>python:3.9-slim</code> as a base image. It's leaner and more secure.</p></li><li><p>We create a non-root user (<code>dockeruser</code>) and switch to it. No more running as root!</p></li><li><p>The <code>-no-cache-dir</code> flag with pip prevents caching unnecessary files.</p></li></ul><h2><strong>Key Takeaways</strong></h2><ul><li><p><strong>Choose the Right Base Image</strong>: Opt for slimmer, more secure base images that contain only what you need.</p></li><li><p><strong>Avoid Running as Root</strong>: Always create and switch to a non-root user in your Dockerfile.</p></li><li><p><strong>Minimize Layers and Build Cache</strong>: Keep your images lean. Unnecessary layers and cached data can be a haven for vulnerabilities.</p></li></ul><p>Remember, building a secure Docker image is like laying a strong foundation for a house. It's a crucial first step in ensuring the security of your containerized applications.</p><h1>Vulnerability Scanning and Management</h1><p>A crucial checkpoint in container security is vulnerability scanning and management. It&#8217;s not just about building secure containers; it&#8217;s also about continuously monitoring them for vulnerabilities. This process is akin to a routine health check-up for your container images, ensuring they are always in top-notch security shape.</p><h2><strong>The Vital Role of Vulnerability Scanning</strong></h2><p>Imagine your Docker containers as constantly evolving entities. Each change, addition, or update potentially opens the door to new vulnerabilities. That's where vulnerability scanning steps in - it's a measure against these evolving threats.</p><h3>Several tools can help you in this mission:</h3><ul><li><p><strong>Clair</strong>: Known for its static analysis capabilities, Clair is a robust choice for scanning container vulnerabilities.</p></li><li><p><strong>Trivy</strong>: Praised for its simplicity and comprehensiveness, Trivy scans containers and other artifacts for vulnerabilities.</p></li><li><p><strong>Docker Bench for Security</strong>: This tool focuses on best practices for deploying Docker containers securely.</p></li></ul><h2><strong>Integrating Vulnerability Scanning with GitHub Actions</strong></h2><ul><li><p>Integrating vulnerability scanning into your CI/CD pipeline is essential. Let's demonstrate how you can incorporate Trivy scanning within a GitHub Actions workflow:</p></li></ul><pre><code><code>name: CI

on: [push]

jobs:
  trivy_scan:
    runs-on: ubuntu-latest
    steps:
    - name: Check out the repo
      uses: actions/checkout@v2

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1

    - name: Login to DockerHub
      uses: docker/login-action@v1
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}

    - name: Build and push Docker image
      uses: docker/build-push-action@v2
      with:
        context: .
        push: true
        tags: yourdockerimage:tag

    - name: Run Trivy vulnerability scanner
      uses: aquasecurity/trivy-action@master
      with:
        image-ref: 'yourdockerimage:tag'
        format: 'table'
        exit-code: '1'
</code></code></pre><ul><li><p>This GitHub Actions workflow automatically checks out your code and runs Trivy against your Docker image on every push to the repository. If Trivy finds any vulnerabilities, the action will fail, alerting you to take necessary actions.</p></li></ul><h1><strong>Why Continuous Assessment Matters</strong></h1><p>In the world of container security, you cannot be complacent. Continuous vulnerability assessment ensures that your security measures evolve with emerging threats. Integrating these scans into your CI/CD pipeline via tools like GitHub Actions ensures that every new build is vetted for security vulnerabilities before it hits production.</p><h2>Advanced Runtime Container Security</h2><p>Having established a solid foundation with secure Docker image creation and continuous vulnerability scanning, it's time to focus on the runtime environment. Advanced runtime container security is about ensuring that once your containers are up and running, they continue to operate in a secure and isolated manner.</p><h2>Container Isolation and Segregation</h2><ul><li><p>Isolation is a fundamental principle in container security. Docker achieves this through mechanisms like namespaces and control groups (cgroups) - you might know this if you have a good Linux background.</p><ul><li><p><strong>Namespaces</strong>: Docker uses namespaces to provide each container with its own isolated workspace, including its own network, process ID space, mount points, and inter-process communication (IPC) resources.</p></li><li><p><strong>Cgroups</strong>: Control groups limit and allocate resources such as CPU, memory, network bandwidth, and disk I/O among a group of processes. This prevents any single container from exhausting system resources.</p></li></ul></li></ul><h3>Implementing Security Best Practices for Isolation</h3><ul><li><p><strong>Network Segregation</strong>: Use Docker's network drivers to create separate networks for different containers or groups of containers, minimising the risk of a compromised container affecting others.</p><ul><li><p><strong>Read-only Filesystems</strong>: Where possible, run containers with read-only filesystems using the <code>-read-only</code> flag. This can prevent malicious processes from writing to the filesystem.</p></li><li><p><strong>Use of User Namespaces</strong>: Enable user namespaces to map users inside a container to different users on the host system, thereby limiting the impact of a container compromise.</p></li></ul></li></ul><h2>Implementing Resource Limits</h2><p>Managing resource limits is not just a matter of performance, but also of security. Unrestricted resource usage can lead to DoS (Denial of Service) attacks.</p><h3>Setting Container Resource Limits</h3><ul><li><p>Use Docker's resource management features to set limits on a container's use of system resources:</p><ul><li><p><strong>Memory Limits</strong>: Use the <code>m</code> or <code>-memory</code> flag to limit a container's memory usage.</p></li><li><p><strong>CPU Limits</strong>: Use the <code>-cpus</code> flag to limit the number of CPU cores a container can use.</p></li></ul><p>For example:</p></li></ul><pre><code><code>docker run -it --memory=500m --cpus="1.5" ubuntu:latest /bin/bash
</code></code></pre><ul><li><p>This command runs an Ubuntu container with a maximum of 500 MB of memory and 1.5 CPU cores.</p></li></ul><h2><strong>Security Benchmarks: The CIS Docker Benchmark</strong></h2><p>A key aspect of runtime container security is adhering to established security benchmarks. The CIS Docker Benchmark, provided by the Center for Internet Security, is a widely recognised standard for securing Docker containers.</p><h3>Implementing the CIS Docker Benchmark</h3><ol><li><p><strong>Container Image Assurance</strong>: Ensure only trusted base images are used, and enforce vulnerability scanning.</p></li><li><p><strong>Container Runtime Security</strong>: Apply runtime security measures like network segmentation, resource limits, and audit logging.</p></li><li><p><strong>Host Security Configuration</strong>: Secure the host system running Docker, adhering to host-level security benchmarks.</p></li></ol><p>In summary, advanced runtime container security is about ensuring your containers not only start securely but continue to operate securely within their runtime environment. By implementing isolation, and resource limits, and adhering to security benchmarks like the CIS Docker Benchmark, you can significantly enhance the security posture of your containerised applications.</p><h1>A real-world scenario</h1><ul><li><p>Let&#8217;s now explore a real-world scenario that illustrates the implementation of container security in a CI/CD pipeline. This case study is based on a mid-sized tech company, which we'll call "CoderCo," that adopted Docker containers for their application deployments.</p></li></ul><h2>Background</h2><p>CoderCo had a robust CI/CD pipeline but initially overlooked the security aspects of their containerised applications. As they scaled, they faced challenges with managing vulnerabilities in their Docker images and ensuring secure deployments.</p><h2>Challenge</h2><p>The primary challenge for CoderCo was integrating security measures into their existing CI/CD workflow without disrupting their deployment speed. They needed a solution that would automatically scan for vulnerabilities, enforce security best practices, and provide real-time security monitoring.</p><h2>Solution</h2><ol><li><p><strong>Automating Vulnerability Scanning</strong>: CoderCo integrated Trivy into their GitHub Actions pipeline. This tool automatically scanned new Docker images for vulnerabilities during the build phase. If critical vulnerabilities were detected, the deployment was halted.</p></li><li><p><strong>Implementing Security Benchmarks</strong>: They adopted the CIS Docker Benchmark, ensuring their Docker configurations adhered to industry-standard security practices.</p><ul><li><p><strong>Ensure a user for the container</strong>: They modified Dockerfiles to include a non-root user for running the container processes.</p></li><li><p><strong>Enable Docker Content Trust</strong>: They enforced image verification by setting the <code>DOCKER_CONTENT_TRUST</code> environment variable.</p></li><li><p><strong>Limit Container Resources</strong>: Resource limits (CPU, memory) were set for each container to mitigate DoS attacks.</p></li><li><p><strong>Audit Docker Files and Directories</strong>: Regular audits were scheduled for Docker daemon files, directories, and configurations.</p></li></ul></li><li><p><strong>Continuous Security Monitoring</strong>: TechFlow set up Prometheus and Grafana for real-time monitoring of their container environments. They monitored metrics like container resource usage, network activity, and unexpected behaviour patterns.</p></li></ol><h2>Implementation Example</h2><ul><li><p>Here's an example Dockerfile change implementing non-root user:</p></li></ul><pre><code><code># Original Dockerfile
FROM nginx:latest
COPY . /usr/share/nginx/html

# Modified Dockerfile with CIS Benchmark
FROM nginx:latest
RUN useradd -m dockeruser
USER dockeruser
COPY . /usr/share/nginx/html
</code></code></pre><ul><li><p>To enforce Docker Content Trust, they added the following to their CI/CD pipeline script:</p></li></ul><pre><code><code>export DOCKER_CONTENT_TRUST=1
docker build -t secureapp .
</code></code></pre><h3><strong>Results</strong></h3><ul><li><p>After implementing the CIS Docker Benchmark:</p><ul><li><p>There was a notable decrease in configuration-related vulnerabilities.</p></li><li><p>The team gained better insight into Docker security best practices.</p></li><li><p>The automated enforcement of these benchmarks added a robust layer of security without adding manual overhead.</p></li></ul></li></ul><h3><strong>Lessons Learned</strong></h3><ul><li><p><strong>Incremental Implementation</strong>: It's more effective to implement security benchmarks incrementally rather than trying to overhaul the system all at once.</p></li><li><p><strong>Employee Training</strong>: Educating the team about the importance of these benchmarks was crucial for smooth implementation.</p></li><li><p><strong>Continuous Review</strong>: Regularly reviewing and updating the configurations according to the latest benchmark versions helped maintain a high security standard.</p></li></ul><p>Implementing the CIS Docker Benchmark significantly enhanced the security posture of CoderCo&#8217;s Docker environment. This case study highlights the practicality and effectiveness of following industry-standard benchmarks to secure Docker containers.</p><h1>Conclusion</h1><p>To conclude our exploration of the advanced techniques and best practices for securing Docker containers, we must remember it&#8217;s a continuous journey. The landscape of container security is continously evolving; so we must also evolve the techniques we use.</p><p>The key takeaway from our dicussions is the importance of ongoing vigilance. Security is not a one-time setup; it&#8217;s a continous process of monitoring, updating, and adapting to new threats and vulnerabilities.</p><p>So it&#8217;s essential to stay informed about the latest security trends, tools, and threats. Continuous learning and adaptation isn&#8217;t a recommendation&#8230;it&#8217;s NECESSARY for maintaining robust security practices.</p><h2>Summarising Key Points:</h2><ul><li><p><strong>Secure Docker Images</strong>: Start with creating secure Docker images, focusing on minimalism and the principle of least privilege.</p></li><li><p><strong>Vulnerability Scanning and Management</strong>: Integrate continuous vulnerability scanning in your CI/CD pipeline to catch issues early.</p></li><li><p><strong>Runtime Security</strong>: Implement advanced runtime security measures like container isolation, resource limits, and adherence to security benchmarks like the CIS Docker Benchmark.</p></li><li><p><strong>CI/CD Security Integration</strong>: Embed security checks into your CI/CD pipeline to ensure continuous delivery of secure applications.</p></li><li><p><strong>Continuous Monitoring and Feedback</strong>: Establish monitoring and feedback mechanisms for ongoing security assessment and improvement.</p></li></ul><h3><strong>Final Thoughts</strong></h3><p>As Docker continues to play a critical role in modern DevOps, the responsibility of securing containers becomes increasingly significant. By adopting the practices and techniques we discussed, you can ensure that your containers are not just efficient and scalable, but also secure and resilient against the cyber threats in the digital world.</p><p>Remember, the path to securing Docker containers is ongoing. Stay curious, stay informed, and continually adapt your security practices to navigate this ever-changing landscape successfully.</p>]]></content:encoded></item><item><title><![CDATA[Traefik: canary deployments by using weighted load balancing]]></title><description><![CDATA[In the ever-evolving landscape of web services, the need for efficient load balancing and service discovery becomes paramount, especially when dealing with dynamic and scalable environments.]]></description><link>https://blog.coderco.io/p/traefik-canary-deployments-by-using</link><guid isPermaLink="false">https://blog.coderco.io/p/traefik-canary-deployments-by-using</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Mon, 13 Nov 2023 13:56:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VY1G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the ever-evolving landscape of web services, the need for efficient load balancing and service discovery becomes paramount, especially when dealing with dynamic and scalable environments. While Nginx and HAProxy have been the go-to choices for many, Traefik emerges as a compelling alternative that excels in automatic and dynamic configurability. Here's how it stands out.</p><h2><strong>Why Traefik for Small-Scale Deployments?</strong></h2><p>Traefik shines in scenarios where deploying a full-fledged orchestrator like Kubernetes might be overkill due to resource requirements and complexity. When combined with Docker, even on a single machine, Traefik provides an ideal solution that aligns with modern development best practices. It simplifies canary deployments, allowing for safe and incremental updates, by leveraging weighted load balancing.</p><h3><strong>Canary Deployments Simplified</strong></h3><p>Consider a basic setup with one machine hosting a Docker daemon and a Traefik container managing incoming requests. Implementing a canary deployment model becomes a breeze. By adjusting the weights assigned to your containers, you can control the traffic flow between your stable and new service versions.</p><h4>Example: Weighted Load Balancing with Traefik v1</h4><p>In Traefik v1, setting up weighted load balancing was straightforward. You'd start your Traefik container and use labels to define the weight of your service containers. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VY1G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VY1G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png 424w, https://substackcdn.com/image/fetch/$s_!VY1G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png 848w, https://substackcdn.com/image/fetch/$s_!VY1G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png 1272w, https://substackcdn.com/image/fetch/$s_!VY1G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VY1G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Traefik v1 architecture&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Traefik v1 architecture" title="Traefik v1 architecture" srcset="https://substackcdn.com/image/fetch/$s_!VY1G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png 424w, https://substackcdn.com/image/fetch/$s_!VY1G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png 848w, https://substackcdn.com/image/fetch/$s_!VY1G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png 1272w, https://substackcdn.com/image/fetch/$s_!VY1G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfcc996a-5a18-425a-b56a-a41154847921_1921x1050.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For instance:</p><pre><code># Launch Traefik v1.7 as the reverse proxy
docker run -d \
  --name my_traefik \
  -p 8080:80 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  traefik:v1.7 \
    --docker \
    --docker.exposedbydefault=false

# Start your application containers with new weight distributions
docker run -d --name app_v1 \
  --label "traefik.enable=true" \
  --label "traefik.backend=myapp" \
  --label "traefik.frontend.rule=Host:myapp.local" \
  --label "traefik.weight=30" \
  nginx:stable

docker run -d --name app_v2 \
  --label "traefik.enable=true" \
  --label "traefik.backend=myapp" \
  --label "traefik.frontend.rule=Host:myapp.local" \
  --label "traefik.weight=70" \
  nginx:stable-alpine
</code></pre><h3><strong>Transitioning to Traefik v2</strong></h3><p>With the introduction of Traefik v2, the landscape changed. The shift from the frontend-backend paradigm to routers and services, along with explicit middleware layers, meant rethinking the configuration approach. Traefik v2 eliminated the weight directive but introduced the Weighted Round Robin Service (WRR), albeit with limitations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y0nT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d42f0e2-5712-4061-92a6-26a6c2740af7_3165x1730.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y0nT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d42f0e2-5712-4061-92a6-26a6c2740af7_3165x1730.png 424w, https://substackcdn.com/image/fetch/$s_!y0nT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d42f0e2-5712-4061-92a6-26a6c2740af7_3165x1730.png 848w, https://substackcdn.com/image/fetch/$s_!y0nT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d42f0e2-5712-4061-92a6-26a6c2740af7_3165x1730.png 1272w, https://substackcdn.com/image/fetch/$s_!y0nT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d42f0e2-5712-4061-92a6-26a6c2740af7_3165x1730.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y0nT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d42f0e2-5712-4061-92a6-26a6c2740af7_3165x1730.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d42f0e2-5712-4061-92a6-26a6c2740af7_3165x1730.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Reworked Traefik v2 architecture&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Reworked Traefik v2 architecture" title="Reworked Traefik v2 architecture" srcset="https://substackcdn.com/image/fetch/$s_!y0nT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d42f0e2-5712-4061-92a6-26a6c2740af7_3165x1730.png 424w, https://substackcdn.com/image/fetch/$s_!y0nT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d42f0e2-5712-4061-92a6-26a6c2740af7_3165x1730.png 848w, https://substackcdn.com/image/fetch/$s_!y0nT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d42f0e2-5712-4061-92a6-26a6c2740af7_3165x1730.png 1272w, https://substackcdn.com/image/fetch/$s_!y0nT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d42f0e2-5712-4061-92a6-26a6c2740af7_3165x1730.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>Setting up Weighted Load Balancing in Traefik v2</h4><p>WRR required a combination of file and Docker providers to implement. For example, a file provider configuration might look like this:</p><pre><code># dynamic_config.yml
http:
  routers:
    myapp-router:
      rule: "Host(`myapp.local`)"
      service: myapp-service

  services:
    myapp-service:
      weighted:
        services:
          - name: app-v1-service@docker
            weight: 3
          - name: app-v2-service@docker
            weight: 7
</code></pre><p>Now, fire up the containers with adjusted labels to align with the services defined:</p><p></p><p>Start Traefik first:</p><pre><code>docker run -d --rm --name traefik-v2.5 \
  -p 9999:80 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v `pwd`:/etc/traefik_providers \
  traefik:v2.5 \
    --providers.docker \
    --providers.docker.exposedbydefault=false \
    --providers.file.filename=/etc/traefik_providers/file_provider.yml</code></pre><p>Then start your apps:</p><pre><code># Starting containers with Traefik v2 labels
docker run -d --name app_v1 \
  --label "traefik.enable=true" \
  --label "traefik.http.services.app-v1-service.loadbalancer.server.port=80" \
  nginx:stable

docker run -d --name app_v2 \
  --label "traefik.enable=true" \
  --label "traefik.http.services.app-v2-service.loadbalancer.server.port=80" \
  nginx:stable-alpine
</code></pre><h3><strong>Observations and Adjustments</strong></h3><p>You can modify weights or toggle the canary service simply by altering the file provider's YAML config. Traefik's dynamic response to changes ensures a smooth transition.</p><p>To verify your load distribution, the following command can be run:</p><pre><code>for i in {1..50}; do curl -s -o /dev/null -D - -H "Host:myapp.local" localhost:8080 | grep X-Powered-By; done | sort | uniq -c
</code></pre><p>This test helps you to ascertain that your setup is working correctly, distributing the load according to the specified weights.</p><h2><strong>Conclusion</strong></h2><p>Even with the steeper learning curve of Traefik v2, the benefits of automatic service discovery and ease of load balancing in a dynamic environment are undeniably valuable. </p>]]></content:encoded></item><item><title><![CDATA[DevOps Challenge #2 - Ansible automation magic]]></title><description><![CDATA[This task requires you to use Ansible and YAML to write playbooks]]></description><link>https://blog.coderco.io/p/devops-challenge-2-ansible-automation</link><guid isPermaLink="false">https://blog.coderco.io/p/devops-challenge-2-ansible-automation</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Tue, 07 Nov 2023 13:58:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TbRJ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364bc992-cd12-43d5-8b4b-bf07d15c1214_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there, cloud wranglers! &#129312; So you've been playing with AWS and Terraform, but have you explored the wonders of Ansible yet? If not, here's your chance! In this article, we're going to set up an Apache web server on an Ubuntu machine, all automated with Ansible. Trust me, it's as cool as it sounds!</p><p>Here is the task:</p><pre><code>
## Ansible Exercise 1: Configure a Web Server

### Objective

Your task is to write an Ansible playbook that automates the following tasks on a remote Ubuntu server:

- **Step 1**: Update the package manager cache.
  
- **Step 2**: Install the Apache web server package (`apache2`).

- **Step 3**: Enable and start the Apache service.

- **Step 4**: Deploy a simple `index.html` file to the document root `/var/www/html/`. The HTML should display "Hello, Ansible!"

### Requirements

- The playbook should be idempotent, meaning it can be run multiple times without changing the outcome.

- The target hosts should be defined in your Ansible inventory
</code></pre><h2><strong>What You'll Need</strong></h2><ul><li><p>A machine running Ubuntu (either a VM or a real server&#8212;it's all good)</p></li><li><p>Ansible installed on your control node</p></li><li><p>SSH access to your Ubuntu machine</p></li><li><p>A little bit of know-how with YAML and the command line</p></li></ul><h1><strong>Automate Your Web Server Setup with Ansible: A Hands-on Exercise</strong></h1><h2><strong>Introduction</strong></h2><p>Hey there, cloud wranglers! &#129312; So you've been playing with AWS and Terraform, but have you explored the wonders of Ansible yet? If not, here's your chance! In this article, we're going to set up an Apache web server on an Ubuntu machine, all automated with Ansible. Trust me, it's as cool as it sounds!</p><h2><strong>What You'll Need</strong></h2><ul><li><p>A machine running Ubuntu (either a VM or a real server&#8212;it's all good)</p></li><li><p>Ansible installed on your control node</p></li><li><p>SSH access to your Ubuntu machine</p></li><li><p>A little bit of know-how with YAML and command line</p></li></ul><h2><strong>Exercise 1: Your Very Own Web Server</strong></h2><h3><strong>Objective</strong></h3><p>Alright, champ, your mission, should you choose to accept it, involves a few key steps:</p><ul><li><p>Update the Ubuntu server's package manager.</p></li><li><p>Install Apache web server.</p></li><li><p>Make sure the Apache service is up and running.</p></li><li><p>Deploy a simple "Hello, Ansible!" webpage.</p></li></ul><h3><strong>Steps</strong></h3><h4>Step 1: Set Up Inventory</h4><p>First, make sure you have the target Ubuntu host's IP address in your Ansible inventory. The inventory file often lives in <code>/etc/ansible/hosts</code>.</p><pre><code>[webserver]
192.168.1.2 ansible_ssh_user=ubuntu</code></pre><h4>Step 2: Write the Playbook</h4><p>Open your favourite text editor (yeah, you can use Vim if you're old-school like that), and create a new file called <code>web_server_setup.yml</code>.</p><p>Here's the playbook to achieve our mission:</p><pre><code>---
- hosts: webserver
  tasks:
    - name: Update package manager cache
      apt:
        update_cache: yes

    - name: Install Apache web server
      apt:
        name: apache2

    - name: Enable and start Apache service
      systemd:
        name: apache2
        enabled: yes
        state: started

    - name: Deploy index.html
      copy:
        content: "&lt;h1&gt;Hello, Ansible!&lt;/h1&gt;"
        dest: /var/www/html/index.html</code></pre><h4>Step 3: Run the Playbook</h4><p>Navigate to <code>/home/ubuntu/tech-vault-ansible</code> and execute:</p><pre><code>ansible-playbook web_server_setup.yml</code></pre><h2><strong>Conclusion</strong></h2><p>Boom, you did it! You should now have a running Apache web server, and if you visit the server's IP address in a web browser, you should see a lovely "Hello, Ansible!" greeting. You've just stepped into the world of automating server setups with Ansible, and trust me, it's a skill that'll make you feel like a wizard. &#129497;&#8205;&#9794;&#65039;</p><p></p>]]></content:encoded></item><item><title><![CDATA[DevOps Challenges Series #1 - Terraform resources]]></title><description><![CDATA[This challenge uses Terraform to build your own AWS resources]]></description><link>https://blog.coderco.io/p/devops-challenges-series-1-terraform</link><guid isPermaLink="false">https://blog.coderco.io/p/devops-challenges-series-1-terraform</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Tue, 31 Oct 2023 11:40:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364bc992-cd12-43d5-8b4b-bf07d15c1214_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey DevOps enthusiasts! &#128640; If you're anything like me, you're always on the hunt for ways to automate and streamline cloud operations. One tool that I think is a game-changer for this is Terraform. In today's article, we're diving deep into three hands-on exercises to master AWS resource management using Terraform. We're going to play around with S3 buckets, set up our own VPC, and even launch an EC2 instance. So, gear up, folks!<br><br>Here is the task from Tech-Vault. Here is the link to the question </p><p>https://github.com/moabukar/tech-vault/tree/main/hands-on#6-terraform-test <br></p><pre><code>
<strong>## Terraform Exercise 1: Create an AWS S3 Bucket</strong>

### Objective

Your task is to write a Terraform script that does the following:

- **Step 1**: Create an AWS S3 bucket named `tf-test-bucket-yourname`.

- **Step 2**: Enable versioning on the S3 bucket.

- **Step 3**: Create a folder within that S3 bucket and name it `uploads`.


---

<strong>## Terraform Exercise 2: Set up a VPC</strong>

### Objective

Write a Terraform script to set up a Virtual Private Cloud (VPC) in AWS with the following:

- **Step 1**: Create a VPC with CIDR block `10.0.0.0/16`.

- **Step 2**: Create a subnet in that VPC with CIDR block `10.0.1.0/24`.

- **Step 3**: Attach an internet gateway to the VPC.


<strong>## Terraform Exercise 3: Managing EC2 Instances</strong>

### Objective

Your objective is to create a Terraform script that automates the following:

- **Step 1**: Launch an EC2 instance with type `t2.micro`.

- **Step 2**: Make sure to use an Amazon Linux 2 AMI.

- **Step 3**: Tag the instance with "Environment: Dev".

</code></pre><p>Now, let&#8217;s solve it!<br><br><strong>Exercise 1: The S3 Adventure<br><br>Objective</strong></p><p>Let's kick things off by creating an S3 bucket. An S3 bucket is basically your personal storage space on AWS where you can store files, images, and more.<br><br><strong>Your Tasks</strong>:</p><ul><li><p>Create an S3 bucket.</p></li><li><p>Enable versioning on the bucket.</p></li><li><p>Add an <code>uploads</code> folder.</p></li></ul><p></p><h3><strong>Steps</strong></h3><ol><li><p><strong>Write the Script</strong>: Open your text editor and create a new file called <code>s3_bucket.tf</code>. Here's a simple Terraform script to meet the objectives.</p></li></ol><pre><code>resource "aws_s3_bucket" "my_bucket" {
  bucket = "tf-test-bucket-yourname"
  acl    = "private"

  versioning {
    enabled = true
  }
}

resource "aws_s3_bucket_object" "my_folder" {
  bucket = aws_s3_bucket.my_bucket.id
  key    = "uploads/"
  source = "/dev/null"
}</code></pre><ol start="2"><li><p><strong>Run the Script</strong>: Navigate to <code>/home/ubuntu/q6 </code>and run <code>terraform apply</code>. This should execute your Terraform script and create the S3 bucket.</p></li></ol><h3><strong>Insights</strong></h3><p>Enabling versioning on an S3 bucket is a neat trick to keep track of changes made to the objects. It's like having a time machine for your S3 bucket.</p><p></p><h2><strong>Exercise 2: Building Your Own VPC</strong></h2><h3><strong>Objective</strong></h3><p>A VPC (Virtual Private Cloud) gives you a private slice of the AWS cloud where you can launch resources. Your mission is to set up your own VPC.</p><p><strong>Your Tasks</strong>:</p><ul><li><p>Create a VPC.</p></li><li><p>Add a subnet.</p></li><li><p>Attach an internet gateway.</p></li></ul><p></p><h3><strong>Steps</strong></h3><ol><li><p><strong>Write the Script</strong>: In your text editor, create a file named <code>aws_vpc.tf</code>.</p></li></ol><pre><code>resource "aws_vpc" "my_vpc" {
  cidr_block = "10.0.0.0/16"
}

resource "aws_subnet" "my_subnet" {
  vpc_id     = aws_vpc.my_vpc.id
  cidr_block = "10.0.1.0/24"
}

resource "aws_internet_gateway" "my_gw" {
  vpc_id = aws_vpc.my_vpc.id
}</code></pre><p><strong>Run the Script</strong>: Navigate to <code>/home/ubuntu/q6</code> and execute <code>terraform apply</code>.</p><p>Creating a VPC lets you have a private playground in AWS, sort of like your own private room in a big mansion!</p><p></p><h2><strong>Exercise 3: EC2 for the Win</strong></h2><h3><strong>Objective</strong></h3><p>EC2 (Elastic Compute Cloud) instances are basically virtual servers. You'll be launching your own EC2 instance.</p><p><strong>Your Tasks</strong>:</p><ul><li><p>Launch an EC2 instance.</p></li><li><p>Use Amazon Linux 2 AMI.</p></li><li><p>Add a tag "Environment: Dev".</p></li></ul><h3><strong>Steps</strong></h3><ol><li><p><strong>Write the Script</strong>: Create a file named <code>ec2_instance.tf</code>.</p></li></ol><pre><code>resource "aws_instance" "my_instance" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  tags = {
    Environment = "Dev"
  }
}</code></pre><p><strong>Run the Script</strong>: Move to <code>/home/ubuntu/terraform-tech-vault</code> and run <code>terraform apply</code>.</p><h2><strong>Conclusion</strong></h2><p>Alright, folks, that's a wrap for today! If you've been following along, you now have a new S3 bucket, your very own VPC, and a shiny EC2 instance running in AWS&#8212;all thanks to Terraform! Isn't automation just fantastic?</p>]]></content:encoded></item><item><title><![CDATA[An into into ZeroMQ: Practical Messaging Queues for Modern Development]]></title><description><![CDATA[Practical Messaging with ZeroMQ: A Multi-Language Tutorial]]></description><link>https://blog.coderco.io/p/a-deep-dive-into-zeromq-practical</link><guid isPermaLink="false">https://blog.coderco.io/p/a-deep-dive-into-zeromq-practical</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Mon, 30 Oct 2023 12:31:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6b77553d-cdfc-488d-bc34-56f993cf71e1_526x165.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>Introduction</strong></h1><p>Understanding how to effectively communicate between different parts of a software architecture is critical for any developer. Messaging queues play a big role in this, enabling a reliable, scalable, and efficient way for components to exchange data. In this article, we'll take a closer look at ZeroMQ, a messaging library that simplifies the process.</p><h1><strong>What is a Messaging Queue?</strong></h1><p>At its core, a messaging queue is a mechanism that enables different parts of a system to send and receive messages. Think of it as intermediary storage where messages wait until they are retrieved by a receiving component. This ensures better fault tolerance and can help distribute workloads.</p><p>In simple words, a messaging queue is like a post office for your applications. Imagine you have two apps, let's call them App-A and App-B. If App-A wants to send some info to App-B, it can't just shout across the room. It puts that message in an envelope and drops it off at the messaging queue. Later, App-B picks it up when it has time. Easy-peasy!</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TjDG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F442046e0-4045-43fa-8c2c-2a8f1fe10f9b_443x180.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TjDG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F442046e0-4045-43fa-8c2c-2a8f1fe10f9b_443x180.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TjDG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F442046e0-4045-43fa-8c2c-2a8f1fe10f9b_443x180.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TjDG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F442046e0-4045-43fa-8c2c-2a8f1fe10f9b_443x180.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TjDG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F442046e0-4045-43fa-8c2c-2a8f1fe10f9b_443x180.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TjDG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F442046e0-4045-43fa-8c2c-2a8f1fe10f9b_443x180.jpeg" width="443" height="180" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/442046e0-4045-43fa-8c2c-2a8f1fe10f9b_443x180.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:180,&quot;width&quot;:443,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;What is Message Queuing? - CloudAMQP&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="What is Message Queuing? - CloudAMQP" title="What is Message Queuing? - CloudAMQP" srcset="https://substackcdn.com/image/fetch/$s_!TjDG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F442046e0-4045-43fa-8c2c-2a8f1fe10f9b_443x180.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TjDG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F442046e0-4045-43fa-8c2c-2a8f1fe10f9b_443x180.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TjDG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F442046e0-4045-43fa-8c2c-2a8f1fe10f9b_443x180.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TjDG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F442046e0-4045-43fa-8c2c-2a8f1fe10f9b_443x180.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p></p><h1><strong>Why ZeroMQ?</strong></h1><h3><strong>Reliable &#128736;&#65039;</strong></h3><p>ZeroMQ is rock-solid. If you send a message, you can be pretty sure it's gonna get there. Even if the network is clogged or a service is down, ZeroMQ takes care of retries and all the dirty work for you.</p><h3><strong>Scalable &#11014;&#65039;</strong></h3><p>ZeroMQ is designed to work in a distributed setting, which makes it inherently scalable. This makes it easier to extend systems without a complete overhaul.</p><h3><strong>Efficient &#128640;</strong></h3><p>It's fast, like really fast. ZeroMQ uses minimal resources, so your CPU can chill a bit. ZeroMQ minimizes resource usage by reducing the CPU load and memory footprint, making it a fast and lean solution for messaging.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oDqL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7927457-1e0e-478c-96de-ff7766a9e33d_526x165.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oDqL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7927457-1e0e-478c-96de-ff7766a9e33d_526x165.png 424w, https://substackcdn.com/image/fetch/$s_!oDqL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7927457-1e0e-478c-96de-ff7766a9e33d_526x165.png 848w, https://substackcdn.com/image/fetch/$s_!oDqL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7927457-1e0e-478c-96de-ff7766a9e33d_526x165.png 1272w, https://substackcdn.com/image/fetch/$s_!oDqL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7927457-1e0e-478c-96de-ff7766a9e33d_526x165.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oDqL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7927457-1e0e-478c-96de-ff7766a9e33d_526x165.png" width="526" height="165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c7927457-1e0e-478c-96de-ff7766a9e33d_526x165.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:165,&quot;width&quot;:526,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;ZeroMQ &#8212; VMS Software, Inc.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="ZeroMQ &#8212; VMS Software, Inc." title="ZeroMQ &#8212; VMS Software, Inc." srcset="https://substackcdn.com/image/fetch/$s_!oDqL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7927457-1e0e-478c-96de-ff7766a9e33d_526x165.png 424w, https://substackcdn.com/image/fetch/$s_!oDqL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7927457-1e0e-478c-96de-ff7766a9e33d_526x165.png 848w, https://substackcdn.com/image/fetch/$s_!oDqL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7927457-1e0e-478c-96de-ff7766a9e33d_526x165.png 1272w, https://substackcdn.com/image/fetch/$s_!oDqL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7927457-1e0e-478c-96de-ff7766a9e33d_526x165.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h1><strong>Hands-on Time! &#128736;&#65039;</strong></h1><p>Enough talk, let's get our hands dirty. We're gonna run some demos using Go, Python, and Rust. And yep, you can try these at home!</p><p>First, clone the repo:</p><pre><code>git clone https://github.com/moabukar/zmq-demo.git
cd zmq-demo</code></pre><h3><strong>Go implementation: Publisher-Subscriber Pattern</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v3GX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ac7c426-fb67-47fc-9fad-c787c06a3590_1200x451.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v3GX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ac7c426-fb67-47fc-9fad-c787c06a3590_1200x451.png 424w, https://substackcdn.com/image/fetch/$s_!v3GX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ac7c426-fb67-47fc-9fad-c787c06a3590_1200x451.png 848w, https://substackcdn.com/image/fetch/$s_!v3GX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ac7c426-fb67-47fc-9fad-c787c06a3590_1200x451.png 1272w, https://substackcdn.com/image/fetch/$s_!v3GX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ac7c426-fb67-47fc-9fad-c787c06a3590_1200x451.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v3GX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ac7c426-fb67-47fc-9fad-c787c06a3590_1200x451.png" width="380" height="142.81666666666666" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ac7c426-fb67-47fc-9fad-c787c06a3590_1200x451.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:451,&quot;width&quot;:1200,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Go (programming language) - Wikipedia&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Go (programming language) - Wikipedia" title="Go (programming language) - Wikipedia" srcset="https://substackcdn.com/image/fetch/$s_!v3GX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ac7c426-fb67-47fc-9fad-c787c06a3590_1200x451.png 424w, https://substackcdn.com/image/fetch/$s_!v3GX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ac7c426-fb67-47fc-9fad-c787c06a3590_1200x451.png 848w, https://substackcdn.com/image/fetch/$s_!v3GX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ac7c426-fb67-47fc-9fad-c787c06a3590_1200x451.png 1272w, https://substackcdn.com/image/fetch/$s_!v3GX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ac7c426-fb67-47fc-9fad-c787c06a3590_1200x451.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ol><li><p>Navigate to the Go folder in your terminal:</p><pre><code>cd go/pubsub</code></pre></li><li><p>Run the publisher server</p><pre><code>go run pub.go</code></pre></li><li><p>Open another terminal, navigate to the same folder, and run the subscriber:</p><pre><code>go run sub.go</code></pre></li></ol><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AvqA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceec9832-cc05-4a39-95c4-553c5ef7c90f_1274x260.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AvqA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceec9832-cc05-4a39-95c4-553c5ef7c90f_1274x260.png 424w, https://substackcdn.com/image/fetch/$s_!AvqA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceec9832-cc05-4a39-95c4-553c5ef7c90f_1274x260.png 848w, https://substackcdn.com/image/fetch/$s_!AvqA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceec9832-cc05-4a39-95c4-553c5ef7c90f_1274x260.png 1272w, https://substackcdn.com/image/fetch/$s_!AvqA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceec9832-cc05-4a39-95c4-553c5ef7c90f_1274x260.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AvqA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceec9832-cc05-4a39-95c4-553c5ef7c90f_1274x260.png" width="1274" height="260" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ceec9832-cc05-4a39-95c4-553c5ef7c90f_1274x260.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:260,&quot;width&quot;:1274,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60465,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AvqA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceec9832-cc05-4a39-95c4-553c5ef7c90f_1274x260.png 424w, https://substackcdn.com/image/fetch/$s_!AvqA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceec9832-cc05-4a39-95c4-553c5ef7c90f_1274x260.png 848w, https://substackcdn.com/image/fetch/$s_!AvqA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceec9832-cc05-4a39-95c4-553c5ef7c90f_1274x260.png 1272w, https://substackcdn.com/image/fetch/$s_!AvqA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceec9832-cc05-4a39-95c4-553c5ef7c90f_1274x260.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!a_o1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8eca5e-481c-481f-8503-cec4830bf38e_1510x464.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a_o1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8eca5e-481c-481f-8503-cec4830bf38e_1510x464.png 424w, https://substackcdn.com/image/fetch/$s_!a_o1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8eca5e-481c-481f-8503-cec4830bf38e_1510x464.png 848w, https://substackcdn.com/image/fetch/$s_!a_o1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8eca5e-481c-481f-8503-cec4830bf38e_1510x464.png 1272w, https://substackcdn.com/image/fetch/$s_!a_o1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8eca5e-481c-481f-8503-cec4830bf38e_1510x464.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a_o1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8eca5e-481c-481f-8503-cec4830bf38e_1510x464.png" width="1456" height="447" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a8eca5e-481c-481f-8503-cec4830bf38e_1510x464.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:447,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98163,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!a_o1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8eca5e-481c-481f-8503-cec4830bf38e_1510x464.png 424w, https://substackcdn.com/image/fetch/$s_!a_o1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8eca5e-481c-481f-8503-cec4830bf38e_1510x464.png 848w, https://substackcdn.com/image/fetch/$s_!a_o1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8eca5e-481c-481f-8503-cec4830bf38e_1510x464.png 1272w, https://substackcdn.com/image/fetch/$s_!a_o1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a8eca5e-481c-481f-8503-cec4830bf38e_1510x464.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As you can see above, the publisher will send messages to any number of subscribers. The subscriber is subscribed to the publisher and is reading messages to the console.  This is useful for broadcasting messages.</p><p></p><h3><strong>Python implementation: Request-Reply Pattern</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oI2F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89cb8deb-5119-4df9-853a-350b8cded6cd_214x235.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oI2F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89cb8deb-5119-4df9-853a-350b8cded6cd_214x235.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oI2F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89cb8deb-5119-4df9-853a-350b8cded6cd_214x235.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oI2F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89cb8deb-5119-4df9-853a-350b8cded6cd_214x235.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oI2F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89cb8deb-5119-4df9-853a-350b8cded6cd_214x235.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oI2F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89cb8deb-5119-4df9-853a-350b8cded6cd_214x235.jpeg" width="214" height="235" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89cb8deb-5119-4df9-853a-350b8cded6cd_214x235.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:235,&quot;width&quot;:214,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Python (programming language) - Wikipedia&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Python (programming language) - Wikipedia" title="Python (programming language) - Wikipedia" srcset="https://substackcdn.com/image/fetch/$s_!oI2F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89cb8deb-5119-4df9-853a-350b8cded6cd_214x235.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oI2F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89cb8deb-5119-4df9-853a-350b8cded6cd_214x235.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oI2F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89cb8deb-5119-4df9-853a-350b8cded6cd_214x235.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oI2F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89cb8deb-5119-4df9-853a-350b8cded6cd_214x235.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ol><li><p>Navigate to the Python folder:</p></li></ol><pre><code>cd py/reqreply</code></pre><ol start="2"><li><p>Run the server:</p></li></ol><pre><code>python3 server.py</code></pre><ol start="3"><li><p>Open another terminal, navigate to the same folder, and run the client:</p></li></ol><pre><code>python3 client.py</code></pre><p>This pattern is useful for a basic query-response interaction between a client and a server.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A14X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9adc28-2f07-4c4f-b874-9fc75dec51b7_1112x208.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A14X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9adc28-2f07-4c4f-b874-9fc75dec51b7_1112x208.png 424w, https://substackcdn.com/image/fetch/$s_!A14X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9adc28-2f07-4c4f-b874-9fc75dec51b7_1112x208.png 848w, https://substackcdn.com/image/fetch/$s_!A14X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9adc28-2f07-4c4f-b874-9fc75dec51b7_1112x208.png 1272w, https://substackcdn.com/image/fetch/$s_!A14X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9adc28-2f07-4c4f-b874-9fc75dec51b7_1112x208.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A14X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9adc28-2f07-4c4f-b874-9fc75dec51b7_1112x208.png" width="1112" height="208" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a9adc28-2f07-4c4f-b874-9fc75dec51b7_1112x208.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:208,&quot;width&quot;:1112,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:37542,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!A14X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9adc28-2f07-4c4f-b874-9fc75dec51b7_1112x208.png 424w, https://substackcdn.com/image/fetch/$s_!A14X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9adc28-2f07-4c4f-b874-9fc75dec51b7_1112x208.png 848w, https://substackcdn.com/image/fetch/$s_!A14X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9adc28-2f07-4c4f-b874-9fc75dec51b7_1112x208.png 1272w, https://substackcdn.com/image/fetch/$s_!A14X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a9adc28-2f07-4c4f-b874-9fc75dec51b7_1112x208.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>As you can see the server receives messages being posted by the client.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c-4l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b3ba0-1cf5-4286-8cc2-351605efc902_1004x142.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c-4l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b3ba0-1cf5-4286-8cc2-351605efc902_1004x142.png 424w, https://substackcdn.com/image/fetch/$s_!c-4l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b3ba0-1cf5-4286-8cc2-351605efc902_1004x142.png 848w, https://substackcdn.com/image/fetch/$s_!c-4l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b3ba0-1cf5-4286-8cc2-351605efc902_1004x142.png 1272w, https://substackcdn.com/image/fetch/$s_!c-4l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b3ba0-1cf5-4286-8cc2-351605efc902_1004x142.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c-4l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b3ba0-1cf5-4286-8cc2-351605efc902_1004x142.png" width="1004" height="142" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/885b3ba0-1cf5-4286-8cc2-351605efc902_1004x142.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:142,&quot;width&quot;:1004,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31860,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!c-4l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b3ba0-1cf5-4286-8cc2-351605efc902_1004x142.png 424w, https://substackcdn.com/image/fetch/$s_!c-4l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b3ba0-1cf5-4286-8cc2-351605efc902_1004x142.png 848w, https://substackcdn.com/image/fetch/$s_!c-4l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b3ba0-1cf5-4286-8cc2-351605efc902_1004x142.png 1272w, https://substackcdn.com/image/fetch/$s_!c-4l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b3ba0-1cf5-4286-8cc2-351605efc902_1004x142.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><h3><strong>Rust: Publisher-Subscriber Pattern</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XfCc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F437b32ed-2a5a-433c-8655-e0fdac4f2b9c_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XfCc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F437b32ed-2a5a-433c-8655-e0fdac4f2b9c_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!XfCc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F437b32ed-2a5a-433c-8655-e0fdac4f2b9c_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!XfCc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F437b32ed-2a5a-433c-8655-e0fdac4f2b9c_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!XfCc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F437b32ed-2a5a-433c-8655-e0fdac4f2b9c_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XfCc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F437b32ed-2a5a-433c-8655-e0fdac4f2b9c_512x512.png" width="242" height="242" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/437b32ed-2a5a-433c-8655-e0fdac4f2b9c_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:242,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Why Rust? - Wiresmith Technology&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Why Rust? - Wiresmith Technology" title="Why Rust? - Wiresmith Technology" srcset="https://substackcdn.com/image/fetch/$s_!XfCc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F437b32ed-2a5a-433c-8655-e0fdac4f2b9c_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!XfCc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F437b32ed-2a5a-433c-8655-e0fdac4f2b9c_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!XfCc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F437b32ed-2a5a-433c-8655-e0fdac4f2b9c_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!XfCc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F437b32ed-2a5a-433c-8655-e0fdac4f2b9c_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p>Navigate to the Rust folder:</p></li></ol><pre><code>cd rust/pubsub</code></pre><ol start="2"><li><p>Run the publisher:</p></li></ol><pre><code>cargo run --bin pub</code></pre><ol start="3"><li><p>Open another terminal, navigate to the same folder, and run the subscriber:</p></li></ol><pre><code>cargo run --bin sub</code></pre><p>In this Rust example, we're implementing the publisher-subscriber pattern. Similar to the Go example, this allows a publisher to broadcast messages to one or more subscribers.</p><p>There are more examples that are well-documented in the repository with the likes of JS and more examples of the messaging patterns in each language. </p><p></p><h1><strong>Exploring ZeroMQ Messaging Patterns</strong></h1><p>ZeroMQ provides various messaging patterns to handle different types of communication scenarios. Understanding these patterns will help you select the best approach for your specific needs. Below is a full list of the various types of patterns that ZeroMQ has:</p><p></p><h3><strong>Request-Reply (REQ-REP)</strong></h3><p>In this pattern, a client sends a request, and the server replies to it. It's a basic one-to-one communication model and is great for query-response interactions.</p><h3><strong>Publisher-Subscriber (PUB-SUB)</strong></h3><p>The Publisher-Subscriber model allows a single publisher to broadcast messages to multiple subscribers. Subscribers can also choose to filter messages based on topics. This is useful for broadcasting updates or notifications.</p><h3><strong>Push-Pull (Pipeline)</strong></h3><p>In the Push-Pull model, one end pushes messages into a queue, and the other end pulls messages from the queue for processing. It's great for distributing workload among multiple workers.</p><h3><strong>Pair</strong></h3><p>The Pair pattern is the simplest one. It allows for one-to-one, bidirectional communication between two endpoints. Each end can both send and receive messages.</p><h3><strong>Dealer-Router (DEALER-ROUTER)</strong></h3><p>In this pattern, you can build a more complex workflow involving multiple clients and servers. It provides asynchronous request-reply communication.</p><h3><strong>Exclusive Pair (XPAIR)</strong></h3><p>The Exclusive Pair pattern allows for more complex one-to-one bidirectional communication than the simple Pair pattern, including the ability to shuttle messages between multiple threads or devices.</p><h3><strong>Stream</strong></h3><p>This pattern is for connecting a client and a server, similar to TCP. It allows for direct manipulation of the underlying socket, so it's more low-level.</p><p></p><h1><strong>Common Pitfalls and How to Avoid Them</strong></h1><p></p><h3><strong>Connection Issues</strong></h3><p><strong>Problem</strong>: ZeroMQ won't connect or messages are getting lost.<br><strong>Solution</strong>: Check the transport protocols and IP addresses. Also, ensure that you've set up your firewall to allow the necessary ports.</p><h3><strong>Memory Usage</strong></h3><p><strong>Problem</strong>: Your system is running out of memory.<br><strong>Solution</strong>: ZeroMQ is usually pretty efficient, but if you're pushing it too hard, consider implementing rate limiting or back-pressure mechanisms.</p><h3><strong>Message Order</strong></h3><p><strong>Problem</strong>: Messages aren't received in the order they're sent.<br><strong>Solution</strong>: While ZeroMQ generally maintains order within individual streams, if that's critical for you, consider adding sequence numbers to your messages.</p><p></p><h1><strong>ZeroMQ in DevOps: Why It Matters</strong></h1><p></p><h3><strong>Configuration Management</strong></h3><p>ZeroMQ can be used to sync configurations across multiple servers and services. It's fast, lightweight, and doesn't require a dedicated message broker, making it easy to integrate into existing setups.</p><h3><strong>Monitoring and Logging</strong></h3><p>ZeroMQ's PUB-SUB pattern is perfect for broadcasting logs or monitoring data from multiple services to a centralized logging service.</p><h3><strong>Load Balancing</strong></h3><p>Using the PUSH-PULL or DEALER-ROUTER patterns, you can easily implement custom load balancers that distribute tasks to workers based on your specific requirements.</p><h3><strong>Service Discovery</strong></h3><p>ZeroMQ's peer-to-peer nature allows for easy service discovery setups. You can set services to broadcast their presence and capabilities to a SUB socket that listens for such announcements.</p><p></p><h1><strong>Use Cases</strong></h1><p></p><h3><strong>IoT Devices</strong></h3><p>ZeroMQ can handle connections from multiple IoT devices efficiently, allowing for real-time updates and status monitoring.</p><h3><strong>Real-Time Analytics</strong></h3><p>For applications that require real-time analytics and data streaming, ZeroMQ offers low latency and high throughput.</p><h3><strong>Backend Microservices</strong></h3><p>ZeroMQ's scalability makes it a good choice for microservices architectures where services need to communicate frequently.</p><p></p><h1><strong>Community and Support</strong></h1><p></p><p>ZeroMQ has an active community that contributes to its open-source codebase. You can find more information and get community support from:</p><ul><li><p><a href="https://github.com/zeromq/libzmq">ZeroMQ GitHub Repository</a></p></li><li><p><a href="https://lists.zeromq.org/mailman/listinfo/zeromq-dev">ZeroMQ Mailing List</a></p></li><li><p><a href="https://stackoverflow.com/questions/tagged/zeromq">Stack Overflow</a></p></li></ul><p></p><h1><strong>Conclusion &amp; Next steps</strong></h1><p></p><p>ZeroMQ provides a powerful yet simple way to implement messaging queues in various languages. Whether you are working on a small project or scaling up, ZeroMQ offers the reliability, scalability, and efficiency you need.</p><p>By now, you should have a solid understanding of ZeroMQ's capabilities and how to implement them in different programming languages. If you're looking to take your skills to the next level, consider exploring more advanced features like secure messaging and custom transport protocols.</p><p></p><h2><strong>References &amp; further reading</strong></h2><ul><li><p><a href="https://github.com/moabukar/zmq-demo">ZMQ demo repo - used in this article</a></p></li><li><p><a href="http://zeromq.org/intro:read-the-manual">ZeroMQ Official Documentation</a></p></li><li><p><a href="https://www.amazon.com/ZeroMQ-Messaging-Many-Applications-ebook/dp/B007NX9Y4M">ZeroMQ: Messaging for Many Applications (O'Reilly Book)</a></p></li><li><p><a href="https://github.com/zeromq/libzmq">ZeroMQ GitHub Repository</a></p></li><li><p><a href="https://github.com/zeromq/libzmq">ZeroMQ core engine written in C++</a></p></li><li><p><a href="https://github.com/zeromq/zmq.rs">Rust client for ZMQ</a></p></li><li><p><a href="https://github.com/zeromq/gomq">Go client for ZMQ</a></p></li><li><p><a href="https://github.com/zeromq/pyzmq">Python client for ZMQ</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[How to securely pass secret values in Terraform to CICD pipelines (GitHub Actions)]]></title><description><![CDATA[I recently faced issues trying to pass secrets securely using CICD with Terraform. Here is a simple solution that works.]]></description><link>https://blog.coderco.io/p/how-to-securely-pass-secret-values</link><guid isPermaLink="false">https://blog.coderco.io/p/how-to-securely-pass-secret-values</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Wed, 25 Oct 2023 14:55:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8gBZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8gBZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8gBZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8gBZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8gBZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8gBZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8gBZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg" width="1400" height="735" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:735,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Infra CI/CD Using Terraform and GitHub Actions | by Sahdev Garg | Better  Programming&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Infra CI/CD Using Terraform and GitHub Actions | by Sahdev Garg | Better  Programming" title="Infra CI/CD Using Terraform and GitHub Actions | by Sahdev Garg | Better  Programming" srcset="https://substackcdn.com/image/fetch/$s_!8gBZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8gBZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8gBZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8gBZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafa56aed-2697-4fdc-b30e-8a68a2268521_1400x735.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">CICD using Terraform &amp; GitHub Actions</figcaption></figure></div><p><br>In the realm of cloud infrastructure management and automation, there often arises a need to configure secret values for various resources. For instance, you might have to integrate an API key into a deployed application or connect to a MongoDB Server using traditional username and password authentication. In this article, we will delve into a secure approach for passing these secret values to an Infrastructure as Code (IaC) pipeline using GitHub Actions and Terraform.</p><p>Securing Secrets in Terraform: When dealing with secret values in Terraform, the first step is to declare them as variables and ensure they remain hidden in logs and console outputs. The typical approach of declaring variables exposes their values, which is a major security concern. To prevent this, you can define variables with the "sensitive" attribute set to true, like so:</p><pre><code>variable "mongodbatlas_public_key" {
  type        = string
  description = "MongoDB Atlas public API key used to authenticate with MongoDB provider"
  sensitive = true
}

variable "mongodbatlas_private_key" {
  type        = string
  description = "MongoDB Atlas private API key used to authenticate with MongoDB provider"
  sensitive = true
}</code></pre><p>This "sensitive = true" declaration instructs Terraform to treat the variable as a secret, ensuring its value remains concealed in logs and outputs. You can then use this variable to create resources that require these secrets, such as setting up a MongoDB cluster:</p><pre><code>module "mongodb_atlas_cluster" {
  source = "../../terraform/modules/mongodb2.0"

  atlas_org_id               = var.org_id
  cloud_provider             = "AWS"
  mongodb_version            = "6.0"

  <strong>mongodbatlas_public_key  = var.mongodbatlas_public_key
  mongodbatlas_private_key = var.mongodbatlas_private_key</strong>

  ip_address = var.ip_address</code></pre><h3><strong>Inputting Secret Values into Terraform</strong></h3><p>Now that Terraform understands the sensitive nature of the variable, the challenge is to input the secret value securely. The common approach of using a .tfvars file is not suitable because it exposes secrets in a file managed by Git. Another option is to have a .tfvars file in .gitignore, but this makes it challenging to use in a pipeline as it must be stored securely and authenticated to access.</p><p>An effective solution is to leverage environment variables to provide secret values. These environment variables must adhere to the syntax <code>TF_VAR_{var-name}</code>, where var-name matches the variable name in the Terraform files. For example, for the "mssql_login_pwd" variable, you'd set an environment variable named <code>TF_VAR_mongodbatlas_private_key</code>. Terraform will then use this value to populate the variable.</p><p>To implement this solution, we need to inform the pipeline runner about its environment variables.</p><h3><br><strong>Setting Up in a GitHub Actions Workflow</strong></h3><p>GitHub Actions should always have a way to securely store and pass secret values to runners. In GitHub, you can establish environments in your repository, ideally creating separate environments for production and development, each linked to specific branches (e.g., master and develop). This setup allows you to test deployments in a development environment before promoting changes to production.</p><p>Once environments are set up, you can add secret values to them. GitHub Actions workflows can automatically access the appropriate secrets based on the environment. For instance, you can add the public and private keys for connecting to a mongoDB cluster as secrets within the GitHub UI portal.<br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mKcp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd147861-348d-4773-b216-065e8166255e_756x444.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mKcp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd147861-348d-4773-b216-065e8166255e_756x444.png 424w, https://substackcdn.com/image/fetch/$s_!mKcp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd147861-348d-4773-b216-065e8166255e_756x444.png 848w, https://substackcdn.com/image/fetch/$s_!mKcp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd147861-348d-4773-b216-065e8166255e_756x444.png 1272w, https://substackcdn.com/image/fetch/$s_!mKcp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd147861-348d-4773-b216-065e8166255e_756x444.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mKcp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd147861-348d-4773-b216-065e8166255e_756x444.png" width="756" height="444" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd147861-348d-4773-b216-065e8166255e_756x444.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:444,&quot;width&quot;:756,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28149,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mKcp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd147861-348d-4773-b216-065e8166255e_756x444.png 424w, https://substackcdn.com/image/fetch/$s_!mKcp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd147861-348d-4773-b216-065e8166255e_756x444.png 848w, https://substackcdn.com/image/fetch/$s_!mKcp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd147861-348d-4773-b216-065e8166255e_756x444.png 1272w, https://substackcdn.com/image/fetch/$s_!mKcp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd147861-348d-4773-b216-065e8166255e_756x444.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Adding secret values in GitHub repo</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Djfb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8453a8-fa40-495b-b6f3-ddad2227e54d_868x690.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Djfb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8453a8-fa40-495b-b6f3-ddad2227e54d_868x690.png 424w, https://substackcdn.com/image/fetch/$s_!Djfb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8453a8-fa40-495b-b6f3-ddad2227e54d_868x690.png 848w, https://substackcdn.com/image/fetch/$s_!Djfb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8453a8-fa40-495b-b6f3-ddad2227e54d_868x690.png 1272w, https://substackcdn.com/image/fetch/$s_!Djfb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8453a8-fa40-495b-b6f3-ddad2227e54d_868x690.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Djfb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8453a8-fa40-495b-b6f3-ddad2227e54d_868x690.png" width="868" height="690" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d8453a8-fa40-495b-b6f3-ddad2227e54d_868x690.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:690,&quot;width&quot;:868,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:106390,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Djfb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8453a8-fa40-495b-b6f3-ddad2227e54d_868x690.png 424w, https://substackcdn.com/image/fetch/$s_!Djfb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8453a8-fa40-495b-b6f3-ddad2227e54d_868x690.png 848w, https://substackcdn.com/image/fetch/$s_!Djfb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8453a8-fa40-495b-b6f3-ddad2227e54d_868x690.png 1272w, https://substackcdn.com/image/fetch/$s_!Djfb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8453a8-fa40-495b-b6f3-ddad2227e54d_868x690.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br>With secrets securely stored in GitHub environments, you can reference them in your workflows like this:</p><pre><code>jobs: 
  tf_deploy:
    name: TF deploy
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      TF_ACTION_WORKING_DIR: './examples/basic-2'
      AWS_ACCESS_KEY_ID:  ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY:  ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      <strong>TF_VAR_mongodbatlas_public_key: ${{ secrets.MONGODBATLAS_PUBLIC_KEY }}</strong>
      <strong>TF_VAR_mongodbatlas_private_key: ${{ secrets.MONGODBATLAS_PRIVATE_KEY }}</strong>
      <strong>TF_VAR_ip_address: ${{ secrets.IP_ADDRESS }}</strong>
</code></pre><p>Now, the Ubuntu runner will have these environment variables populated directly from GitHub secrets. When Terraform executes on this runner, it will use these values to fill the "<code>mongodbatlas_public_key</code>" and "<code>mongodbatlas_private_key</code>" variables.</p><h3><br>Conclusion</h3><p>By following this method, you can establish a robust and secure way to transmit static secrets to GitHub Actions workflows responsible for deploying your infrastructure. These values remain secret both in GitHub and Terraform. Furthermore, since pipeline runners are ephemeral, the secrets exist in environment variables only for the duration of the job, enhancing overall security.</p><h3>Future</h3><p>Look for other ways to make this smoother and even more secure. </p>]]></content:encoded></item><item><title><![CDATA[Terraform Best Practices Series - Lessons from the Battlefield: Part 2]]></title><description><![CDATA[Strategic Insights from the Terraform Trenches: Part 2]]></description><link>https://blog.coderco.io/p/terraform-best-practices-series-lessons-0cd</link><guid isPermaLink="false">https://blog.coderco.io/p/terraform-best-practices-series-lessons-0cd</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Tue, 12 Sep 2023 11:30:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!W9-Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This article is a continuation of Part 1 of the Terraform Best Practices Series. <br><br>Throughout my journey of DevOps/Infrastructure spanning nearly five years, I've been deep in the trenches of Terraform, crafting cloud infrastructure from startups to sprawling enterprises alike. From rookie missteps to triumphant victories, I've had a front-row seat to the power of Terraform's best practices.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W9-Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W9-Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png 424w, https://substackcdn.com/image/fetch/$s_!W9-Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png 848w, https://substackcdn.com/image/fetch/$s_!W9-Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!W9-Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W9-Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png" width="1456" height="1058" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1058,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:156846,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W9-Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png 424w, https://substackcdn.com/image/fetch/$s_!W9-Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png 848w, https://substackcdn.com/image/fetch/$s_!W9-Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!W9-Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e485bae-b4cd-4ad8-8546-f56f678b173c_1772x1288.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>In the early days, I learned the hard way that hasty changes can lead to production hiccups. But these experiences, though challenging, became invaluable lessons. They drove home the importance of meticulous planning and the significance of thorough testing before hitting that apply button. Here is my list of top Terraform best practices I have learned through experience and from others.</p><div><hr></div><h2>Table of Contents</h2><ol start="6"><li><p><strong>Terraform modules practices</strong></p><ol><li><p>Configuring providers/backends in modules</p></li><li><p>Exposing labels as vars</p></li><li><p>Exposing outputs for resources</p></li><li><p>Inline submodules</p></li><li><p>Resources in root modules</p></li><li><p>Importing infrastructure</p></li><li><p>Dynamic blocks</p></li><li><p>Variables/naming validations</p></li><li><p>Variable separations</p></li><li><p>Using locals</p></li><li><p>Flexible modules</p></li><li><p>Git hooks</p></li><li><p>Using examples in folder</p></li><li><p>Module referencing</p></li></ol></li><li><p><strong>Testing &amp; Governance</strong></p><ol><li><p>Starting small: static testing</p></li><li><p>Testing with Terratest</p></li><li><p>Policy as Code: OPA</p></li></ol></li><li><p><strong>Additional practices</strong></p><ol><li><p>Baking VMs</p></li><li><p>Leveraging open-source tools</p></li><li><p>Terraform code structures</p></li></ol></li></ol><p></p><h2>6. Terraform modules practices</h2><h4><strong>6.1 - Don't Configure Providers or Backend in Modules</strong> </h4><p>Avoid configuring providers or backends within modules, as it restricts flexibility for users who consume the module. These configurations are best managed at the root level to provide flexibility for users who consume the module.</p><h4><strong>6.2 - Expose Labels as a Variable</strong></h4><p>When using labels to tag resources, expose labels as variables to allow customization and consistency across your infrastructure.</p><pre><code><code>variable "instance_tags" {
  type    = map(string)
  default = {
    Environment = "Production"
    Application = "Web"
  }
}

resource "aws_instance" "example_instance" {
  # ...
  tags = var.instance_tags
}</code></code></pre><h4>6.3 - Expose Outputs for All Resources </h4><p>Provide outputs for all significant resources in your modules to allow downstream consumers to access important information.</p><pre><code><code>output "distribution_domain_name" {
  value       = module.cloudfront-distribution.domain_name
  description = "Domain Name of the CloudFront Distribution"
}

output "distribution_arn" {
  value       = module.cloudfront-distribution.arn
  description = "ARN of the CloudFront Distribution"
}

output "instance_id" {
  description = "ID of the instance"
  value       = aws_instance.example_instance.id
}</code></code></pre><h4><strong>6.4 - Use Inline Submodules for Complex Logic</strong></h4><p>For complex logic within your Terraform modules, consider using inline submodules to maintain code readability and organization.</p><pre><code><code>module "complex_logic" {
  source = "./submodules/complex_logic"
  
  input_variable = var.some_value
}</code></code></pre><h4><strong>6.5 - Minimize the Number of Resources in Each Root Module</strong></h4><p>Keep root modules focused and concise by minimizing the number of resources they manage. This promotes modularity and simplifies updates.</p><pre><code><code># s3-module/main.tf
resource "aws_s3_bucket" "my_bucket" {
  bucket = "my-unique-bucket"
  # ...
}

# ec2-module/main.tf
resource "aws_instance" "my_instance" {
  ami           = "ami-12345678"
  instance_type = "t2.micro"
  # ...
}

--- Separated modules below

# main.tf
module "s3" {
  source = "./s3-module"
}

module "ec2" {
  source = "./ec2-module"
}

## By organising your infrastructure this way, each module has a clear purpose, making it easier to understand, update, and manage. This approach fosters collaboration and allows teams to focus on specific areas without risking unintended changes to unrelated resources.</code></code></pre><h4><strong>6.6 - Import existing infrastructure</strong></h4><p>When you're migrating to Terraform or managing existing resources, you might need to import those resources into your Terraform state. This can help you manage them using Terraform going forward.</p><pre><code><code>resource "aws_elastic_beanstalk_environment" "existing_env" {
  name = "my-existing-environment"
}

# Import the existing environment
terraform import aws_elastic_beanstalk_environment.existing_env my-existing-environment</code></code></pre><h4><strong>6.7 - Utilise dynamic blocks</strong></h4><p>Dynamic Blocks in Terraform allow you to create multiple instances of a nested block within a resource or module, based on dynamic input data. This provides flexibility and reduces code duplication. </p><p>Let's explore how to use dynamic blocks with an AWS example:</p><p>Suppose you want to create multiple AWS security group rules for different ports. Instead of repeating the <code>ingress</code> block, you can use a dynamic block to achieve this more efficiently.</p><pre><code><code># main.tf

provider "aws" {
  region = "us-west-2"
}

resource "aws_security_group" "example_sg" {
  name_prefix = "example-sg-"
  description = "Example Security Group"
}

variable "ingress_rules" {
  type = list(object({
    from_port   = number
    to_port     = number
    protocol    = string
    cidr_blocks = list(string)
  }))
}

dynamic "ingress" {
  for_each = var.ingress_rules
  content {
    from_port   = ingress.value.from_port
    to_port     = ingress.value.to_port
    protocol    = ingress.value.protocol
    cidr_blocks = ingress.value.cidr_blocks
  }
}
</code></code></pre><p>And provide the rules in your <code>.tfvars</code> file:</p><pre><code><code># terraform.tfvars

ingress_rules = [
  {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  },
  {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
]</code></code></pre><h4><strong>6.8 - Utilise variable &amp; naming validations</strong></h4><p>Variable validations in Terraform allow you to enforce constraints on input variables to ensure that they meet specific criteria. This helps prevent incorrect configurations and enhances the reliability of your infrastructure code. </p><p>Let's see how you can use variable validations with an AWS example:</p><p>Suppose you want to ensure that a variable representing the instance type is chosen from a specific list of allowed values.</p><pre><code><code># main.tf

provider "aws" {
  region = "us-west-2"
}

locals {
  allowed_instance_types = ["t2.micro", "m5.large"]
}

variable "instance_type" {
  description = "Type of EC2 instance"
  type        = string

  validation {
    condition = var.instance_type in local.allowed_instance_types
    error_message = "Invalid instance type. Choose either t2.micro or m5.large."
  }
}

resource "aws_instance" "example_instance" {
  ami           = "ami-0123456789abcdef0"
  instance_type = var.instance_type
  tags = {
    Name = "ExampleInstance"
  }
}
</code></code></pre><p>Now, when someone tries to use an invalid instance type, Terraform will provide a clear error message indicating the allowed options.</p><pre><code><code>Error: Invalid instance type. Choose either t2.micro or m5.large.
</code></code></pre><p><em>An example which uses regex validation:</em></p><pre><code><code># modules/s3_bucket/variables.tf

variable "bucket_name" {
  description = "Name of the S3 bucket"
  type        = string
  validation {
    condition     = can(regex("^my-bucket-", var.bucket_name))
    error_message = "Bucket name must start with 'my-bucket-'"
  }
}

----

# modules/s3_bucket/main.tf

resource "aws_s3_bucket" "my_bucket" {
  bucket = var.bucket_name
  # Other bucket configuration...
}
</code></code></pre><h4><strong>6.9 - Keeping variables separated</strong></h4><p>Following on from the above and for better readability, separate optional and required variables in your code with a comment in your <code>variables.tf</code></p><pre><code><code>#### Required Variables ####
variable "region" {
  description = "The AWS region where resources will be created."
}

variable "vpc_cidr_block" {
  description = "The CIDR block for the VPC."
}

#### Optional Variables ####
variable "instance_type" {
  description = "The EC2 instance type. Defaults to t2.micro."
  default     = "t2.micro"
}

variable "subnet_count" {
  description = "The number of subnets to create. Defaults to 3."
  default     = 3
}
</code></code></pre><p>In this example, <code>instance_type</code> and <code>subnet_count</code> are optional variables. The <code>description</code> field provides a brief explanation of what each variable represents. The <code>default</code> field specifies the default value that will be used if the variable is not explicitly defined when running Terraform. This separation of optional variables from required ones enhances the readability and maintainability of your Terraform configuration.</p><h4><strong>6.10 - Using Locals appropriately</strong></h4><p>Locals are a way to assign intermediate values or complex expressions to a named variable. This can help improve the readability of your code, avoid duplication, and simplify complex configurations</p><p>There are times when locals are used in the wrong places. You can keep locals in their own file but I prefer to keep them close to the infrastructure code they are used for. Locals are useful in instances like:</p><ul><li><p><em>When concatenating variables for names</em></p></li></ul><pre><code><code>locals {
  sg_name = "sg-${var.environment}-${var.app_name}"
}

resource "aws_security_group" "example_sg" {
  name        = local.sg_name
  description = "Security group for ${var.app_name}"
  vpc_id      = aws_vpc.example_vpc.id
}
</code></code></pre><ul><li><p><em>Using local functions</em></p></li></ul><pre><code><code>locals {
  transform_name = upper("my-resource-name")
}

resource "aws_s3_bucket" "example_bucket" {
  bucket = local.transform_name
  # other configurations...
}
</code></code></pre><ul><li><p><em>When using conditionals</em></p></li></ul><pre><code><code>locals {
  create_bucket = true
}

resource "aws_s3_bucket" "example_bucket" {
  count         = local.create_bucket ? 1 : 0
  bucket        = "my-example-bucket"
  force_destroy = true
}
</code></code></pre><ul><li><p><em>Using functions</em></p></li></ul><pre><code><code>locals {
  instance_suffixes = [
    for i in range(3) : random_string.example_suffix[i].result
  ]
}

resource "aws_instance" "example_instance" {
  count = 3
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  tags = {
    Name = "instance-${count.index + 1}-${local.instance_suffixes[count.index]}"
  }
}

resource "random_string" "example_suffix" {
  count     = 3
  length    = 4
  upper     = false
  special   = false
  number    = true
}
</code></code></pre><h4><strong>6.11 - Use flexible modules with multiple optional inputs</strong>: </h4><p>Creating flexible and reusable modules in Terraform involves designing them with multiple optional inputs. This allows users to customize the module's behaviour while maintaining a clear and consistent interface. </p><p>Here's how you can achieve this using this example:</p><p>Suppose you're creating a module to provision an AWS S3 bucket, and you want to provide users with the flexibility to customize various aspects of the bucket, such as its name, access control, and versioning</p><pre><code><code># s3_bucket.tf

variable "bucket_name" {
  description = "Name of the S3 bucket"
  type        = string
  default     = "my-s3-bucket"
}

variable "acl" {
  description = "Access control list for the bucket"
  type        = string
  default     = "private"
}

variable "versioning_enabled" {
  description = "Enable versioning for the bucket"
  type        = bool
  default     = false
}

resource "aws_s3_bucket" "example_bucket" {
  bucket = var.bucket_name
  acl    = var.acl

  versioning {
    enabled = var.versioning_enabled
  }
}
</code></code></pre><pre><code><code># main.tf

module "custom_s3_bucket" {
  source            = "./modules/s3_bucket"
  bucket_name       = "my-custom-bucket"
  acl               = "public-read"
  versioning_enabled = true
}
</code></code></pre><h4><strong>6.12 - Use Git hooks</strong>: </h4><p>Use pre-commit hooks so you don&#8217;t forget to add documentation or formatting code. Some good examples are:</p><ul><li><p>Pre-commit hooks by Anton Babenko which includes Terraform fmt, checkov, linting, docs and more!</p></li><li><p>Or you can make your own one:</p></li></ul><pre><code><code>Create a file named .git/hooks/pre-commit

#!/bin/sh

# Run Terraform fmt on all Terraform files
terraform_fmt_files=$(git diff --cached --name-only --diff-filter=ACM | grep '\.tf$')
if [ -n "$terraform_fmt_files" ]; then
    echo "Running 'terraform fmt' on the following files:"
    echo "$terraform_fmt_files"
    terraform fmt -check=true $terraform_fmt_files
fi

---
## Now, when you try to commit changes, the pre-commit hook will automatically run terraform fmt on your Terraform files and check if they are properly formatted. If any files are not properly formatted, the commit will be rejected, and you'll need to fix the formatting before committing.</code></code></pre><h4><strong>6.13 - Use the examples folder in your modules</strong></h4><p><strong>Always have an examples folder inside your modules repository</strong>. Some of the benefits of having an examples directory:</p><ul><li><p><strong>Clear Usage Demonstrations:</strong> Users of your module may not be familiar with its capabilities. By providing concrete usage examples, you make it easier for them to understand how to configure and use your module effectively.</p></li><li><p><strong>Testing and Validation:</strong> You can use the examples as part of your testing process. Ensuring that your module works with the provided examples helps maintain module quality and reliability.</p></li><li><p><strong>Reference for Variations:</strong> Examples can show variations of usage, such as different parameter configurations. This provides users with a starting point to customize configurations based on their specific requirements.</p></li><li><p><strong>Real-World Context:</strong> Examples showcase how your module can be used in real-world scenarios. This helps users see how your module fits into their own use cases, making it more relevant and applicable.</p></li></ul><p>Example of using the &#8220;examples&#8221; directory in your repo:</p><pre><code><code>my-module/
&#9500;&#9472;&#9472; main.tf
&#9500;&#9472;&#9472; variables.tf
&#9500;&#9472;&#9472; outputs.tf
&#9500;&#9472;&#9472; README.md
&#9500;&#9472;&#9472; examples/
&#9474;   &#9500;&#9472;&#9472; basic-usage/
&#9474;   &#9474;   &#9500;&#9472;&#9472; main.tf
&#9474;   &#9474;   &#9500;&#9472;&#9472; variables.tf
&#9474;   &#9474;   &#9500;&#9472;&#9472; terraform.tfvars
&#9474;   &#9500;&#9472;&#9472; complete/
&#9474;   &#9474;   &#9500;&#9472;&#9472; main.tf
&#9474;   &#9474;   &#9500;&#9472;&#9472; variables.tf
&#9474;   &#9474;   &#9500;&#9472;&#9472; terraform.tfvars
&#9474;   &#9500;&#9472;&#9472; ...
</code></code></pre><h4><strong>6.14 - Reference modules via a versioning mechanism</strong> </h4><p>When working with modules in Terraform, it's important to establish a versioning mechanism that ensures consistency and predictability in your infrastructure deployments. This practice involves referencing modules using specific versions to avoid unexpected changes and maintain control over updates. </p><pre><code><code>module "my_vpc" {
  source = "./modules/vpc"
  version = "1.2.0"  # Specify the desired version
  # Other module inputs...
}</code></code></pre><div><hr></div><div><hr></div><h2><strong>7. Testing and Governance</strong></h2><p>Testing Terraform configurations is crucial for reliable infrastructure:</p><h4><strong>7.1 - Start Small</strong></h4><p>Begin with less expensive testing methods like static analysis and module integration tests before full end-to-end testing. &#129514;</p><pre><code><code># Format and validate Terraform code
terraform fmt
terraform validate</code></code></pre><h4><strong>7.2 - Using Terratest</strong></h4><p>Terratest is a Golang library that providers patterns and helper functions for testing your infrastructure from Terraform, Packer, Docker, K8s, AWS, GCP and more!<br><br>Here's a simple example of using Terratest to test an AWS EC2 instance creation:</p><pre><code><code>package test

import (
&#9;"testing"
&#9;"github.com/gruntwork-io/terratest/modules/terraform"
&#9;"github.com/stretchr/testify/assert"
)

func TestTerraformEC2Instance(t *testing.T) {
&#9;t.Parallel()

&#9;terraformOptions := terraform.WithDefaultRetryableErrors(t, &amp;terraform.Options{
&#9;&#9;TerraformDir: "../examples/aws-ec2-instance",
&#9;&#9;Vars: map[string]interface{}{
&#9;&#9;&#9;"instance_type": "t2.micro",
&#9;&#9;},
&#9;})

&#9;defer terraform.Destroy(t, terraformOptions)

&#9;terraform.InitAndApply(t, terraformOptions)

&#9;instanceID := terraform.Output(t, terraformOptions, "instance_id")
&#9;assert.NotNil(t, instanceID)
}
</code></code></pre><h4><strong>7.2 - Use Policy as Code</strong>: </h4><p>This is an essential approach to enforce governance and security in your cloud infrastructure. <strong>Open Policy Agent (OPA)</strong> is a popular tool that allows you to define and enforce policies as code. It helps ensure that your infrastructure configurations adhere to your organization's security and compliance standards. </p><p>How you can integrate OPA into your Terraform workflow:</p><ol><li><p>Define Policies with OPA:</p></li></ol><pre><code><code># policies.rego

package main

deny_instance_types = {
  "t2.nano",
  "m1.small"
}

default allow

deny {
  input.aws_instance.instance_type = deny_instance_types[_]
}
</code></code></pre><ol start="2"><li><p>Integrate OPA with Terraform:</p></li></ol><pre><code><code># Install conftest
brew install conftest   # For macOS

# Run OPA checks against Terraform code
conftest test path/to/your/terraform/code


## Example TF code

# main.tf

provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "example_instance" {
  ami           = "ami-12345678"
  instance_type = "t2.micro"
  tags = {
    Name = "ExampleInstance"
  }
}</code></code></pre><p>By introducing Policy as Code with OPA, you can ensure that your Terraform configurations align with your organization's policies and best practices. This approach enhances the security and compliance of your cloud infrastructure deployments.</p><div><hr></div><h2>8. Additional practices</h2><h4><strong>8.1 - Bake Virtual Machine images</strong>: </h4><p>Baking virtual machine images is a recommended practice for AWS deployments. By using a tool like Packer, you can create pre-baked machine images with all the necessary software and configurations. This reduces the startup time and ensures consistent environments when Terraform launches instances using these images.</p><ul><li><p>Example Packer template for building an AWS AMI:</p></li></ul><pre><code><code>{
  "builders": [
    {
      "type": "amazon-ebs",
      "region": "us-west-2",
      "source_ami": "ami-0123456789abcdef0",
      "instance_type": "t2.micro",
      "ssh_username": "ec2-user",
      "ami_name": "my-server-{{timestamp}}"
    }
  ]
}
</code></code></pre><h4><strong>8.2 - Use open-source tools that work alongside Terraform:</strong></h4><p><strong> </strong>There are many free/paid tools out there that assist you with your daily Terraform usage. Here are some of them I have come across and there are more not on the list. </p><ul><li><p>Spacelift - Terraform orchestrator </p></li><li><p>Atlantis - Workflow for collaborating on Terraform projects</p></li><li><p>Pre-commit Terraform - Pre-commit git hooks for automation&nbsp;</p></li><li><p>Checkov - for static testing</p></li><li><p>terraform-docs - Generate docs from modules</p></li><li><p>Tfenv/Tfswtitch - Manage your TF versions</p></li></ul><h4><strong>8.3 - Terraform code structures</strong>:</h4><p>Having worked in different organisations and projects, there are different structures I have seen and would recommend. Ranging from small startups to large enterprises:</p><ul><li><p>Small: Few resources, no external dependencies. Single AWS account. Single region. Single environment.</p></li><li><p>Medium-sized org: A few AWS accounts and environments, off-the-shelf infrastructure modules from GitHub and various other sources using Terraform.</p></li><li><p>Large-corp: Many AWS accounts, many regions, urgent need to reduce copy-paste, custom infrastructure and homemade modules, heavy usage of compositions.</p></li><li><p>Enterprise: Several providers (AWS, GCP, Azure, K8s). Multi-cloud deployments. Using Terraform.</p><p></p></li></ul><h4>Conclusion</h4><p>If you have made it this far, then well done to you!</p><p>Sharing my journey is a way of acknowledging the impact Terraform has had on my growth. From a novice tinkering with code to a seasoned engineer architecting cloud solutions, every phase has been a step toward mastery. As I share some of the best practices, looking back at the miles covered, I see that my journey with Terraform is far from over. Every line of code written, every module crafted, contributes to a bigger picture. The goal is a reliable, scalable, and secure infrastructure that serves its purpose seamlessly.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Linux Series EP4: Journeying Through Advanced Bash Scripting Concepts]]></title><description><![CDATA[Welcome back, CoCoders!]]></description><link>https://blog.coderco.io/p/journeying-through-advanced-bash</link><guid isPermaLink="false">https://blog.coderco.io/p/journeying-through-advanced-bash</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Tue, 05 Sep 2023 11:30:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rOqr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome back, CoCoders! As we journey deeper into the world of Bash scripting, we're set to explore some of the advanced constructs that can empower you to utilise your scripts' full potential. From the elegance of arrays to the logic behind loops and conditional statements, we're about to embark on an  expedition. Let's dive right in!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rOqr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rOqr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!rOqr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!rOqr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!rOqr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rOqr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png" width="1456" height="1061" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1061,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:602014,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rOqr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!rOqr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!rOqr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!rOqr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f1372f4-2888-4d5a-a2d3-7fdf1a6370ab_1768x1288.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3><em>Quick Reminders:</em></h3><ol><li><p>Join our 10-hour Linux Course waiting list &#10145;&#65039; <a href="http://bit.ly/3pEZ4XQ">http://bit.ly/3pEZ4XQ</a></p></li><li><p>Subscribe to our YouTube Channel, we are currently working on something, click on the &#128276; so you don&#8217;t miss out: <a href="https://www.youtube.com/@coderco">CoderCo</a></p></li></ol><div><hr></div><h2><strong>1. Arrays: Organizing Data Efficiently</strong></h2><p>In Bash, an array is a variable containing multiple values. It can be thought of as a list that you can traverse or utilise as required.</p><h3><strong>What are Arrays?</strong></h3><ul><li><p><strong>Definition</strong>: Arrays store multiple values under a single name.</p></li><li><p><strong>Utility</strong>: Use arrays to manage lists like filenames, configurations, and more.</p></li></ul><h3><strong>Working with Arrays</strong></h3><h4><strong>Defining an Array</strong></h4><p>You can define an array in Bash like so:</p><pre><code><code>fruits=('Apple' 'Banana' 'Cherry')
</code></code></pre><h4><strong>Accessing Array Elements</strong></h4><p>Access elements using indices:</p><pre><code><code>echo ${fruits[0]}  # Outputs: Apple
</code></code></pre><h4><strong>Adding and Removing Elements</strong></h4><p>Add to an array:</p><pre><code><code>fruits+=('Dragonfruit')
</code></code></pre><p>To unset a particular value:</p><pre><code><code>unset fruits[1]
</code></code></pre><h2><strong>2. Loops: The Power of Repetition</strong></h2><p>When you want to automate repetitive tasks, loops come to the rescue. They allow for repeated execution of a block of commands.</p><h3><strong>For Loop</strong></h3><p>Iterating over a sequence of numbers:</p><pre><code><code>for i in {1..5}; do
    echo "Number $i"
done
</code></code></pre><p>Iterating over array elements:</p><pre><code><code>for fruit in "${fruits[@]}"; do
    echo "$fruit"
done
</code></code></pre><h3><strong>While Loop</strong></h3><p>Executing a block of commands as long as a certain condition is true:</p><pre><code><code>count=1
while [ $count -le 5 ]; do
    echo "Count: $count"
    ((count++))
done
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5eOB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e17743-596c-45b3-aa81-53c96ec5fe54_220x451.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5eOB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e17743-596c-45b3-aa81-53c96ec5fe54_220x451.png 424w, https://substackcdn.com/image/fetch/$s_!5eOB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e17743-596c-45b3-aa81-53c96ec5fe54_220x451.png 848w, https://substackcdn.com/image/fetch/$s_!5eOB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e17743-596c-45b3-aa81-53c96ec5fe54_220x451.png 1272w, https://substackcdn.com/image/fetch/$s_!5eOB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e17743-596c-45b3-aa81-53c96ec5fe54_220x451.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5eOB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e17743-596c-45b3-aa81-53c96ec5fe54_220x451.png" width="220" height="451" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c5e17743-596c-45b3-aa81-53c96ec5fe54_220x451.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:451,&quot;width&quot;:220,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16360,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5eOB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e17743-596c-45b3-aa81-53c96ec5fe54_220x451.png 424w, https://substackcdn.com/image/fetch/$s_!5eOB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e17743-596c-45b3-aa81-53c96ec5fe54_220x451.png 848w, https://substackcdn.com/image/fetch/$s_!5eOB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e17743-596c-45b3-aa81-53c96ec5fe54_220x451.png 1272w, https://substackcdn.com/image/fetch/$s_!5eOB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5e17743-596c-45b3-aa81-53c96ec5fe54_220x451.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>3. Conditional Statements: Guiding Decision Making</strong></h2><p>Bash provides structures to execute certain blocks of commands based on conditions, making your scripts more flexible and dynamic.</p><h3><strong>Why Use Conditionals?</strong></h3><ul><li><p><strong>Flexibility</strong>: Alter script behavior based on conditions.</p></li><li><p><strong>Logic</strong>: Introduce logical flow and checks.</p></li></ul><h4><strong>If Statement</strong></h4><ul><li><p>Checking a condition:</p></li></ul><pre><code><code>number=5
if [ $number -gt 3 ]; then
    echo "Number is greater than 3."
fi
</code></code></pre><h4><strong>Case Statement</strong></h4><ul><li><p>A more elegant solution for multiple conditions:</p></li></ul><pre><code><code>word="apple"
case $word in
    apple)
        echo "This is an apple."
        ;;
    banana)
        echo "This is a banana."
        ;;
    *)
        echo "Unknown fruit."
        ;;
esac
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ysDk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155f3b4b-b8f2-4ea7-b671-8696835f23da_527x196.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ysDk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155f3b4b-b8f2-4ea7-b671-8696835f23da_527x196.png 424w, https://substackcdn.com/image/fetch/$s_!ysDk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155f3b4b-b8f2-4ea7-b671-8696835f23da_527x196.png 848w, https://substackcdn.com/image/fetch/$s_!ysDk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155f3b4b-b8f2-4ea7-b671-8696835f23da_527x196.png 1272w, https://substackcdn.com/image/fetch/$s_!ysDk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155f3b4b-b8f2-4ea7-b671-8696835f23da_527x196.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ysDk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155f3b4b-b8f2-4ea7-b671-8696835f23da_527x196.png" width="527" height="196" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/155f3b4b-b8f2-4ea7-b671-8696835f23da_527x196.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:196,&quot;width&quot;:527,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:45686,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ysDk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155f3b4b-b8f2-4ea7-b671-8696835f23da_527x196.png 424w, https://substackcdn.com/image/fetch/$s_!ysDk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155f3b4b-b8f2-4ea7-b671-8696835f23da_527x196.png 848w, https://substackcdn.com/image/fetch/$s_!ysDk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155f3b4b-b8f2-4ea7-b671-8696835f23da_527x196.png 1272w, https://substackcdn.com/image/fetch/$s_!ysDk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F155f3b4b-b8f2-4ea7-b671-8696835f23da_527x196.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><h2><strong>4. Process Management: Mastering System Processes</strong></h2><p>Every command or script you run on Linux initiates a process. Bash gives you the tools to control and monitor these processes.</p><h3><strong>Why is Process Management Vital?</strong></h3><ul><li><p><strong>Control</strong>: Manage tasks you initiate.</p></li><li><p><strong>Optimisation</strong>: Ensure resource-efficient system operations.</p></li></ul><h4><strong>Background Processes</strong></h4><p>Run a command in the background using <code>&amp;</code>:</p><pre><code><code>sleep 30 &amp;
</code></code></pre><h4><strong>Jobs Command</strong></h4><p>Monitor background processes:</p><ul><li><p>The <code>jobs</code> command provides insights into background tasks.</p></li></ul><pre><code><code>jobs
</code></code></pre><h4><strong>Bringing Background Processes to the Foreground</strong></h4><p>You can bring any background process to the foreground:</p><pre><code><code>fg %1
</code></code></pre><h4><strong>Killing Processes</strong></h4><p>Terminate a process:</p><pre><code><code>kill [PID]
</code></code></pre><p>or</p><pre><code><code>killall [process_name]
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3uBL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f3cd7c-9783-46bc-a47d-23e0ea29d4cd_1142x510.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3uBL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f3cd7c-9783-46bc-a47d-23e0ea29d4cd_1142x510.png 424w, https://substackcdn.com/image/fetch/$s_!3uBL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f3cd7c-9783-46bc-a47d-23e0ea29d4cd_1142x510.png 848w, https://substackcdn.com/image/fetch/$s_!3uBL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f3cd7c-9783-46bc-a47d-23e0ea29d4cd_1142x510.png 1272w, https://substackcdn.com/image/fetch/$s_!3uBL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f3cd7c-9783-46bc-a47d-23e0ea29d4cd_1142x510.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3uBL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f3cd7c-9783-46bc-a47d-23e0ea29d4cd_1142x510.png" width="1142" height="510" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78f3cd7c-9783-46bc-a47d-23e0ea29d4cd_1142x510.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:510,&quot;width&quot;:1142,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:276843,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3uBL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f3cd7c-9783-46bc-a47d-23e0ea29d4cd_1142x510.png 424w, https://substackcdn.com/image/fetch/$s_!3uBL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f3cd7c-9783-46bc-a47d-23e0ea29d4cd_1142x510.png 848w, https://substackcdn.com/image/fetch/$s_!3uBL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f3cd7c-9783-46bc-a47d-23e0ea29d4cd_1142x510.png 1272w, https://substackcdn.com/image/fetch/$s_!3uBL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78f3cd7c-9783-46bc-a47d-23e0ea29d4cd_1142x510.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>5. Script Debugging: The Art of Problem Solving</strong></h2><p>Even seasoned developers can write scripts that contain errors. Bash provides tools to help you identify and resolve these issues.</p><h3><strong>Using set -x</strong></h3><ul><li><p><strong>Verbose Execution with </strong><code>set -x</code>: It prints every command before executing, revealing the script's flow.</p></li></ul><pre><code><code>#!/bin/bash
set -x
echo "Debugging my script."
</code></code></pre><h3><strong>Using trap</strong></h3><ul><li><p><strong>Signal Handling using </strong><code>trap</code>: It allows capturing and reacting to signals, aiding in graceful exits or resource cleanup.</p></li></ul><pre><code><code>#!/bin/bash
trap "echo 'Interrupted!'" SIGINT SIGTERM
echo "Press Ctrl+C to interrupt."
sleep 30
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6eSk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff44ab0af-8b47-4450-936b-7d747031386e_2200x2300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6eSk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff44ab0af-8b47-4450-936b-7d747031386e_2200x2300.png 424w, https://substackcdn.com/image/fetch/$s_!6eSk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff44ab0af-8b47-4450-936b-7d747031386e_2200x2300.png 848w, https://substackcdn.com/image/fetch/$s_!6eSk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff44ab0af-8b47-4450-936b-7d747031386e_2200x2300.png 1272w, https://substackcdn.com/image/fetch/$s_!6eSk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff44ab0af-8b47-4450-936b-7d747031386e_2200x2300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6eSk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff44ab0af-8b47-4450-936b-7d747031386e_2200x2300.png" width="1456" height="1522" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f44ab0af-8b47-4450-936b-7d747031386e_2200x2300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1522,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1942531,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6eSk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff44ab0af-8b47-4450-936b-7d747031386e_2200x2300.png 424w, https://substackcdn.com/image/fetch/$s_!6eSk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff44ab0af-8b47-4450-936b-7d747031386e_2200x2300.png 848w, https://substackcdn.com/image/fetch/$s_!6eSk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff44ab0af-8b47-4450-936b-7d747031386e_2200x2300.png 1272w, https://substackcdn.com/image/fetch/$s_!6eSk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff44ab0af-8b47-4450-936b-7d747031386e_2200x2300.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>6. Bonus: Bash Tips and Tricks</strong></h2><p>To wrap up, let&#8217;s sprinkle some quick Bash magic:</p><ul><li><p><strong>History Command</strong>: Revisit previously entered commands with <code>history</code>.</p><p><code>history | grep "specific_command"</code></p></li><li><p><strong>Command Aliases</strong>: Shorten lengthy commands.</p><p><code>alias ll='ls -la'</code></p></li><li><p><strong>Brace Expansion</strong>: Generate strings or sequences.</p><p><code>echo {A,B}{1,2}</code></p></li></ul><p>Equip yourself with these tricks to expedite your Bash journey.</p><h1><strong>Conclusion</strong></h1><p>We've broken down the advanced constructs of Bash scripting in this post, and we hope that you're as excited as we are about the endless possibilities they open up. Each concept, when mastered, allows for more refined, efficient, and dynamic scripting.</p><p>As you continue your journey with Bash, remember that practice, curiosity, and patience are your greatest allies. Experiment with these concepts, try out different scripts, and before you know it, you'll be a Bash scripting wizard!</p><p>Stay tuned for our next episode in the tech series. Happy scripting!</p>]]></content:encoded></item><item><title><![CDATA[Terraform Best Practices Series - Lessons from the Battlefield: Part 1]]></title><description><![CDATA[Strategic Insights from the Terraform Trenches Part 1]]></description><link>https://blog.coderco.io/p/terraform-best-practices-series-lessons</link><guid isPermaLink="false">https://blog.coderco.io/p/terraform-best-practices-series-lessons</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Tue, 29 Aug 2023 15:42:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_ojJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Throughout my journey of DevOps/Infrastructure spanning nearly five years, I've been deep in the trenches of Terraform, crafting cloud infrastructure from startups to sprawling enterprises alike. From rookie missteps to triumphant victories, I've had a front-row seat to the power of Terraform's best practices.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_ojJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_ojJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png 424w, https://substackcdn.com/image/fetch/$s_!_ojJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png 848w, https://substackcdn.com/image/fetch/$s_!_ojJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png 1272w, https://substackcdn.com/image/fetch/$s_!_ojJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_ojJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png" width="1456" height="1064" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1064,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_ojJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png 424w, https://substackcdn.com/image/fetch/$s_!_ojJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png 848w, https://substackcdn.com/image/fetch/$s_!_ojJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png 1272w, https://substackcdn.com/image/fetch/$s_!_ojJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27f4b110-d4eb-481f-aa85-fc2e20138852_1768x1292.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In the early days, I learned the hard way that hasty changes can lead to production hiccups. But these experiences, though challenging, became invaluable lessons. They drove home the importance of meticulous planning and the significance of thorough testing before hitting that apply button. Here is my list of top Terraform best practices I have learned through experience and from others.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Table of Contents</h2><ol><li><p><strong>Building a clean and organised codebase</strong></p><ol><li><p>Version control</p></li><li><p>Using modules</p></li><li><p>Environment-specific configurations</p></li><li><p>Directory structure &amp; naming</p></li></ol></li><li><p><strong>Effective variable management</strong></p><ol><li><p>Using TF vars</p></li><li><p>Using CLI for vars</p></li></ol></li><li><p><strong>State Management &amp; Security</strong></p><ol><li><p>Remote backend</p></li><li><p>State locking</p></li><li><p>Storing sensitive data</p></li></ol></li><li><p><strong>Plan &amp; Automation</strong></p><ol><li><p>Always planning first</p></li><li><p>Automating your IaC</p></li><li><p>Using IAM roles in your IaC</p></li><li><p>Tagging strategies</p></li></ol></li><li><p><strong>Versioning practices</strong></p><ol><li><p>Using CodeOwners file</p></li><li><p>Releasing tagged versions</p></li><li><p>Pinning minor provider versions</p></li><li><p>Checking in .terraform.lock.hcl file</p></li></ol></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!srTn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773dfeb4-91ac-42a4-a7da-82ec72ef2f53_600x600.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!srTn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773dfeb4-91ac-42a4-a7da-82ec72ef2f53_600x600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!srTn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773dfeb4-91ac-42a4-a7da-82ec72ef2f53_600x600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!srTn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773dfeb4-91ac-42a4-a7da-82ec72ef2f53_600x600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!srTn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773dfeb4-91ac-42a4-a7da-82ec72ef2f53_600x600.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!srTn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773dfeb4-91ac-42a4-a7da-82ec72ef2f53_600x600.jpeg" width="600" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/773dfeb4-91ac-42a4-a7da-82ec72ef2f53_600x600.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Hashicorp Stickers for Sale | Redbubble&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Hashicorp Stickers for Sale | Redbubble" title="Hashicorp Stickers for Sale | Redbubble" srcset="https://substackcdn.com/image/fetch/$s_!srTn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773dfeb4-91ac-42a4-a7da-82ec72ef2f53_600x600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!srTn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773dfeb4-91ac-42a4-a7da-82ec72ef2f53_600x600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!srTn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773dfeb4-91ac-42a4-a7da-82ec72ef2f53_600x600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!srTn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773dfeb4-91ac-42a4-a7da-82ec72ef2f53_600x600.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>1. Building a Clean and Organised Codebase</strong></h2><p>When building complex infrastructure, maintaining a clean and organized codebase is crucial. Terraform offers a few strategies to achieve this:</p><h4><strong>1.1 - Use Version Control</strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TNKq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68ac0cd0-1af2-463a-8633-4adaa7222fa3_1200x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TNKq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68ac0cd0-1af2-463a-8633-4adaa7222fa3_1200x1200.png 424w, https://substackcdn.com/image/fetch/$s_!TNKq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68ac0cd0-1af2-463a-8633-4adaa7222fa3_1200x1200.png 848w, https://substackcdn.com/image/fetch/$s_!TNKq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68ac0cd0-1af2-463a-8633-4adaa7222fa3_1200x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!TNKq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68ac0cd0-1af2-463a-8633-4adaa7222fa3_1200x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TNKq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68ac0cd0-1af2-463a-8633-4adaa7222fa3_1200x1200.png" width="203" height="203" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68ac0cd0-1af2-463a-8633-4adaa7222fa3_1200x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1200,&quot;width&quot;:1200,&quot;resizeWidth&quot;:203,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;GitHub - Wikipedia&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="GitHub - Wikipedia" title="GitHub - Wikipedia" srcset="https://substackcdn.com/image/fetch/$s_!TNKq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68ac0cd0-1af2-463a-8633-4adaa7222fa3_1200x1200.png 424w, https://substackcdn.com/image/fetch/$s_!TNKq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68ac0cd0-1af2-463a-8633-4adaa7222fa3_1200x1200.png 848w, https://substackcdn.com/image/fetch/$s_!TNKq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68ac0cd0-1af2-463a-8633-4adaa7222fa3_1200x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!TNKq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68ac0cd0-1af2-463a-8633-4adaa7222fa3_1200x1200.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Store your Terraform code in version control like GitHub/GitLab repositories to track changes, collaborate effectively, and enable rollbacks when needed.</p><h4><strong>1.2 - Use Modules for Reusability</strong></h4><p>Break down your infrastructure into reusable modules to encapsulate logic and make your code more maintainable. &#128104;&#8205;&#128187;</p><pre><code>module "vpc" {
  source = "./modules/vpc"
  # module arguments
}</code></pre><h4><strong>1.3 - Environment-Specific Configurations</strong></h4><p>Organize your configurations based on environments (e.g., dev, staging, prod) for clear separation and easy resource management. &#127760;</p><pre><code>terraform/
&#9500;&#9472;&#9472; dev/
&#9474; &#9500;&#9472;&#9472; main.tf
&#9474; &#9500;&#9472;&#9472; variables.tf
&#9500;&#9472;&#9472; staging/
&#9474; &#9500;&#9472;&#9472; main.tf
&#9474; &#9500;&#9472;&#9472; variables.tf
&#9500;&#9472;&#9472; prod/
&#9474; &#9500;&#9472;&#9472; main.tf
&#9474; &#9500;&#9472;&#9472; variables.tf</code></pre><h4><strong>1.4 - Follow a good directory structure &amp; use descriptive naming</strong></h4><p>Organize your codebase using a consistent directory structure that reflects the layout of your infrastructure components. Choose meaningful and descriptive names for resources, modules, and variables to enhance clarity and understanding.</p><pre><code>terraform/
&#9500;&#9472;&#9472; modules/
&#9474; &#9500;&#9472;&#9472; network/
&#9474; &#9474; &#9500;&#9472;&#9472; main.tf
&#9474; &#9474; &#9500;&#9472;&#9472; variables.tf
&#9474; &#9500;&#9472;&#9472; database/
&#9474; &#9474; &#9500;&#9472;&#9472; main.tf
&#9474; &#9474; &#9500;&#9472;&#9472; variables.tf
&#9500;&#9472;&#9472; environments/
&#9474; &#9500;&#9472;&#9472; dev/
&#9474; &#9474; &#9500;&#9472;&#9472; main.tf
&#9474; &#9474; &#9500;&#9472;&#9472; variables.tf
&#9474; &#9500;&#9472;&#9472; prod/
&#9474; &#9474; &#9500;&#9472;&#9472; main.tf
&#9474; &#9474; &#9500;&#9472;&#9472; variables.tf</code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E3VL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208fb35e-688a-48a9-aefd-17757179ef80_295x364.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E3VL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208fb35e-688a-48a9-aefd-17757179ef80_295x364.png 424w, https://substackcdn.com/image/fetch/$s_!E3VL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208fb35e-688a-48a9-aefd-17757179ef80_295x364.png 848w, https://substackcdn.com/image/fetch/$s_!E3VL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208fb35e-688a-48a9-aefd-17757179ef80_295x364.png 1272w, https://substackcdn.com/image/fetch/$s_!E3VL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208fb35e-688a-48a9-aefd-17757179ef80_295x364.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E3VL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208fb35e-688a-48a9-aefd-17757179ef80_295x364.png" width="533" height="657.6677966101695" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/208fb35e-688a-48a9-aefd-17757179ef80_295x364.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:364,&quot;width&quot;:295,&quot;resizeWidth&quot;:533,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!E3VL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208fb35e-688a-48a9-aefd-17757179ef80_295x364.png 424w, https://substackcdn.com/image/fetch/$s_!E3VL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208fb35e-688a-48a9-aefd-17757179ef80_295x364.png 848w, https://substackcdn.com/image/fetch/$s_!E3VL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208fb35e-688a-48a9-aefd-17757179ef80_295x364.png 1272w, https://substackcdn.com/image/fetch/$s_!E3VL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208fb35e-688a-48a9-aefd-17757179ef80_295x364.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Terraform real-world example directory structure </figcaption></figure></div><div><hr></div><h2><strong>2. Effective Variable Management</strong></h2><p>Effective variable management simplifies configuration and allows for flexibility:</p><h4><strong>2.1 Use tfvars Files</strong>: </h4><p>Store your variable definitions in separate .tfvars files for consistency and better predictability. &#128193;</p><pre><code># terraform.tfvars
region = "us-west1"
instance_type = "t2.micro"</code></pre><h4><strong>2.2 Avoid Command-Line Variables</strong></h4><p>Instead of using command-line options, stick to default variable files for better consistency.</p><p>Example of CLI var (not recommended!!)</p><pre><code>terraform apply -var 'region=us-east-1'</code></pre><p>Using default vars file (recommended)</p><pre><code>
# variables/defaults.tfvars

region = "us-west-1"
instance_type = "t2.micro"

---
To run:

terraform apply -var-file=variables/defaults.tfvars</code></pre><div><hr></div><h2><strong>3. State Management and Security</strong><br></h2><h4><strong>3.1 - Leverage a Remote Backend</strong></h4><p>Use remote state backends (e.g., AWS S3, Google Cloud Storage) to store state files securely and enable teamwork &#128272;</p><pre><code>terraform {
  <strong>backend "s3"</strong> {
    bucket         = "my-terraform-state"
    key            = "terraform.tfstate"
    region         = "us-west-1"
    encrypt        = true
    dynamodb_table = "terraform-lock"
  }
}</code></pre><h4>3.2 - Lock Your State</h4><p>Implement state locking to prevent conflicts when multiple users or processes attempt to modify infrastructure concurrently. &#128273;</p><pre><code>terraform {
  backend "s3" {
    bucket         = "my-terraform-state"
    key            = "terraform.tfstate"
    region         = "us-west-1"
    encrypt        = true
    <strong>dynamodb_table = "terraform-lock" &gt;&gt; state locking here</strong>
  }
}</code></pre><h4><strong>3.3 - Store Sensitive Data Securely</strong></h4><p>Avoid storing sensitive information in your Terraform state, and instead, use external secret management tools like Secret Manager and data sources instead &#128272;</p><pre><code>resource "aws_instance" "coderco_ec2" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  tags = {
    Name = "ExampleInstance"
  }

  user_data = &lt;&lt;-EOF
    #!/bin/bash
    echo "API_KEY=${data.aws_secretsmanager_secret_version.api_key.secret_string}" &gt;&gt; /etc/environment
  EOF
}

data "aws_secretsmanager_secret_version" "api_key" {
  secret_id = "my-api-key-secret-id"
}</code></pre><div><hr></div><h2><strong>4. Plan and Automation</strong></h2><h4><strong>4.1 - Always Plan First</strong></h4><p>Generate a plan and review it before applying changes to ensure understanding and prevent unintended consequences. &#128221;</p><pre><code># Generate a plan
terraform plan -out=tfplan

# Review the plan
terraform show -json tfplan</code></pre><h4><strong>4.2 - CICD - Automate with Pipelines</strong></h4><p>Implement automated pipelines using tools like Jenkins, GitHub Actions, Cloud Build, or Terraform Cloud for consistent execution. &#128736;&#65039;</p><pre><code>name: Terraform CI/CD using GitHub Actions

on:
  push:
    branches:
      - main

jobs:
  terraform:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v2
      
    - name: Set up Terraform
      uses: hashicorp/setup-terraform@v1
      with:
        terraform_version: 1.0.0  # Specify the desired Terraform version
        
    - name: Initialize Terraform
      run: terraform init
      
    - name: Generate Terraform plan
      run: terraform plan -out=tfplan
      
    - name: Apply Terraform changes
      run: terraform apply -auto-approve tfplan
</code></pre><h4><strong>4.3 - Use Service Account/IAM roles Credentials</strong></h4><p>In your CI/CD pipeline, inherit service account/IAM roles credentials from the executing service for secure automation.</p><h4><strong>4.4 - Implement Tagging Strategies</strong></h4><p>Employ a consistent tagging strategy for resources to facilitate organization, tracking, and cost allocation. &#127991;&#65039;</p><div><hr></div><h2>5. Versioning practices</h2><h4><strong>5.1 - Include an Owners File</strong></h4><p>Include an owner&#8217;s file in your repository to specify the responsible individuals or teams for each Terraform module or configuration. Create a CODEOWNERS file in your GitHub repo or GitLab repo and add these. </p><pre><code># OWNERS
# Responsible Teams for Terraform Modules

modules/aws-vpc: @network-team
modules/aws-eks: @infra-team
modules/aws-lambda: @dev-team</code></pre><h4><strong>5.2 - Release Tagged Versions</strong></h4><p>When sharing your Terraform modules, release tagged versions to provide stability and enable others to reference specific versions.</p><pre><code>git tag v1.0.0
git push origin v1.0.0</code></pre><h4><strong>5.3 - Pin to Minor Provider Versions</strong></h4><p>When specifying provider versions, pin to minor versions to benefit from bug fixes and improvements while avoiding breaking changes.</p><pre><code><code>provider "aws" {
  version = "~&gt; 2.0"
  region  = "us-west-1"
}

## In this example, we've specified that we want to use version 2.0 of the AWS provider, allowing for any bug fix releases or minor updates within the 2.x series.</code></code></pre><h4><strong>5.4 - Check in </strong><code>.terraform.lock.hcl</code><strong> file</strong></h4><p>Include the <code>.terraform.lock.hcl</code> file in your source control to track provider version selections for your configuration.</p><div><hr></div><p>Here are just some of the practices I have picked up in my journey of learning Terraform. This is just the start and there is more to learn.<br><br>To be continued in part 2&#8230;.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Linux Series EP3: Advanced Command Line Usage and Scripting]]></title><description><![CDATA[Welcome back to our series on mastering Linux!]]></description><link>https://blog.coderco.io/p/linux-series-ep3-advanced-command</link><guid isPermaLink="false">https://blog.coderco.io/p/linux-series-ep3-advanced-command</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Mon, 21 Aug 2023 09:00:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fAfh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome back to our series on mastering Linux! As we move deeper into the world of Linux, we're gradually increasing the complexity of the topics we cover. Today, we're focusing on advanced command-line usage, a crucial area for any Linux enthusiast or professional. This post will act as your guide to mastering Bash scripting and exploring advanced usage of commands like <code>grep</code>, <code>awk</code>, and <code>sed</code>, understanding the power of regular expressions in Linux, and unveiling some command-line productivity tips and tricks.</p><h2><em>Psst&#8230;Have you joined our Linux Course waiting list? &#128064; Click here if you haven&#8217;t: <a href="http://bit.ly/3pEZ4XQ">Linux Course waiting list!</a></em></h2><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading CoderCo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fAfh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fAfh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!fAfh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!fAfh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!fAfh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fAfh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png" width="1456" height="1061" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1061,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:529323,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fAfh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!fAfh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!fAfh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!fAfh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c3c427-191c-4cc0-b76a-1694b39dc1b7_1768x1288.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><strong>Advanced grep, awk, and sed</strong></h2><p><code>grep</code>, <code>awk</code>, and <code>sed</code> are powerful text-processing commands in Linux. Though we've brushed over their basics in our previous posts, this time we're exploring their more advanced and less commonly used features.</p><h3><strong>grep</strong></h3><p><code>grep</code> stands for 'Global Regular Expression Print'. It's used to search text for patterns defined by regular expressions. Here are some examples of advanced grep usage:</p><ul><li><p><code>grep -i "pattern" file</code>: This command will perform a case-insensitive search.</p></li><li><p><code>grep -r "pattern" /directory</code>: This command will recursively search for the pattern in a directory.</p></li><li><p><code>grep -v "pattern" file</code>: This command will invert the search, returning lines that do not match the pattern.</p></li><li><p><code>grep -w "pattern" file</code>: This command will match the pattern as a whole word, not as a substring.</p></li></ul><h3><strong>awk</strong></h3><p><code>awk</code> is a full-featured text-processing language that's particularly useful for handling structured data, like table-formatted text. Here are some advanced uses of <code>awk</code>:</p><ul><li><p><code>awk -F':' '{ print $1 }' /etc/passwd</code>: This command will print the first field (usernames) of each line in the <code>/etc/passwd</code> file. The <code>F</code> option specifies <code>:</code> as the field separator.</p></li><li><p><code>awk '/root/ { print $3 }' /etc/passwd</code>: This command will print the third field of all lines that include the string 'root'.</p></li><li><p><code>awk '{ sum += $5 } END { print sum }' file</code>: This command sums the numbers in the fifth field of all lines in a file.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tFS0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c701-9971-42ed-b1e7-d3f5500280d1_450x159.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tFS0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c701-9971-42ed-b1e7-d3f5500280d1_450x159.png 424w, https://substackcdn.com/image/fetch/$s_!tFS0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c701-9971-42ed-b1e7-d3f5500280d1_450x159.png 848w, https://substackcdn.com/image/fetch/$s_!tFS0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c701-9971-42ed-b1e7-d3f5500280d1_450x159.png 1272w, https://substackcdn.com/image/fetch/$s_!tFS0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c701-9971-42ed-b1e7-d3f5500280d1_450x159.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tFS0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c701-9971-42ed-b1e7-d3f5500280d1_450x159.png" width="450" height="159" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e418c701-9971-42ed-b1e7-d3f5500280d1_450x159.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:159,&quot;width&quot;:450,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:13982,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tFS0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c701-9971-42ed-b1e7-d3f5500280d1_450x159.png 424w, https://substackcdn.com/image/fetch/$s_!tFS0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c701-9971-42ed-b1e7-d3f5500280d1_450x159.png 848w, https://substackcdn.com/image/fetch/$s_!tFS0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c701-9971-42ed-b1e7-d3f5500280d1_450x159.png 1272w, https://substackcdn.com/image/fetch/$s_!tFS0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe418c701-9971-42ed-b1e7-d3f5500280d1_450x159.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div></li></ul><h3><strong>sed</strong></h3><p><code>sed</code> (Stream Editor) is a powerful tool for performing automated edits on a file or input from a pipeline. Here are a couple of advanced <code>sed</code> commands:</p><ul><li><p><code>sed 's/foo/bar/g' file</code>: This command replaces all occurrences of 'foo' with 'bar' in a file.</p></li><li><p><code>sed -i 's/foo/bar/g' file</code>: This command replaces all occurrences of 'foo' with 'bar' in a file and modifies the file in-place (i.e., the original file is changed).</p></li></ul><p>These commands have much more to offer, and understanding them thoroughly will require exploring them in depth, which we will do in subsequent sections.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JNrp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ed6117-3264-4dfb-9e18-0a700020912e_904x164.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JNrp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ed6117-3264-4dfb-9e18-0a700020912e_904x164.png 424w, https://substackcdn.com/image/fetch/$s_!JNrp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ed6117-3264-4dfb-9e18-0a700020912e_904x164.png 848w, https://substackcdn.com/image/fetch/$s_!JNrp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ed6117-3264-4dfb-9e18-0a700020912e_904x164.png 1272w, https://substackcdn.com/image/fetch/$s_!JNrp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ed6117-3264-4dfb-9e18-0a700020912e_904x164.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JNrp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ed6117-3264-4dfb-9e18-0a700020912e_904x164.png" width="904" height="164" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6ed6117-3264-4dfb-9e18-0a700020912e_904x164.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:164,&quot;width&quot;:904,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:23900,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JNrp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ed6117-3264-4dfb-9e18-0a700020912e_904x164.png 424w, https://substackcdn.com/image/fetch/$s_!JNrp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ed6117-3264-4dfb-9e18-0a700020912e_904x164.png 848w, https://substackcdn.com/image/fetch/$s_!JNrp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ed6117-3264-4dfb-9e18-0a700020912e_904x164.png 1272w, https://substackcdn.com/image/fetch/$s_!JNrp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6ed6117-3264-4dfb-9e18-0a700020912e_904x164.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2><strong>Regular Expressions in Linux</strong></h2><p>Regular expressions (regex) are patterns used to match character combinations in text. They are widely used in text searching and manipulation. A basic understanding of regex is crucial when using tools like <code>grep</code>, <code>awk</code>, and <code>sed</code>. Here are some fundamental regex symbols:</p><ul><li><p><code>.</code>: Matches any single character.</p></li><li><p><strong>``</strong>: Matches zero or more occurrences of the preceding character or group.</p></li><li><p><code>^</code>: Matches the start of the line.</p></li><li><p><code>$</code>: Matches the end of the line.</p></li><li><p><code>[abc]</code>: Matches any character that is either a, b, or c.</p></li></ul><p>There are many more regex symbols and combinations, each serving a unique purpose. For instance, <code>+</code> matches one or more occurrences of the preceding character, while <code>?</code> matches zero or one occurrence of the preceding character. This section needs a deep-dive, which we will cover subsequently</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Smca!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d152199-19f1-474d-97d6-097943a7bdf1_850x605.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Smca!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d152199-19f1-474d-97d6-097943a7bdf1_850x605.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Smca!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d152199-19f1-474d-97d6-097943a7bdf1_850x605.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Smca!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d152199-19f1-474d-97d6-097943a7bdf1_850x605.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Smca!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d152199-19f1-474d-97d6-097943a7bdf1_850x605.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Smca!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d152199-19f1-474d-97d6-097943a7bdf1_850x605.jpeg" width="850" height="605" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d152199-19f1-474d-97d6-097943a7bdf1_850x605.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:605,&quot;width&quot;:850,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57537,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Smca!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d152199-19f1-474d-97d6-097943a7bdf1_850x605.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Smca!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d152199-19f1-474d-97d6-097943a7bdf1_850x605.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Smca!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d152199-19f1-474d-97d6-097943a7bdf1_850x605.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Smca!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d152199-19f1-474d-97d6-097943a7bdf1_850x605.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1><strong>[Sponsor] Linux and Scripting Course on Amigoscode</strong></h1><p>Are you enjoying our Linux series so far and wish to dive deeper? Check out our comprehensive Linux and Scripting Course available at Amigoscode. This course aims to equip you with the knowledge and skills to navigate the Linux environment confidently and utilize its robust scripting capabilities.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ENCT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ENCT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 424w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 848w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 1272w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ENCT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png" width="767" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:767,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ENCT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 424w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 848w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 1272w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JDX6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JDX6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 424w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 848w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 1272w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JDX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png" width="766" height="421" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:421,&quot;width&quot;:766,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JDX6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 424w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 848w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 1272w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Whether you're a beginner starting your Linux journey or a seasoned user looking to brush up on your skills, this course has something for everyone. The Linux and Scripting Course are taught by experienced instructors who will guide you on your Linux and Scripting journey. They have designed the course with real-world scenarios in mind, helping you to grasp concepts quickly and apply them effectively.</p><p>The course covers everything from basic Linux commands to advanced scripting techniques. By the end of it, you will have a deep understanding of Linux and be proficient in scripting, a valuable skill in today's tech landscape.</p><h3>Enrol Now!</h3><p>To enrol in the Linux and Scripting Course, simply follow this <strong><a href="https://bit.ly/3XLO2g8">link</a></strong>. Investing in this course means investing in your future. Elevate your Linux and scripting skills to the next level with Amigoscode today!</p><div><hr></div><p>Now, let's move on to some command-line productivity tips and tricks...</p><p></p><h2><strong>Command Line Productivity Tips and Tricks</strong></h2><p>The command line is powerful, but it can also be daunting. With a few tips and tricks up your sleeve, you can significantly enhance your productivity and make your command-line experience more enjoyable.</p><p><strong>Tab Completion</strong>: This is a fantastic feature that allows you to auto-complete file and command names by hitting the <code>Tab</code> key. It's a real time-saver!</p><p><strong>Command History</strong>: Bash keeps track of the commands you execute, which you can access using the <code>history</code> command. Navigate through your command history with the up and down arrow keys, or search it using <code>Ctrl+R</code>.</p><p><strong>Aliases</strong>: Create aliases for long commands you frequently use. For example, <code>alias ll='ls -lh'</code> will allow you to use <code>ll</code> instead of typing <code>ls -lh</code>.</p><p><strong>Screen or Tmux</strong>: These tools allow you to manage multiple command-line sessions within a single terminal window, which is useful when working on complex tasks or remote servers.</p><p>There's much more to command-line productivity, and we'll cover more tips and tricks in detail in our next sections.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7bE9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6ad467-3329-480a-9b5e-cf2f77b2ca7d_605x238.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7bE9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6ad467-3329-480a-9b5e-cf2f77b2ca7d_605x238.png 424w, https://substackcdn.com/image/fetch/$s_!7bE9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6ad467-3329-480a-9b5e-cf2f77b2ca7d_605x238.png 848w, https://substackcdn.com/image/fetch/$s_!7bE9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6ad467-3329-480a-9b5e-cf2f77b2ca7d_605x238.png 1272w, https://substackcdn.com/image/fetch/$s_!7bE9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6ad467-3329-480a-9b5e-cf2f77b2ca7d_605x238.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7bE9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6ad467-3329-480a-9b5e-cf2f77b2ca7d_605x238.png" width="605" height="238" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc6ad467-3329-480a-9b5e-cf2f77b2ca7d_605x238.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:238,&quot;width&quot;:605,&quot;resizeWidth&quot;:605,&quot;bytes&quot;:48925,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7bE9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6ad467-3329-480a-9b5e-cf2f77b2ca7d_605x238.png 424w, https://substackcdn.com/image/fetch/$s_!7bE9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6ad467-3329-480a-9b5e-cf2f77b2ca7d_605x238.png 848w, https://substackcdn.com/image/fetch/$s_!7bE9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6ad467-3329-480a-9b5e-cf2f77b2ca7d_605x238.png 1272w, https://substackcdn.com/image/fetch/$s_!7bE9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc6ad467-3329-480a-9b5e-cf2f77b2ca7d_605x238.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading CoderCo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h1>Bash Scripting: The Power of Automation</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ukNJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbc4ef0b-da68-4389-94ff-47ef6f5e4544_800x400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ukNJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbc4ef0b-da68-4389-94ff-47ef6f5e4544_800x400.png 424w, https://substackcdn.com/image/fetch/$s_!ukNJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbc4ef0b-da68-4389-94ff-47ef6f5e4544_800x400.png 848w, https://substackcdn.com/image/fetch/$s_!ukNJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbc4ef0b-da68-4389-94ff-47ef6f5e4544_800x400.png 1272w, https://substackcdn.com/image/fetch/$s_!ukNJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbc4ef0b-da68-4389-94ff-47ef6f5e4544_800x400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ukNJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbc4ef0b-da68-4389-94ff-47ef6f5e4544_800x400.png" width="800" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbc4ef0b-da68-4389-94ff-47ef6f5e4544_800x400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28141,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ukNJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbc4ef0b-da68-4389-94ff-47ef6f5e4544_800x400.png 424w, https://substackcdn.com/image/fetch/$s_!ukNJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbc4ef0b-da68-4389-94ff-47ef6f5e4544_800x400.png 848w, https://substackcdn.com/image/fetch/$s_!ukNJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbc4ef0b-da68-4389-94ff-47ef6f5e4544_800x400.png 1272w, https://substackcdn.com/image/fetch/$s_!ukNJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbc4ef0b-da68-4389-94ff-47ef6f5e4544_800x400.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Bash Script Inputs: Parameters and Arguments</strong></h2><p>The true power of a Bash script lies in its ability to act dynamically based on inputs provided, rather than statically performing the same tasks.</p><h3><strong>Positional Parameters</strong></h3><p>These are the arguments you can pass to your Bash script. You can reference these in your script using <code>$1</code>, <code>$2</code>, <code>$3</code>, and so on, based on their position after the script's name.</p><p>Consider this script:</p><pre><code><code>#!/bin/bash
# This is a bash script that greets the user
echo "Hello, $1!"
</code></code></pre><p>If you run this script with <code>./myscript.sh Alice</code>, it will output "Hello, Alice!".</p><p>Remember, Bash scripts are executables, so make sure to grant them the executable permission, by running the command `chmod +x myscript.sh`</p><h3><strong>Special Variables</strong></h3><p>Bash scripting provides special variables to handle inputs, like <code>$#</code>, which returns the number of arguments passed to the script, and <code>$*</code> or <code>$@</code>, which returns all arguments passed to the script. <code>$0</code> holds the name of the script itself.</p><pre><code><code>#!/bin/bash
# This script prints out the number of arguments and all arguments
echo "You provided $# arguments: $@"
</code></code></pre><p>These special variables become handy in many scripting scenarios, such as validating the number of inputs provided.</p><h2><strong>File Operations in Bash Scripting</strong></h2><p>Bash scripting provides various commands to handle file operations, like reading, writing, and checking file statuses.</p><h3><strong>Reading a File</strong></h3><p>The <code>read</code> command is a common way to read file content in Bash scripts. Here's an example of reading a file line by line:</p><pre><code><code>#!/bin/bash
# This script reads a file line by line
while IFS= read -r line
do
    echo "$line"
done &lt; "file.txt"
</code></code></pre><p>This script reads <code>file.txt</code> line by line and prints each line.</p><h3><strong>Writing to a File</strong></h3><p>You can write to a file using the <code>&gt;</code> and <code>&gt;&gt;</code> operators. The <code>&gt;</code> operator overwrites the file, while the <code>&gt;&gt;</code> operator appends to the file.</p><pre><code><code>#!/bin/bash
# This script writes to a file
echo "Hello, world!" &gt; file.txt
</code></code></pre><p>This script writes "Hello, world!" to <code>file.txt</code>, overwriting its content if the file already exists.</p><h3><strong>Checking File Status</strong></h3><p>Commands like <code>test</code>, <code>[</code> (short form of <code>test</code>), and <code>[[</code> (advanced version of <code>[</code>) are used to check file statuses. For instance, <code>-f</code> checks if a file exists and is a regular file.</p><pre><code><code>#!/bin/bash
# This script checks if a file exists and is a regular file
if [ -f "file.txt" ]
then
    echo "file.txt exists and is a regular file."
else
    echo "file.txt does not exist or is not a regular file."
fi
</code></code></pre><p>This script checks if <code>file.txt</code> exists and is a regular file.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E5w1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F758ea43d-8420-412b-9348-a99f95c25671_321x349.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E5w1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F758ea43d-8420-412b-9348-a99f95c25671_321x349.jpeg 424w, https://substackcdn.com/image/fetch/$s_!E5w1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F758ea43d-8420-412b-9348-a99f95c25671_321x349.jpeg 848w, https://substackcdn.com/image/fetch/$s_!E5w1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F758ea43d-8420-412b-9348-a99f95c25671_321x349.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!E5w1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F758ea43d-8420-412b-9348-a99f95c25671_321x349.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E5w1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F758ea43d-8420-412b-9348-a99f95c25671_321x349.jpeg" width="321" height="349" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/758ea43d-8420-412b-9348-a99f95c25671_321x349.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:349,&quot;width&quot;:321,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:29344,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!E5w1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F758ea43d-8420-412b-9348-a99f95c25671_321x349.jpeg 424w, https://substackcdn.com/image/fetch/$s_!E5w1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F758ea43d-8420-412b-9348-a99f95c25671_321x349.jpeg 848w, https://substackcdn.com/image/fetch/$s_!E5w1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F758ea43d-8420-412b-9348-a99f95c25671_321x349.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!E5w1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F758ea43d-8420-412b-9348-a99f95c25671_321x349.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading CoderCo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Error Handling and Debugging in Bash Scripting</strong></h2><p>When scripting, things don't always go as planned. Here's where error handling and debugging come in handy.</p><h3><strong>Exit Status</strong></h3><p>Every command returns an exit status (0 for success and non-zero for failure). You can capture this in a variable using the <code>$?</code> special variable and handle errors accordingly. For instance:</p><pre><code><code>#!/bin/bash
# This script checks the success of a command
ls /nonexistent_directory
if [ $? -ne 0 ]
then
    echo "An error occurred."
fi
</code></code></pre><p>This script attempts to list the contents of a non-existent directory and prints an error message if the <code>ls</code> command fails.</p><h3><strong>set -e and set -o pipefail</strong></h3><p>The <code>set -e</code> command causes your script to exit if any command fails. The <code>set -o pipefail</code> command is similar but works for pipelines. If any command in a pipeline fails, the entire pipeline's return status becomes a failure.</p><pre><code><code>#!/bin/bash
# This script exits on the first error
set -e
ls /nonexistent_directory
echo "This line will not be printed if an error occurs."
</code></code></pre><p>This script will not print the final echo statement, because the <code>ls</code> command will fail.</p><h3><strong>Debugging with set -x</strong></h3><p>The <code>set -x</code> command is useful for debugging. It prints each command to the standard error before executing it. This helps trace the script's execution.</p><pre><code><code>#!/bin/bash
# This script is for debugging
set -x
echo "Hello, world!"
</code></code></pre><p>This script will print the <code>echo</code> command to the standard error before executing it.</p><h2><strong>Functions in Bash Scripting</strong></h2><p>In Bash scripting, you can define functions to avoid repeating code and improve the script's readability and maintainability. Here's an example of a function:</p><pre><code><code>#!/bin/bash
# This script defines and calls a function
greet() {
    echo "Hello, $1!"
}
greet "Alice"
</code></code></pre><p>This script defines a <code>greet</code> function that accepts one argument and prints a greeting. The function is then called with the argument "Alice".</p><h2><strong>Advanced Bash Scripting Concepts</strong></h2><p>While we've covered a lot of ground, Bash scripting has even more to offer. In future posts, we'll delve into concepts such as:</p><ul><li><p><strong>Arrays</strong>: Storing multiple values in a single variable.</p></li><li><p><strong>Loops</strong>: Automating repetitive tasks.</p></li><li><p><strong>Conditional statements</strong>: Making decisions based on conditions.</p></li><li><p><strong>Process management</strong>: Controlling and monitoring system processes.</p></li><li><p><strong>Script debugging</strong>: Investigating and fixing issues in your scripts.</p></li></ul><h1><strong>In Conclusion...</strong></h1><p>We hope this blog post has given you a solid understanding of the deeper aspects of Bash scripting. As always, the key to mastering these concepts is to practice. Write scripts, break them, fix them, and discover new ways to use the power of automation.</p><p>In our next post, we'll explore advanced topics like arrays, loops, conditional statements, and process management. So, stay tuned for the next chapter in our Linux journey!</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading CoderCo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Tech Interview Series (DevOps) Part 2: Containers]]></title><description><![CDATA[A series of technical interview questions brought to you by DevOps Engineers.]]></description><link>https://blog.coderco.io/p/tech-interview-series-devops-part-7ba</link><guid isPermaLink="false">https://blog.coderco.io/p/tech-interview-series-devops-part-7ba</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Tue, 08 Aug 2023 09:31:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9U2N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Containers have taken their place as one of the most powerful paradigms for application development that is in use today and its adoption is still on the rise.</p><h3><em>Quick Reminders:</em></h3><ol><li><p>Join our 10-hour Linux Course waiting list &#10145;&#65039; <a href="http://bit.ly/3pEZ4XQ">http://bit.ly/3pEZ4XQ</a></p></li><li><p>Subscribe to our YouTube Channel, we are currently working on something, click on the &#128276; so you don&#8217;t miss out: <a href="https://www.youtube.com/@coderco">CoderCo</a> </p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9U2N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9U2N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!9U2N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!9U2N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!9U2N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9U2N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png" width="1456" height="1061" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1061,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9U2N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!9U2N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!9U2N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!9U2N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97226222-b2ca-469c-915f-0b8eabf1b676_1768x1288.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>By the very nature of containers, developers and engineers can share their software and dependencies easily in environments while eliminating the typical issue of &#8220;it works on my machine&#8221;. To also make it clear, Docker !=Container. This is a common mistake that is made these days by engineers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dTMN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a031e-ced6-4c86-a5ec-2b0811e5f65f_495x400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dTMN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a031e-ced6-4c86-a5ec-2b0811e5f65f_495x400.png 424w, https://substackcdn.com/image/fetch/$s_!dTMN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a031e-ced6-4c86-a5ec-2b0811e5f65f_495x400.png 848w, https://substackcdn.com/image/fetch/$s_!dTMN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a031e-ced6-4c86-a5ec-2b0811e5f65f_495x400.png 1272w, https://substackcdn.com/image/fetch/$s_!dTMN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a031e-ced6-4c86-a5ec-2b0811e5f65f_495x400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dTMN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a031e-ced6-4c86-a5ec-2b0811e5f65f_495x400.png" width="495" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d5a031e-ced6-4c86-a5ec-2b0811e5f65f_495x400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:495,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dTMN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a031e-ced6-4c86-a5ec-2b0811e5f65f_495x400.png 424w, https://substackcdn.com/image/fetch/$s_!dTMN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a031e-ced6-4c86-a5ec-2b0811e5f65f_495x400.png 848w, https://substackcdn.com/image/fetch/$s_!dTMN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a031e-ced6-4c86-a5ec-2b0811e5f65f_495x400.png 1272w, https://substackcdn.com/image/fetch/$s_!dTMN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d5a031e-ced6-4c86-a5ec-2b0811e5f65f_495x400.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1><strong>Questions:</strong></h1><ol><li><p><strong>What is Docker?</strong></p></li><li><p><strong>What does containerisation mean?</strong></p></li><li><p><strong>What is the difference between a container and a VM?</strong></p></li><li><p><strong>What is the difference between an image and a container?</strong></p></li><li><p><strong>What is a container image registry?</strong></p></li><li><p><strong>Is it good practice to run stateful applications on Docker? How can we slightly overcome this problem?</strong></p></li><li><p><strong>How do containers work at a lower level? (more advanced question)</strong></p></li><li><p><strong>What are some use cases for containers?</strong></p></li><li><p><strong>What is the difference between containers and Kubernetes (container orchestration)?</strong></p></li><li><p><strong>What are some best practice considerations when building containers?</strong></p></li></ol><h1><strong>Answers:</strong></h1><ol><li><p><strong>What is Docker?</strong></p></li></ol><ul><li><p>Docker is essentially a containerisation platform that packages your application and all its dependencies together in the form of a container so as to ensure that your application works seamlessly in any environment be it development, test or production.</p></li><li><p>To also make it clear, Docker !=Container. This is a common mistake that is made these days by engineers.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!73Z2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a3808e-485f-418d-90ae-68422a5fb575_280x280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!73Z2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a3808e-485f-418d-90ae-68422a5fb575_280x280.png 424w, https://substackcdn.com/image/fetch/$s_!73Z2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a3808e-485f-418d-90ae-68422a5fb575_280x280.png 848w, https://substackcdn.com/image/fetch/$s_!73Z2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a3808e-485f-418d-90ae-68422a5fb575_280x280.png 1272w, https://substackcdn.com/image/fetch/$s_!73Z2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a3808e-485f-418d-90ae-68422a5fb575_280x280.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!73Z2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a3808e-485f-418d-90ae-68422a5fb575_280x280.png" width="280" height="280" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93a3808e-485f-418d-90ae-68422a5fb575_280x280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!73Z2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a3808e-485f-418d-90ae-68422a5fb575_280x280.png 424w, https://substackcdn.com/image/fetch/$s_!73Z2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a3808e-485f-418d-90ae-68422a5fb575_280x280.png 848w, https://substackcdn.com/image/fetch/$s_!73Z2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a3808e-485f-418d-90ae-68422a5fb575_280x280.png 1272w, https://substackcdn.com/image/fetch/$s_!73Z2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a3808e-485f-418d-90ae-68422a5fb575_280x280.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>2. What does containerisation mean?</strong></p><ul><li><p>Containerisation is a type of virtualisation strategy that emerged as an alternative to traditional hypervisor-based virtualisation.</p></li><li><p>In containerisation, the operating system is shared by the different containers as opposed to having separate virtual machines for each container. Docker provides a container virtualisation plat</p></li></ul><p><strong>3. What is the difference between a container and a VM (virtual machine)?</strong></p><ul><li><p>Containers provide an isolated environment for running applications. The entire used space can be dedicated to a single application. Any changes made inside the container are never reflected on the host or even on other containers running on the same host. Essentially, containers are an abstract of the application layer and each container is a different application.</p></li><li><p>Compared to VMs, hypervisors provide you with an entire VM to the guest (including the kernel). Virtual machines are essentially an abstraction of the hardware layer and each VM is a physical machine.</p></li></ul><p><strong>4. What is the difference between an image and a container?</strong></p><ul><li><p>A docker image is an immutable file that consists of the application source code, libraries, dependencies and other files needed for the application to run. They represent an application and its virtual environment at a specific point in time and this consistency is one of its greatest features. Allowing devs to test and experiment with software in uniform and stable conditions.</p></li><li><p>A container is a virtualised run-time environment where users can isolate applications from the underlying system. Containers are portable units where you can start up applications quickly. Unlike VMs where virtualisation happens at the hardware level, containers work on the application layer as discussed in the previous questions.</p></li><li><p>Images can exist without containers, whereas a container would require an image to exist. Thus, containers rely on images and use them to produce a runtime environment for the application to run.</p></li><li><p>Both of these stages are vital phases in the process of running a container. The running container is essentially the &#8220;final phase&#8221; and hence container images are what shapes containers in the way they are.</p></li></ul><p><strong>5. What is a container image registry?</strong></p><ul><li><p>A docker image registry is just a location where container images are kept. Instead of converting apps to containers each time, a dev can use the images stored directly in the registry.</p></li><li><p>The image registry can be public or private, Docker Hub is currently the most popular and well-known public registry.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Pq1x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dedb738-5834-406c-b848-72e92f54aa3a_911x386.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pq1x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dedb738-5834-406c-b848-72e92f54aa3a_911x386.png 424w, https://substackcdn.com/image/fetch/$s_!Pq1x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dedb738-5834-406c-b848-72e92f54aa3a_911x386.png 848w, https://substackcdn.com/image/fetch/$s_!Pq1x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dedb738-5834-406c-b848-72e92f54aa3a_911x386.png 1272w, https://substackcdn.com/image/fetch/$s_!Pq1x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dedb738-5834-406c-b848-72e92f54aa3a_911x386.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pq1x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dedb738-5834-406c-b848-72e92f54aa3a_911x386.png" width="911" height="386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7dedb738-5834-406c-b848-72e92f54aa3a_911x386.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:386,&quot;width&quot;:911,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Pq1x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dedb738-5834-406c-b848-72e92f54aa3a_911x386.png 424w, https://substackcdn.com/image/fetch/$s_!Pq1x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dedb738-5834-406c-b848-72e92f54aa3a_911x386.png 848w, https://substackcdn.com/image/fetch/$s_!Pq1x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dedb738-5834-406c-b848-72e92f54aa3a_911x386.png 1272w, https://substackcdn.com/image/fetch/$s_!Pq1x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dedb738-5834-406c-b848-72e92f54aa3a_911x386.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>6. Is it good practice to run stateful applications on Docker? How can we slightly overcome this problem?</strong></p><ul><li><p>The main issue with stateful applications is that by default they store their state in the containers file-system. Once you want to update your software or move to another machine, it's much harder to retrieve data from there.</p></li><li><p>So to overcome this, you will need to bind a volume to the container and store any data in the volume.</p></li><li><p>Answering this question might be more of a discussion as opposed to a straightforward answer; some may totally be against the idea and some will be for it. As you long as you can address the ephemeral nature of containers then you are good to go.</p></li></ul><p><strong>7. How do containers work at a lower level? (more advanced question)</strong></p><ul><li><p>10/15+ years ago, engineers implemented a new Linux kernel level feature called namespaces (the idea of course existed before this). One of the function of the operating system is to allow sharing of global resources like network and disk. Let&#8217;s assume these global resources were put in a certain namespace so they can only be seen by processes in the same namespace. Let&#8217;s say you wanted to put a chunk of disk memory and put it in namespace A then processes in namespace B cannot see nor access it. This is how isolation is provided for global resources.</p></li><li><p>This is how containers work at a lower level. Each container runs in its own namespace but uses exactly the same kernel as all other containers. The isolation takes place because the kernel knows the namespace that was assigned to the process and when making API calls, it ensures only processes can only access those in their own namespace otherwise it&#8217;s restricted.</p></li></ul><p><strong>8. What are some use-cases for containers?</strong></p><ul><li><p>Containers essentially provides a low overhead to run virtual machines on your local machine or in the cloud.</p></li><li><p>Containers can be used to build test applications, during your deploy process to facilitate for CI (continuous integration) testing</p></li><li><p>Containers can be used to &#8220;lift and shift&#8221; applications into modern cloud architectures</p></li><li><p>To refactor existing applications for containers.</p></li><li><p>To provide better support for microservice architectures. Distributed systems and applications can easily be more isolated, deployed and scaled using individually container building blocks.</p></li><li><p>Easier deployments of repetitive jobs and tasks. Containers are being deployed to support ETL functions or even batch jobs due to their speed and consistency.</p></li></ul><p><strong>9. What is the difference between containers and Kubernetes (container orchestration)?</strong></p><ul><li><p>Docker and Kubernetes are complimentary</p></li><li><p>Docker provides an open standard for packaging and distributing containerised applications</p></li><li><p>Whereas, Kubernetes provides for the orchestration and management of containerised applications.</p></li><li><p>In other words, Kuberenetes provides the infrastructure needed to deploy and run applications built with containers.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r-p0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8af7d208-0ff6-4cc3-a05f-a78ec36f5faa_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r-p0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8af7d208-0ff6-4cc3-a05f-a78ec36f5faa_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!r-p0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8af7d208-0ff6-4cc3-a05f-a78ec36f5faa_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!r-p0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8af7d208-0ff6-4cc3-a05f-a78ec36f5faa_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!r-p0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8af7d208-0ff6-4cc3-a05f-a78ec36f5faa_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r-p0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8af7d208-0ff6-4cc3-a05f-a78ec36f5faa_512x512.png" width="512" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8af7d208-0ff6-4cc3-a05f-a78ec36f5faa_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!r-p0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8af7d208-0ff6-4cc3-a05f-a78ec36f5faa_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!r-p0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8af7d208-0ff6-4cc3-a05f-a78ec36f5faa_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!r-p0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8af7d208-0ff6-4cc3-a05f-a78ec36f5faa_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!r-p0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8af7d208-0ff6-4cc3-a05f-a78ec36f5faa_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">k8s.io</figcaption></figure></div><p><strong>10. What are some best practice considerations when building containers?</strong></p><ul><li><p>Aim to create the smallest image possible. You can do this by starting with minimal base images and using the multi-stage builds</p></li><li><p>Use proper image tags with correct versioning</p></li><li><p>Package a single application per container</p></li><li><p>Use official images and those that are verified by well-known container image registries</p></li><li><p>Optimise caching for image layers when building an image</p></li><li><p>Ensure to use the least privileged user and only permissions that suffice for the task</p></li><li><p>Regularly scanning your image for vulnerabilities</p></li><li><p>Use .dockerignore files. You don&#8217;t need everything in the project to run inside the application.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lkCu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9d8e9da-fb51-4d4a-890f-42bad33bf188_554x336.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lkCu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9d8e9da-fb51-4d4a-890f-42bad33bf188_554x336.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lkCu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9d8e9da-fb51-4d4a-890f-42bad33bf188_554x336.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lkCu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9d8e9da-fb51-4d4a-890f-42bad33bf188_554x336.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lkCu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9d8e9da-fb51-4d4a-890f-42bad33bf188_554x336.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lkCu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9d8e9da-fb51-4d4a-890f-42bad33bf188_554x336.jpeg" width="554" height="336" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9d8e9da-fb51-4d4a-890f-42bad33bf188_554x336.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:336,&quot;width&quot;:554,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!lkCu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9d8e9da-fb51-4d4a-890f-42bad33bf188_554x336.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lkCu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9d8e9da-fb51-4d4a-890f-42bad33bf188_554x336.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lkCu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9d8e9da-fb51-4d4a-890f-42bad33bf188_554x336.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lkCu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9d8e9da-fb51-4d4a-890f-42bad33bf188_554x336.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">image creds: logz.io</figcaption></figure></div><p>These are just some of the questions you may come across. We can go much deeper into containers and there is so much more to know. I hope this has given you a good intro to how they work and what they are like. Watch out for this space for a deeper dive into container works &#9989;</p><p>Until next time, keep learning! &#128515;</p><p><a href="https://github.com/moabukar">https://github.com/moabukar</a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[CoderCo Weekly #3: Linux Course and Amigoscode 🐧 ]]></title><description><![CDATA[Welcome to our CoderCo newsletter, where we keep you updated on the latest and greatest in DevOps, System Design, and Software Engineering!]]></description><link>https://blog.coderco.io/p/coderco-weekly-3-linux-course-and</link><guid isPermaLink="false">https://blog.coderco.io/p/coderco-weekly-3-linux-course-and</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Mon, 07 Aug 2023 11:58:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to our CoderCo newsletter, where we keep you updated on the latest and greatest in DevOps, System Design, and Software Engineering!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s-sJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s-sJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s-sJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!s-sJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>&#128218; This week&#8217;s tech refresher</h2><ol><li><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;fca3704a-94ec-4647-9340-726f6ac32c53&quot;,&quot;caption&quot;:&quot;Introduction Welcome to this comprehensive guide on Linux File Permissions. If you're a Linux user or system administrator, you're likely aware that file permissions are a crucial aspect of your system's security. They dictate who can read, write, and execute files - essentially governing access and control over your files and directories. Understanding how they work can help you maintain a secure and efficient system.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Linux Series EP1: Understanding and Mastering File Permissions&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:128850954,&quot;name&quot;:&quot;Coder Co&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e47ca6e7-f588-4e27-82ae-e2e08b307148_500x500.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-07-10T08:52:41.074Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1a898a-8440-430e-8ffa-3612d0555e6f_1768x1288.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.coderco.io/p/linux-series-ep1-understanding-and&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:132853075,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:5,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;CoderCo&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F364bc992-cd12-43d5-8b4b-bf07d15c1214_500x500.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div></li><li><p><em><strong><a href="https://blog.coderco.io/p/the-role-of-reverse-proxies-in-modern">The Role of Reverse Proxies in Modern System Architecture</a></strong></em></p></li><li><p><em><strong><a href="https://blog.coderco.io/p/a-guide-to-passing-the-kubernetes">A guide to the Kubernetes Trifecta</a></strong></em></p></li><li><p><em><strong><a href="https://blog.coderco.io/p/embarking-on-the-linux-journey-the">Embarking on the Linux Journey</a></strong></em></p></li></ol><p>Thanks for reading CoderCo! Subscribe for free to receive new posts and support my work.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h1><em>&#128293; What&#8217;s new?</em></h1><p>We're excited to share some big news and developments with you. As we strive to bring you the best resources to help you in your tech journey, we've introduced a few new things to the platform.</p><h2><em>1. Amigoscode Collaboration</em></h2><p>We've got some exciting news for you at CoderCo. We've teamed up with our friends over at Amigoscode to bring you something really special&#8212;a fresh collection of DevOps courses! Whether you're just starting out or looking to sharpen your skills, these courses have something for everyone. We've put our heads together to make learning DevOps fun, engaging, and, most importantly, effective. So, what are you waiting for? Dive in and take your tech knowledge to the next level with us. Your next big opportunity might be just a course away!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QM4O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa193a567-e194-4d4f-891d-3e8335584fc6_1563x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QM4O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa193a567-e194-4d4f-891d-3e8335584fc6_1563x1250.png 424w, https://substackcdn.com/image/fetch/$s_!QM4O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa193a567-e194-4d4f-891d-3e8335584fc6_1563x1250.png 848w, https://substackcdn.com/image/fetch/$s_!QM4O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa193a567-e194-4d4f-891d-3e8335584fc6_1563x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!QM4O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa193a567-e194-4d4f-891d-3e8335584fc6_1563x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QM4O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa193a567-e194-4d4f-891d-3e8335584fc6_1563x1250.png" width="1456" height="1164" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a193a567-e194-4d4f-891d-3e8335584fc6_1563x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1164,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QM4O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa193a567-e194-4d4f-891d-3e8335584fc6_1563x1250.png 424w, https://substackcdn.com/image/fetch/$s_!QM4O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa193a567-e194-4d4f-891d-3e8335584fc6_1563x1250.png 848w, https://substackcdn.com/image/fetch/$s_!QM4O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa193a567-e194-4d4f-891d-3e8335584fc6_1563x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!QM4O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa193a567-e194-4d4f-891d-3e8335584fc6_1563x1250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><em>2. &#128039; Linux Course with Amigoscode</em></h2><p>Ready for the first taste of our collaboration with Amigoscode? We're kicking things off with a comprehensive Linux course that's perfect for anyone eager to dive into the world of DevOps. From the basics to advanced functionalities, this course promises to cover it all. And we're inviting you to be a part of this exciting journey. If Linux has been on your learning radar, now's the time to take action. Join the waiting list today and be among the first to embark on this educational adventure with us. The world of Linux is vast and vibrant, and we can't wait to explore it with you!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ENCT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ENCT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 424w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 848w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 1272w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ENCT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png" width="767" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:767,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ENCT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 424w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 848w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 1272w, https://substackcdn.com/image/fetch/$s_!ENCT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22332226-a00b-4ec1-85c8-d45d08a04adb_767x646.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JDX6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JDX6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 424w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 848w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 1272w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JDX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png" width="766" height="421" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:421,&quot;width&quot;:766,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JDX6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 424w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 848w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 1272w, https://substackcdn.com/image/fetch/$s_!JDX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83581f4-b907-4ffc-b7a5-d86447ccbf95_766x421.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong><a href="https://bit.ly/3XLO2g8">Click here to join the course waiting list</a></strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Abie!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb62ffc-022f-49fe-bc1a-2966ae22efb7_1920x961.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Abie!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb62ffc-022f-49fe-bc1a-2966ae22efb7_1920x961.png 424w, https://substackcdn.com/image/fetch/$s_!Abie!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb62ffc-022f-49fe-bc1a-2966ae22efb7_1920x961.png 848w, https://substackcdn.com/image/fetch/$s_!Abie!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb62ffc-022f-49fe-bc1a-2966ae22efb7_1920x961.png 1272w, https://substackcdn.com/image/fetch/$s_!Abie!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb62ffc-022f-49fe-bc1a-2966ae22efb7_1920x961.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Abie!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb62ffc-022f-49fe-bc1a-2966ae22efb7_1920x961.png" width="1456" height="729" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ccb62ffc-022f-49fe-bc1a-2966ae22efb7_1920x961.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:729,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Click here button clipart design illustration 9304135 PNG&quot;,&quot;title&quot;:&quot;Click here button clipart design illustration 9304135 PNG&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Click here button clipart design illustration 9304135 PNG" title="Click here button clipart design illustration 9304135 PNG" srcset="https://substackcdn.com/image/fetch/$s_!Abie!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb62ffc-022f-49fe-bc1a-2966ae22efb7_1920x961.png 424w, https://substackcdn.com/image/fetch/$s_!Abie!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb62ffc-022f-49fe-bc1a-2966ae22efb7_1920x961.png 848w, https://substackcdn.com/image/fetch/$s_!Abie!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb62ffc-022f-49fe-bc1a-2966ae22efb7_1920x961.png 1272w, https://substackcdn.com/image/fetch/$s_!Abie!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fccb62ffc-022f-49fe-bc1a-2966ae22efb7_1920x961.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>3. Tech Interview Series: Containers</h2><p>We're thrilled to give you a sneak peek into our 'Tech Interview Series: Containers' releasing later this week! Containers are revolutionizing the way we develop, deploy, and run applications, and our new series is packed with insights from industry experts, real-world examples, and hands-on guidance in the form of interview questions. </p><p>Whether you're a developer looking to streamline your workflow or a tech enthusiast curious about what containers are all about, this series is for you. Mark your calendars and stay tuned for a deep dive into the world of containers. You won't want to miss it!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CSBu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CSBu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!CSBu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!CSBu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!CSBu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CSBu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png" width="1456" height="1061" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1061,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:272990,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CSBu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!CSBu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!CSBu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!CSBu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F466eeb38-c5e7-4819-9371-feb8aaa90ca9_1768x1288.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That's all for this week's 'What's New' update. We hope you're as excited about these new developments as we are! Stay tuned for more updates and continue to make the most of the resources that CoderCo provides. Happy coding, everyone!</p><h2>&#127919; Follow Us</h2><p>Keep up with us on our social channels for daily tips, resources, and industry insights:</p><ul><li><p><a href="https://www.youtube.com/@coderco">YouTube</a></p></li><li><p><a href="https://www.linkedin.com/company/coderco/">LinkedIn</a></p></li><li><p>Twitter</p></li></ul><div><hr></div><h2>&#128140; Subscribe to Our Newsletter</h2><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">CoderCo is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Linux Series EP2: Basic Linux Commands and Concepts: A Comprehensive Guide to Mastering Linux]]></title><description><![CDATA[Welcome back to our series on mastering Linux!]]></description><link>https://blog.coderco.io/p/linux-series-ep2-basic-linux-commands</link><guid isPermaLink="false">https://blog.coderco.io/p/linux-series-ep2-basic-linux-commands</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Mon, 31 Jul 2023 09:01:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GQIu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome back to our series on mastering Linux! We've already taken you through the intricate world of Linux file permissions in our previous post. Today, we're diving deeper into the Linux command line, exploring essential Linux commands and concepts that will help you navigate, manage, and comprehend the Linux environment effectively.</p><p>In this comprehensive guide, we'll cover not only the basics but also some additional topics that will augment your Linux command-line skills. Our journey will include navigating the Linux filesystem, managing files and directories, understanding processes and jobs, working with text editors, dealing with streams, pipes, redirects, and comprehending environment variables. We'll also touch upon the powerful world of regular expressions and the efficient use of command-line history and shortcuts. So, let's get started!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading CoderCo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GQIu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GQIu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!GQIu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!GQIu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!GQIu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GQIu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png" width="1456" height="1061" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1061,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:618143,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GQIu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!GQIu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!GQIu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!GQIu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c048f73-fdee-41f8-a614-a7a936b8fab1_1768x1288.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Table of Contents</strong></h2><ol><li><p>Navigating the Linux Filesystem</p></li><li><p>Linux File and Directory Management</p></li><li><p>Understanding Linux Processes and Jobs</p></li><li><p>Using Text Editors: Vi/Vim, Nano, Emacs</p></li><li><p>Working with Streams, Pipes, and Redirects</p></li><li><p>Understanding Environment Variables</p></li><li><p>Introduction to Regular Expressions</p></li><li><p>Efficient Use of Command-Line History and Shortcuts</p></li><li><p>Conclusion</p></li></ol><h2><strong>Navigating the Linux Filesystem</strong></h2><p>Every Linux user must master the art of navigating the filesystem. Remember, Linux employs a hierarchical directory structure. At the apex is the root directory, denoted as '/'. Every other directory branches out from the root, just like a tree.</p><p>Here are some basic commands for navigating this structure:</p><ul><li><p><code>pwd</code>: 'Print Working Directory'. It displays the current directory you're located in.</p></li><li><p><code>cd</code>: 'Change Directory'. This command allows you to move to a different directory. For example, <code>cd /home</code> will take you to the 'home' directory.</p></li><li><p><code>ls</code>: 'List'. It lists the contents of a directory. By using <code>ls -l</code>, you get a long listing format that includes additional details such as permissions, number of links, owner, group, size, and time of last modification.</p></li></ul><p>Think of these commands as your compass in the vast world of the Linux filesystem.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lj2r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f12648-defb-40d4-ac6c-e14e561ebe23_1768x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lj2r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f12648-defb-40d4-ac6c-e14e561ebe23_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!lj2r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f12648-defb-40d4-ac6c-e14e561ebe23_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!lj2r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f12648-defb-40d4-ac6c-e14e561ebe23_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!lj2r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f12648-defb-40d4-ac6c-e14e561ebe23_1768x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lj2r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f12648-defb-40d4-ac6c-e14e561ebe23_1768x1288.png" width="1456" height="1061" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4f12648-defb-40d4-ac6c-e14e561ebe23_1768x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1061,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:130979,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lj2r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f12648-defb-40d4-ac6c-e14e561ebe23_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!lj2r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f12648-defb-40d4-ac6c-e14e561ebe23_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!lj2r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f12648-defb-40d4-ac6c-e14e561ebe23_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!lj2r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f12648-defb-40d4-ac6c-e14e561ebe23_1768x1288.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>Linux File and Directory Management</strong></h2><p>Efficient file and directory management are key to being productive in Linux. Here are the key commands you should know:</p><ul><li><p><code>mkdir</code>: 'Make Directory'. It creates a new directory. For instance, <code>mkdir newDir</code> will create a directory called 'newDir'.</p></li><li><p><code>touch</code>: This command is used to create a new empty file. For example, <code>touch newFile</code> will create an empty file named 'newFile'.</p></li><li><p><code>cp</code>: 'Copy'. This command copies files or directories. For example, <code>cp sourceFile destinationFile</code> will create a copy of 'sourceFile' named 'destinationFile'.</p></li><li><p><code>mv</code>: 'Move'. It can move files or directories, but it's also used to rename them. For example, <code>mv oldName newName</code> will rename the file 'oldName' to 'newName'.</p></li><li><p><code>rm</code>: 'Remove'. This command deletes files or directories. Be careful when using this command, especially with the <code>r</code> (recursive) option, as it deletes files and directories permanently.</p></li></ul><p>To understand the structure and type of files, you can use the <code>file</code> command, which classifies a file's content. For instance, <code>file myFile.txt</code> will tell you that myFile.txt is a text file.</p><p>To search for files, use the <code>find</code> command. For instance, <code>find /home -name myfile.txt</code> will search for myfile.txt within the /home directory and its subdirectories.</p><h2><strong>Understanding Linux Processes and Jobs</strong></h2><p>A running program is termed a 'process' in Linux. Each process has a unique identification number or a process ID (PID). Here are some important commands:</p><ul><li><p><code>ps</code> (Process Status): Provides information about the currently running processes.</p></li><li><p><code>top</code> or <code>htop</code>: These commands give a real-time, dynamic view of all running processes.</p></li><li><p><code>bg</code> (Background): This command resumes paused jobs and runs them in the background.</p></li><li><p><code>fg</code> (Foreground): This command brings a background job to the foreground.</p></li><li><p><code>kill</code>: This command terminates a process. For example, <code>kill PID</code> will terminate the process with the given PID.</p></li></ul><p>To monitor the system's performance and resource usage, you can use the <code>vmstat</code>, <code>iostat</code>, and <code>netstat</code> commands. These tools give you insights into memory, CPU, IO, and network usage, respectively.</p><h2><strong>Using Text Editors: Vi/Vim, Nano, Emacs</strong></h2><p>Text editors are an integral part of any Linux setup. Let's get acquainted with three popular text editors: Vi/Vim, Nano, and Emacs. We'll also briefly touch on some more advanced editors like Sublime Text and Atom.</p><h3><strong>Vi/Vim</strong></h3><p>Vi (Visual) is a text editor that comes with most Unix-based systems. Vim (Vi Improved) is an extended version of Vi with additional features. Here are some basic Vim commands:</p><ul><li><p><code>vim filename</code>: Opens a file in Vim. If the file doesn't exist, it creates a new one.</p></li><li><p><code>i</code>: Switches to insert mode for typing text.</p></li><li><p><code>:w</code>: Saves changes.</p></li><li><p><code>:q</code>: Quits Vim. Use <code>:q!</code> to quit without saving changes.</p></li><li><p><code>:wq</code> or <code>ZZ</code>: Saves changes and then quits Vim.</p></li></ul><h3><strong>Nano</strong></h3><p>Nano is a user-friendly text editor perfect for beginners.</p><ul><li><p><code>nano filename</code>: Opens a file in Nano. If the file doesn't exist, it creates a new one.</p></li><li><p><code>Ctrl+O</code>: Saves changes.</p></li><li><p><code>Ctrl+X</code>: Exits Nano. If there are unsaved changes, it prompts you to save them before exiting.</p></li></ul><h3><strong>Emacs</strong></h3><p>Emacs is a versatile working environment. It's much more than a text editor, providing tools like a mail client, news reader, calendar, and more.</p><ul><li><p><code>emacs filename</code>: Opens a file in Emacs. If the file doesn't exist, it creates a new one.</p></li><li><p><code>Ctrl+X Ctrl+S</code>: Saves changes.</p></li><li><p><code>Ctrl+X Ctrl+C</code>: Exits Emacs.</p></li></ul><p>Sublime Text and Atom are other powerful editors with graphical interfaces, boasting features like multiple cursors, a minimap, highly customizable interface, etc. They don't come pre-installed with Linux distributions but can be easily downloaded and installed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8shu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cc680a7-2c5f-4888-b1dc-570285e84b57_569x402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8shu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cc680a7-2c5f-4888-b1dc-570285e84b57_569x402.png 424w, https://substackcdn.com/image/fetch/$s_!8shu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cc680a7-2c5f-4888-b1dc-570285e84b57_569x402.png 848w, https://substackcdn.com/image/fetch/$s_!8shu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cc680a7-2c5f-4888-b1dc-570285e84b57_569x402.png 1272w, https://substackcdn.com/image/fetch/$s_!8shu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cc680a7-2c5f-4888-b1dc-570285e84b57_569x402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8shu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cc680a7-2c5f-4888-b1dc-570285e84b57_569x402.png" width="569" height="402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4cc680a7-2c5f-4888-b1dc-570285e84b57_569x402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:402,&quot;width&quot;:569,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:248007,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8shu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cc680a7-2c5f-4888-b1dc-570285e84b57_569x402.png 424w, https://substackcdn.com/image/fetch/$s_!8shu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cc680a7-2c5f-4888-b1dc-570285e84b57_569x402.png 848w, https://substackcdn.com/image/fetch/$s_!8shu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cc680a7-2c5f-4888-b1dc-570285e84b57_569x402.png 1272w, https://substackcdn.com/image/fetch/$s_!8shu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cc680a7-2c5f-4888-b1dc-570285e84b57_569x402.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>Working with Streams, Pipes, and Redirects</strong></h2><p>Linux uses the concepts of streams, pipes, and redirects to handle how programs read input and write output. Let's break these concepts down:</p><ul><li><p><strong>Streams</strong> are sources of data. There are three standard streams: stdin (standard input, usually from the keyboard), stdout (standard output, usually to the terminal), and stderr (standard error, for error messages, also usually to the terminal).</p></li><li><p><strong>Pipes (</strong><code>|</code>) allow you to take the output from one command and use it as the input to another. For example, <code>ls -l | grep txt</code> will list detailed directory contents and then search for lines containing 'txt'.</p></li><li><p><strong>Redirects</strong> are used to send the output from a command to a file instead of the terminal. The <code>&gt;</code> symbol sends stdout to a file, overwriting any existing content, while <code>&gt;&gt;</code> appends stdout to the file. The <code>2&gt;</code> symbol redirects stderr. For example, <code>ls -l &gt; output.txt</code> saves the detailed directory listing to a file named 'output.txt'.</p></li></ul><p>Understanding these concepts is crucial for creating complex command pipelines and managing program outputs effectively.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vgB1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc5d8d8-dedd-4a50-ae29-94044786462f_669x213.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vgB1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc5d8d8-dedd-4a50-ae29-94044786462f_669x213.png 424w, https://substackcdn.com/image/fetch/$s_!vgB1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc5d8d8-dedd-4a50-ae29-94044786462f_669x213.png 848w, https://substackcdn.com/image/fetch/$s_!vgB1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc5d8d8-dedd-4a50-ae29-94044786462f_669x213.png 1272w, https://substackcdn.com/image/fetch/$s_!vgB1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc5d8d8-dedd-4a50-ae29-94044786462f_669x213.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vgB1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc5d8d8-dedd-4a50-ae29-94044786462f_669x213.png" width="669" height="213" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8bc5d8d8-dedd-4a50-ae29-94044786462f_669x213.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:213,&quot;width&quot;:669,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62245,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vgB1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc5d8d8-dedd-4a50-ae29-94044786462f_669x213.png 424w, https://substackcdn.com/image/fetch/$s_!vgB1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc5d8d8-dedd-4a50-ae29-94044786462f_669x213.png 848w, https://substackcdn.com/image/fetch/$s_!vgB1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc5d8d8-dedd-4a50-ae29-94044786462f_669x213.png 1272w, https://substackcdn.com/image/fetch/$s_!vgB1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc5d8d8-dedd-4a50-ae29-94044786462f_669x213.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><h2><strong>Understanding Environment Variables</strong></h2><p>Environment variables store information about the system environment and the shell session. Some common environment variables are <code>$HOME</code>, <code>$PATH</code>, <code>$USER</code>, and <code>$SHELL</code>. You can create your own environment variables using the <code>export</code> command. To see all environment variables, use the <code>env</code> or <code>printenv</code> command.</p><p>You can also create your own environment variables. For example, <code>export VARNAME="value"</code> creates a new environment variable named 'VARNAME' with the value 'value'. These custom variables are only available for the current session. To make them persistent, you need to add the export command to your shell's configuration file (like <code>.bashrc</code> or <code>.bash_profile</code>).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zqR8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf1a8cf-1ddc-4348-9d58-59417c1c45f5_539x404.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zqR8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf1a8cf-1ddc-4348-9d58-59417c1c45f5_539x404.png 424w, https://substackcdn.com/image/fetch/$s_!zqR8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf1a8cf-1ddc-4348-9d58-59417c1c45f5_539x404.png 848w, https://substackcdn.com/image/fetch/$s_!zqR8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf1a8cf-1ddc-4348-9d58-59417c1c45f5_539x404.png 1272w, https://substackcdn.com/image/fetch/$s_!zqR8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf1a8cf-1ddc-4348-9d58-59417c1c45f5_539x404.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zqR8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf1a8cf-1ddc-4348-9d58-59417c1c45f5_539x404.png" width="539" height="404" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbf1a8cf-1ddc-4348-9d58-59417c1c45f5_539x404.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:404,&quot;width&quot;:539,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39655,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zqR8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf1a8cf-1ddc-4348-9d58-59417c1c45f5_539x404.png 424w, https://substackcdn.com/image/fetch/$s_!zqR8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf1a8cf-1ddc-4348-9d58-59417c1c45f5_539x404.png 848w, https://substackcdn.com/image/fetch/$s_!zqR8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf1a8cf-1ddc-4348-9d58-59417c1c45f5_539x404.png 1272w, https://substackcdn.com/image/fetch/$s_!zqR8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf1a8cf-1ddc-4348-9d58-59417c1c45f5_539x404.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>Introduction to Regular Expressions</strong></h2><p>Regular expressions, also known as regex or regexp, are a powerful tool for matching patterns in text. This capability can be extensively used in a variety of Linux commands, including <code>grep</code>, <code>sed</code>, <code>awk</code>, and many more. In fact, the practical applications of regex in Linux are virtually endless.</p><h3><strong>The Power of Regex</strong></h3><p>In the simplest terms, regular expressions are a sequence of characters that form a search pattern. This pattern can be used to match, locate, and manage text. Regular expressions can be simple, such as searching for a specific word, or they can be complex, like finding an email address within a text.</p><p>To truly appreciate the power of regex, let's dive deeper into its usage in several commonly used Linux commands.</p><h3><strong>Using Regex with </strong><code>grep</code></h3><p>The <code>grep</code> command, which stands for 'Global Regular Expression Print,' is one of the most common commands used with regex. This command searches for a pattern in a file (or input from a pipeline) and prints the matching lines.</p><p>For example, the command <code>grep 'tex*' file.txt</code> will search for the word 'tex' followed by any characters in <code>file.txt</code>.</p><p>But regex offers so much more than just simple pattern matching. Let's examine some useful regex expressions that can be used with <code>grep</code>:</p><ul><li><p><code>grep '^tex' file.txt</code>: This command will match lines that start with 'tex'.</p></li><li><p><code>grep 'tex$' file.txt</code>: This command will match lines that end with 'tex'.</p></li><li><p><code>grep '[Tt]ex' file.txt</code>: This command will match lines that contain either 'Tex' or 'tex'.</p></li><li><p><code>grep 't.x' file.txt</code>: This command will match lines that contain 't', followed by any character, followed by 'x'.</p></li></ul><h3><strong>Using Regex with </strong><code>sed</code></h3><p>The <code>sed</code> command (stream editor) is another command where regex plays a significant role. It can perform a lot of functions on file data like searching, find and replace, insertion, and deletion.</p><p>For instance, you can use <code>sed</code> with regex to perform find and replace operations:</p><ul><li><p><code>sed 's/tex/Test/' file.txt</code>: This command will replace the first occurrence of 'tex' with 'Test' in each line.</p></li><li><p><code>sed 's/tex/Test/g' file.txt</code>: This command will replace all occurrences of 'tex' with 'Test'.</p></li></ul><h3><strong>Using Regex with </strong><code>awk</code></h3><p><code>awk</code> is a scripting language used for manipulating data and generating reports. The <code>awk</code> command programming language requires no compiling, and allows the user to use variables, numeric functions, string functions, and logical operators.</p><p><code>awk</code> uses regex for pattern matching. For instance, <code>awk '/tex/ {print}' file.txt</code> will print the lines from <code>file.txt</code> that match the pattern 'tex'.</p><h3><strong>Regex Special Characters and Sequences</strong></h3><p>Regular expressions use several special characters and sequences for matching patterns:</p><ul><li><p><code>.</code>: Matches any single character.</p></li><li><p><strong>``</strong>: Matches zero or more of the preceding character or group.</p></li><li><p><code>+</code>: Matches one or more of the preceding character or group.</p></li><li><p><code>?</code>: Matches zero or one of the preceding character or group.</p></li><li><p><code>^</code>: Matches the beginning of a line.</p></li><li><p><code>$</code>: Matches the end of a line.</p></li><li><p><code>[abc]</code>: Matches any character enclosed in the square brackets.</p></li><li><p><code>[^abc]</code>: Matches any character not enclosed in the square brackets.</p></li><li><p><code>{n}</code>: Matches exactly 'n' consecutive instances of the preceding character or group.</p></li><li><p><code>{n,m}</code>: Matches between 'n' and 'm' instances of the preceding character or group.</p></li><li><p><code>\\</code>: Escapes the following character, allowing you to match special characters like **<code>.</code>**or <strong>``</strong>.</p></li></ul><p>For example:</p><ul><li><p><code>a.b</code> will match 'acb', 'aab', 'adb', etc., but not 'ab' or 'aabb'.</p></li><li><p><code>a*</code> will match '', 'a', 'aa', 'aaa', etc.</p></li><li><p><code>a+</code> will match 'a', 'aa', 'aaa', etc., but not ''.</p></li><li><p><code>a?</code> will match '' and 'a', but not 'aa'.</p></li><li><p><code>^abc</code> will match any line that starts with 'abc'.</p></li><li><p><code>abc$</code> will match any line that ends with 'abc'.</p></li><li><p><code>[abc]</code> will match any of 'a', 'b', or 'c'.</p></li><li><p><code>[^abc]</code> will match any character that is not 'a', 'b', or 'c'.</p></li><li><p><code>a{3}</code> will match 'aaa', but not 'aa' or 'aaaa'.</p></li><li><p><code>a{2,4}</code> will match 'aa', 'aaa', and 'aaaa', but not 'a' or 'aaaaa'.</p></li></ul><p>Regular expressions can get complex, and mastering them requires practice. A good strategy is to start with simple patterns and gradually move on to more complex ones as you become more comfortable.</p><p>Regular expressions are an extremely powerful tool in Linux. While the learning curve might be steep, the benefits in terms of text processing capabilities are immense. Even learning the basics can dramatically increase your efficiency in handling and manipulating text in Linux. So take your time, practice, and before you know it, you'll be wielding regular expressions like a pro.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YPPn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb126c7b-0220-412d-b749-2e5b60f725f0_539x404.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YPPn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb126c7b-0220-412d-b749-2e5b60f725f0_539x404.png 424w, https://substackcdn.com/image/fetch/$s_!YPPn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb126c7b-0220-412d-b749-2e5b60f725f0_539x404.png 848w, https://substackcdn.com/image/fetch/$s_!YPPn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb126c7b-0220-412d-b749-2e5b60f725f0_539x404.png 1272w, https://substackcdn.com/image/fetch/$s_!YPPn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb126c7b-0220-412d-b749-2e5b60f725f0_539x404.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YPPn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb126c7b-0220-412d-b749-2e5b60f725f0_539x404.png" width="539" height="404" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb126c7b-0220-412d-b749-2e5b60f725f0_539x404.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:404,&quot;width&quot;:539,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39655,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YPPn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb126c7b-0220-412d-b749-2e5b60f725f0_539x404.png 424w, https://substackcdn.com/image/fetch/$s_!YPPn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb126c7b-0220-412d-b749-2e5b60f725f0_539x404.png 848w, https://substackcdn.com/image/fetch/$s_!YPPn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb126c7b-0220-412d-b749-2e5b60f725f0_539x404.png 1272w, https://substackcdn.com/image/fetch/$s_!YPPn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb126c7b-0220-412d-b749-2e5b60f725f0_539x404.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>Efficient Use of Command-Line History and Shortcuts</strong></h2><p>Efficiency is key when you're working in a Linux environment. Here are some tips to boost your productivity:</p><ul><li><p><strong>Command-Line History</strong>: You can press the up and down arrow keys to cycle through previously executed commands. Also, you can use the <code>history</code> command to display a list of previously executed commands.</p></li><li><p><strong>Searching Through History</strong>: Press <code>Ctrl+R</code> and start typing to search through the command history.</p></li><li><p><strong>Command-Line Shortcuts</strong>: There are numerous shortcuts that can save you time, such as <code>Ctrl+C</code> to terminate a command, <code>Ctrl+Z</code> to suspend a command, <code>Ctrl+A</code> to go to the beginning of the line, and <code>Ctrl+E</code> to go to the end of the line.</p></li></ul><p>Mastering these shortcuts can significantly improve your speed and efficiency when working with the Linux command line.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rWHD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba4f5ba8-e4de-422f-9654-4f985db542be_605x238.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rWHD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba4f5ba8-e4de-422f-9654-4f985db542be_605x238.png 424w, https://substackcdn.com/image/fetch/$s_!rWHD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba4f5ba8-e4de-422f-9654-4f985db542be_605x238.png 848w, https://substackcdn.com/image/fetch/$s_!rWHD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba4f5ba8-e4de-422f-9654-4f985db542be_605x238.png 1272w, https://substackcdn.com/image/fetch/$s_!rWHD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba4f5ba8-e4de-422f-9654-4f985db542be_605x238.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rWHD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba4f5ba8-e4de-422f-9654-4f985db542be_605x238.png" width="605" height="238" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba4f5ba8-e4de-422f-9654-4f985db542be_605x238.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:238,&quot;width&quot;:605,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48925,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rWHD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba4f5ba8-e4de-422f-9654-4f985db542be_605x238.png 424w, https://substackcdn.com/image/fetch/$s_!rWHD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba4f5ba8-e4de-422f-9654-4f985db542be_605x238.png 848w, https://substackcdn.com/image/fetch/$s_!rWHD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba4f5ba8-e4de-422f-9654-4f985db542be_605x238.png 1272w, https://substackcdn.com/image/fetch/$s_!rWHD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba4f5ba8-e4de-422f-9654-4f985db542be_605x238.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h1><strong>Conclusion</strong></h1><p>Mastering the Linux command line is an ongoing journey. The knowledge we've shared in this post will empower you to navigate and manipulate the Linux filesystem, understand processes and jobs, work with a variety of text editors, deal with streams, pipes, and redirects, and comprehend environment variables. Moreover, we've introduced you to the powerful world of regular expressions and shared some productivity tips for efficient use of command-line history and shortcuts.</p><p>Remember that Linux is an extremely powerful tool. As with any tool, it takes practice to become proficient. Don't hesitate to experiment with these commands and concepts. As you gain familiarity, you'll find that you're able to achieve more with less effort and in less time.</p><p>In our next blog post, we'll continue our exploration into the fascinating world of Linux. Stay tuned for more informative and engaging content!</p><p>Till then, keep learning, keep experimenting, and enjoy your journey through the exciting world of Linux!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.coderco.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading CoderCo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Mastering the Top Coding Patterns for FAANG Interviews]]></title><description><![CDATA[Welcome to the best guide on Mastering the Top Coding Patterns for FAANG Interviews!]]></description><link>https://blog.coderco.io/p/mastering-the-top-coding-patterns</link><guid isPermaLink="false">https://blog.coderco.io/p/mastering-the-top-coding-patterns</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Fri, 28 Jul 2023 14:16:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HvqO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the best guide on Mastering the Top Coding Patterns for FAANG Interviews! </p><p>After receiving multiple offers from esteemed companies like Apple, Citadel, JP Morgan, Google, Trainline, SkyScanner, OVO, HSBC, and Amazon, I couldn't wait to share the key factor that made it all possible!</p><p><strong>Coding patterns. </strong></p><p>All software engineers should learn coding patterns like Sliding Window, Two Pointers, Two Heaps, and more. Whether you're a beginner or seasoned coder, these patterns will empower you to tackle complex problems with confidence and precision. Let's dive in and discover the key to success in FAANG interviews!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HvqO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HvqO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!HvqO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!HvqO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!HvqO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HvqO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png" width="1456" height="1061" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1061,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HvqO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!HvqO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!HvqO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!HvqO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd2d3aff-a80e-458a-abf7-9edacb7d2e1b_1768x1288.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>What is LeetCode? </h4><p>Before discussing coding patterns, it&#8217;s probably best to familiarise yourself with Leetcode. This is the largest repository of coding problems, containing more than 2,000 questions. Each question on LeetCode can be tagged with one or more topics. These topics fall into categories like Data Structures (e.g., Array, HashTable, Tree), Algorithmic Techniques (e.g., Greedy, Divide and Conquer, Sorting), or Coding Patterns (e.g., Sliding Window, Depth First Search, Topological Sort). </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vBEp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d2585b-ef1f-4fc8-8d31-a528cf353657_600x302.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vBEp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d2585b-ef1f-4fc8-8d31-a528cf353657_600x302.png 424w, https://substackcdn.com/image/fetch/$s_!vBEp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d2585b-ef1f-4fc8-8d31-a528cf353657_600x302.png 848w, https://substackcdn.com/image/fetch/$s_!vBEp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d2585b-ef1f-4fc8-8d31-a528cf353657_600x302.png 1272w, https://substackcdn.com/image/fetch/$s_!vBEp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d2585b-ef1f-4fc8-8d31-a528cf353657_600x302.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vBEp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d2585b-ef1f-4fc8-8d31-a528cf353657_600x302.png" width="600" height="302" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31d2585b-ef1f-4fc8-8d31-a528cf353657_600x302.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:302,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;60 LeetCode problems to solve for coding interview | by Kohei Arai | Medium&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="60 LeetCode problems to solve for coding interview | by Kohei Arai | Medium" title="60 LeetCode problems to solve for coding interview | by Kohei Arai | Medium" srcset="https://substackcdn.com/image/fetch/$s_!vBEp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d2585b-ef1f-4fc8-8d31-a528cf353657_600x302.png 424w, https://substackcdn.com/image/fetch/$s_!vBEp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d2585b-ef1f-4fc8-8d31-a528cf353657_600x302.png 848w, https://substackcdn.com/image/fetch/$s_!vBEp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d2585b-ef1f-4fc8-8d31-a528cf353657_600x302.png 1272w, https://substackcdn.com/image/fetch/$s_!vBEp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31d2585b-ef1f-4fc8-8d31-a528cf353657_600x302.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Here is the distribution of topics for LeetCode questions:</strong></p><ul><li><p>Array: 1142 problems</p></li><li><p>String: 549 problems</p></li><li><p>Hash Table: 392 problems</p></li><li><p>Tree: 191 problems</p></li><li><p>Matrix: 171 problems</p></li><li><p>Stack: 128 problems</p></li><li><p>Heap or Priority Queue: 107 problems</p></li><li><p>Graph: 102 problems</p></li><li><p>Linked List: 69 problems</p></li><li><p>Trie: 44 problems</p></li></ul><h4>Best Coding Patterns with Highest ROI (with Examples):</h4><p>Coding patterns are techniques that are widely used in solving various coding problems. By recognising and mastering these patterns, you'll be able to quickly identify the approach to tackle a problem and map it to an existing one, drastically boosting your problem-solving skills.</p><p>Below, we will cover some coding patterns and will provide examples for each.</p><p><strong>Sliding Window Pattern: </strong></p><p>This pattern is particularly useful when it comes to dealing with subarray or substring problems. It involves maintaining a "window" over a given sequence and efficiently processing each element within that window. </p><p>Imagine you&#8217;re in an interview, and you&#8217;ve been asked to find the maximum sum of any contiguous subarray of length K, when given an array of numbers. In other words, in this list of numbers, what is the maximum sublist (and sublist here means that numbers must come one after another). </p><p>How would you solve this?<br><br>This is where the sliding window pattern comes in. </p><pre><code>function maxSumSubarray(arr, K) {
  let windowSum = 0;
  let maxSum = 0;

  for (let i = 0; i &lt; arr.length; i++) {
    windowSum += arr[i];

    if (i &gt;= K - 1) {
      maxSum = Math.max(maxSum, windowSum);
      windowSum -= arr[i - (K - 1)];
    }
  }

  return maxSum;
}</code></pre><p><strong>Two Pointers Pattern: </strong></p><p>The Two Pointers pattern is an efficient approach used with sorted arrays or linked lists. It involves maintaining two pointers that move towards each other to find a solution or satisfy a given condition. This pattern is used for things like removing duplicates, finding intersection of sorted arrays and finding sub arrays.</p><p>Let&#8217;s see an example.</p><p>The first exercise on Leetcode&#8217;s  website introduces the two sum problem. This question states: &#8220;Given a sorted array, find if there are two elements that add up to your target&#8221;. We can solve this using the Two Sum pattern by doing the following:</p><pre><code>function hasTwoSum(arr, target) {
  let left = 0;
  let right = arr.length - 1;

  while (left &lt; right) {
    const sum = arr[left] + arr[right];

    if (sum === target) {
      return true;
    } else if (sum &lt; target) {
      left++;
    } else {
      right--;
    }
  }

  return false;
}</code></pre><p><strong>Tree and Graph Breadth First Search (Queue, Subsets, Matrix Traversal, Topological Sort):</strong></p><p>The Breadth First Search (BFS) is another powerful technique used for tree and graph problems. It explores all the vertices at the present depth before moving on to the next level. BFS is also applied to problems like finding subsets, matrix traversal, and topological sorting. </p><p>It can also be applied to shortest path finding (finding shortest path between two vertices in an unweighted graph), social networking (finding connections between users or determining the degrees of separation between two individuals), garbage collection etc.</p><p>Let&#8217;s see an example!<br><br>Given a binary tree, return its level order traversal as an array of arrays. </p><pre><code>class TreeNode {
  constructor(val) {
    this.val = val;
    this.left = this.right = null;
  }
}

function levelOrderTraversal(root) {
  if (!root) {
    return [];
  }

  const result = [];
  const queue = [root];

  while (queue.length &gt; 0) {
    const levelSize = queue.length;
    const currentLevel = [];

    for (let i = 0; i &lt; levelSize; i++) {
      const node = queue.shift();
      currentLevel.push(node.val);

      if (node.left) {
        queue.push(node.left);
      }
      if (node.right) {
        queue.push(node.right);
      }
    }

    result.push(currentLevel);
  }

  return result;
}

const root = new TreeNode(3);
root.left = new TreeNode(9);
root.right = new TreeNode(20);
root.right.left = new TreeNode(15);
root.right.right = new TreeNode(7);

console.log(levelOrderTraversal(root)); // Output: [[3], [9, 20], [15, 7]]
</code></pre><p><strong>Binary Search (Arrays):</strong></p><p>Binary Search is an efficient technique used to find a specific element in a sorted array. It divides the search space in half by repeatedly comparing the middle element with the target value. </p><p>This pattern is typically used for searching in sorted lists, finding upper or lower bounds of a list, divide and conquer algorithms and much more!</p><p>Let&#8217;s see this in action.</p><p>Given a sorted array, find the index of a target element. If the target is not found, return -1.</p><pre><code>function binarySearch(arr, target) {
  let left = 0;
  let right = arr.length - 1;

  while (left &lt;= right) {
    const mid = Math.floor((left + right) / 2);

    if (arr[mid] === target) {
      return mid;
    } else if (arr[mid] &lt; target) {
      left = mid + 1;
    } else {
      right = mid - 1;
    }
  }

  return -1;
}

const sortedArr = [2, 5, 8, 12, 16, 23, 38, 45];
const target = 16;

console.log(binarySearch(sortedArr, target)); // Output: 4
</code></pre><h4>Conclusion</h4><p>In conclusion, to ace programming interviews, it is crucial to practice LeetCode-type problems using coding patterns, undertake the Blind 75 Leetcode challenge, stick to one language, and solve real-world coding challenges. </p><p>In the world of programming interviews, preparing smartly and mastering problem patterns is the key to success. </p><p>Stay consistent, solve real-world challenges, and embrace the journey of growth. You've got this! Keep coding and shining brightly in your coding interviews! <br><br><strong>Links: <br></strong><a href="https://leetcode.com/discuss/general-discussion/460599/blind-75-leetcode-questions">Blind 75 Questions</a></p><p><a href="https://codingchallenges.substack.com/">Real World Coding Challenges </a></p><p><a href="https://amigoscode.com/p/linux">Special: Linux Course Pre-Launch</a></p>]]></content:encoded></item><item><title><![CDATA[CoderCo Weekly #2: Tech Interview Series 💻]]></title><description><![CDATA[Welcome to our CoderCo newsletter, where we keep you updated on the latest and greatest in DevOps, System Design, and Software Engineering!]]></description><link>https://blog.coderco.io/p/coderco-weekly-2-tech-interview-series</link><guid isPermaLink="false">https://blog.coderco.io/p/coderco-weekly-2-tech-interview-series</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Mon, 24 Jul 2023 12:01:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to our CoderCo newsletter, where we keep you updated on the latest and greatest in DevOps, System Design, and Software Engineering!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s-sJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s-sJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s-sJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:249459,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!s-sJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 424w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 848w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 1272w, https://substackcdn.com/image/fetch/$s_!s-sJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba0e0c6c-2971-4fd3-918b-4625ad878198_2560x1440.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>&#128218; This week&#8217;s tech refresher</h2><ol><li><p><strong><a href="https://blog.coderco.io/p/tech-interview-series-devops-part">Tech Interview Series #1 - DevOps</a></strong></p></li><li><p><strong><a href="https://blog.coderco.io/p/2af">What happens when you type a URL into your browser? </a></strong></p></li><li><p><strong><a href="https://blog.coderco.io/p/understanding-http-the-backbone-of">Understanding HTTP: The backbone of the internet</a></strong></p></li><li><p><strong><a href="https://blog.coderco.io/p/simple-4-step-guide-to-land-any-software">How to land any software engineering role in 2023</a></strong></p></li></ol><p>Thanks for reading CoderCo! Subscribe for free to receive new posts and support my work.</p><h2>&#128293; What&#8217;s new?</h2><p>We're excited to share some big news and developments with you. As we strive to bring you the best resources to help you in your tech journey, we've introduced a few new things to the platform.</p><h2><strong>Introducing Tech Interview Series:</strong></h2><p>With the recent layoffs, we&#8217;d like to provide all engineers across the industry the best chance to bounce back and land their next role. We'll be sharing in-depth, user-friendly blogs on<strong> Tech Interviews</strong>. We will have two subcategories for this series: DevOps and Software. </p><p><strong>This week's blog is on "Tech Interview Series (Software) #1: Top Coding Patterns for FAANG Interviews"</strong>. </p><p>This amazing guide will take you through powerful data structures and algorithms, breaking them down into digestible components. With practical coding examples, you&#8217;ll learn how to map any problem to familiar territory, empowering you for your next coding interview. This blog will have everything you need to conquer your next big tech interview! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fRdw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fRdw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!fRdw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!fRdw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!fRdw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fRdw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png" width="1456" height="1061" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1061,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fRdw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png 424w, https://substackcdn.com/image/fetch/$s_!fRdw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png 848w, https://substackcdn.com/image/fetch/$s_!fRdw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png 1272w, https://substackcdn.com/image/fetch/$s_!fRdw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07f8b1b8-d546-4cb4-9038-db7131bffa67_1768x1288.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Thanks for reading CoderCo! Subscribe for free to receive new posts and support my work.</p><p>That's all for this week's 'What's New' update. We hope you're as excited about these new developments as we are! Stay tuned for more updates and continue to make the most of the resources that CoderCo provides. Happy coding, everyone!</p><h2>&#127919; Follow Us</h2><p>Keep up with us on our social channels for daily tips, resources, and industry insights:</p><ul><li><p><a href="https://www.youtube.com/@coderco">YouTube</a></p></li><li><p><a href="https://www.linkedin.com/company/coderco/">LinkedIn</a></p></li><li><p>Twitter</p></li></ul><h2>&#128140; Subscribe to Our Newsletter</h2><p>Not a subscriber yet? Click&nbsp;here to subscribe and never miss an update from CoderCo!</p>]]></content:encoded></item><item><title><![CDATA[Tech Interview Series (DevOps) Part 1: Linux]]></title><description><![CDATA[A series of technical interview questions brought to you by DevOps Engineers.]]></description><link>https://blog.coderco.io/p/tech-interview-series-devops-part</link><guid isPermaLink="false">https://blog.coderco.io/p/tech-interview-series-devops-part</guid><dc:creator><![CDATA[Coder Co]]></dc:creator><pubDate>Wed, 19 Jul 2023 11:01:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-W0x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Linux is popular among other individuals in Tech because (in simple terms) it is fast and powerful. If you want to be a well-grounded DevOps/Cloud Engineer or even a Linux System Admin, these are some of the most underrated commands yet so powerful &#8212; you can test your Linux skills here. I have lately been conducting many interviews and here are some or close to some of the interview questions I would ask an individual to test their Linux knowledge.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qBm2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2d73455-cb6c-450f-9b75-158b4972f930_295x278.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qBm2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2d73455-cb6c-450f-9b75-158b4972f930_295x278.png 424w, https://substackcdn.com/image/fetch/$s_!qBm2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2d73455-cb6c-450f-9b75-158b4972f930_295x278.png 848w, https://substackcdn.com/image/fetch/$s_!qBm2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2d73455-cb6c-450f-9b75-158b4972f930_295x278.png 1272w, https://substackcdn.com/image/fetch/$s_!qBm2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2d73455-cb6c-450f-9b75-158b4972f930_295x278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qBm2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2d73455-cb6c-450f-9b75-158b4972f930_295x278.png" width="295" height="278" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2d73455-cb6c-450f-9b75-158b4972f930_295x278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:278,&quot;width&quot;:295,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!qBm2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2d73455-cb6c-450f-9b75-158b4972f930_295x278.png 424w, https://substackcdn.com/image/fetch/$s_!qBm2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2d73455-cb6c-450f-9b75-158b4972f930_295x278.png 848w, https://substackcdn.com/image/fetch/$s_!qBm2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2d73455-cb6c-450f-9b75-158b4972f930_295x278.png 1272w, https://substackcdn.com/image/fetch/$s_!qBm2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2d73455-cb6c-450f-9b75-158b4972f930_295x278.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Image creds: omgubuntu.co.uk</figcaption></figure></div><p><em>Note: I aim to create an ongoing knowledge/technical articles &#8212; aiming to begin with questions on hands-on commands rather than open-ended questions. Also, note, there are multiple answers to these questions or methods to solve the problem.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-W0x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-W0x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-W0x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-W0x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-W0x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-W0x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg" width="1400" height="663" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:663,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!-W0x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-W0x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-W0x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-W0x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd80aa808-2044-4f95-95cb-1bba08b38eee_1400x663.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Image creds: e-careers.com</figcaption></figure></div><h1><strong>List of Questions:</strong></h1><ol><li><p>How to get your current IP address?</p></li><li><p>How to list all open ports of your machine?</p></li><li><p>How to list all open files on your machine?</p></li><li><p>How to list all the network connections?</p></li><li><p>How to get the version of your kernel or which UNIX distribution you are using?</p></li><li><p>How to check for free disk space?</p></li><li><p>How to check the CPU usage of a specific process?</p></li><li><p>How to check if a Linux service is running?</p></li><li><p>How to mount a device on your machine?</p></li><li><p>How can I find out more about a specific command in Linux?</p></li></ol><h1><strong>Answers:</strong></h1><ol><li><p><strong>How to get your current IP address?</strong></p></li></ol><ul><li><p>Usually, you would use <code>ifconfig</code> , then scroll down through the output and get the inet, inet6 under eth0 for Ubuntu. (Since I&#8217;m on OSx, I would look for &#8220;en0&#8221;)</p></li><li><p>There is also another option you can use, the command is <code>ip</code>.<br><code>ip addr show eth0</code> or <code>ip addr show en0</code></p></li></ul><blockquote><p><em>Note: The IP command is not available on all machines.</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CE37!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe24f2b14-e8f7-40a5-82a3-3fa97d7f9b7e_529x126.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CE37!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe24f2b14-e8f7-40a5-82a3-3fa97d7f9b7e_529x126.png 424w, https://substackcdn.com/image/fetch/$s_!CE37!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe24f2b14-e8f7-40a5-82a3-3fa97d7f9b7e_529x126.png 848w, https://substackcdn.com/image/fetch/$s_!CE37!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe24f2b14-e8f7-40a5-82a3-3fa97d7f9b7e_529x126.png 1272w, https://substackcdn.com/image/fetch/$s_!CE37!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe24f2b14-e8f7-40a5-82a3-3fa97d7f9b7e_529x126.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CE37!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe24f2b14-e8f7-40a5-82a3-3fa97d7f9b7e_529x126.png" width="529" height="126" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e24f2b14-e8f7-40a5-82a3-3fa97d7f9b7e_529x126.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:126,&quot;width&quot;:529,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!CE37!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe24f2b14-e8f7-40a5-82a3-3fa97d7f9b7e_529x126.png 424w, https://substackcdn.com/image/fetch/$s_!CE37!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe24f2b14-e8f7-40a5-82a3-3fa97d7f9b7e_529x126.png 848w, https://substackcdn.com/image/fetch/$s_!CE37!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe24f2b14-e8f7-40a5-82a3-3fa97d7f9b7e_529x126.png 1272w, https://substackcdn.com/image/fetch/$s_!CE37!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe24f2b14-e8f7-40a5-82a3-3fa97d7f9b7e_529x126.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Running the ifconfig command</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nkil!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa5b387-a80d-4808-b668-8a68e71f6148_757x149.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nkil!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa5b387-a80d-4808-b668-8a68e71f6148_757x149.png 424w, https://substackcdn.com/image/fetch/$s_!nkil!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa5b387-a80d-4808-b668-8a68e71f6148_757x149.png 848w, https://substackcdn.com/image/fetch/$s_!nkil!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa5b387-a80d-4808-b668-8a68e71f6148_757x149.png 1272w, https://substackcdn.com/image/fetch/$s_!nkil!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa5b387-a80d-4808-b668-8a68e71f6148_757x149.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nkil!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa5b387-a80d-4808-b668-8a68e71f6148_757x149.png" width="757" height="149" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9aa5b387-a80d-4808-b668-8a68e71f6148_757x149.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:149,&quot;width&quot;:757,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!nkil!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa5b387-a80d-4808-b668-8a68e71f6148_757x149.png 424w, https://substackcdn.com/image/fetch/$s_!nkil!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa5b387-a80d-4808-b668-8a68e71f6148_757x149.png 848w, https://substackcdn.com/image/fetch/$s_!nkil!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa5b387-a80d-4808-b668-8a68e71f6148_757x149.png 1272w, https://substackcdn.com/image/fetch/$s_!nkil!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9aa5b387-a80d-4808-b668-8a68e71f6148_757x149.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><code>ifconfig</code> output (scrolled down)</figcaption></figure></div><p><strong>2. How to list all open ports of your machine?</strong></p><ul><li><p>To check all open ports on your machine, use the <code>netstat</code> command. The output can be quite long so in order to limit this, we can use a flag, to list the UDP and TCP ports only.</p></li><li><p>For Ubuntu &amp; other Linux distros:<code>netstat-tulpn</code></p></li><li><p>For other UNIX distros (macOS): <code>netstat -anvp TCP | grep &#8220;LISTEN&#8221;</code></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yBvJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf678ccd-f652-4d89-b6f5-925e498741f6_973x349.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yBvJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf678ccd-f652-4d89-b6f5-925e498741f6_973x349.png 424w, https://substackcdn.com/image/fetch/$s_!yBvJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf678ccd-f652-4d89-b6f5-925e498741f6_973x349.png 848w, https://substackcdn.com/image/fetch/$s_!yBvJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf678ccd-f652-4d89-b6f5-925e498741f6_973x349.png 1272w, https://substackcdn.com/image/fetch/$s_!yBvJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf678ccd-f652-4d89-b6f5-925e498741f6_973x349.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yBvJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf678ccd-f652-4d89-b6f5-925e498741f6_973x349.png" width="973" height="349" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df678ccd-f652-4d89-b6f5-925e498741f6_973x349.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:349,&quot;width&quot;:973,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!yBvJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf678ccd-f652-4d89-b6f5-925e498741f6_973x349.png 424w, https://substackcdn.com/image/fetch/$s_!yBvJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf678ccd-f652-4d89-b6f5-925e498741f6_973x349.png 848w, https://substackcdn.com/image/fetch/$s_!yBvJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf678ccd-f652-4d89-b6f5-925e498741f6_973x349.png 1272w, https://substackcdn.com/image/fetch/$s_!yBvJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf678ccd-f652-4d89-b6f5-925e498741f6_973x349.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Listing all open ports of my Mac</figcaption></figure></div><p><strong>3. How to list all open files (for a process) on your machine?</strong></p><ul><li><p>This is quite a simple one but in order to see which files &amp; directories are open, you can run <code>lsof</code> . Running this command will list many open files/directories</p></li><li><p>To be more specific, you may use these flags:</p></li></ul><p>Find processes by name:<br><code>lsof -c processsname</code></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8DlM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc588505b-2fe4-4b06-b177-d3301a6051d2_1011x182.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8DlM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc588505b-2fe4-4b06-b177-d3301a6051d2_1011x182.png 424w, https://substackcdn.com/image/fetch/$s_!8DlM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc588505b-2fe4-4b06-b177-d3301a6051d2_1011x182.png 848w, https://substackcdn.com/image/fetch/$s_!8DlM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc588505b-2fe4-4b06-b177-d3301a6051d2_1011x182.png 1272w, https://substackcdn.com/image/fetch/$s_!8DlM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc588505b-2fe4-4b06-b177-d3301a6051d2_1011x182.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8DlM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc588505b-2fe4-4b06-b177-d3301a6051d2_1011x182.png" width="1011" height="182" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c588505b-2fe4-4b06-b177-d3301a6051d2_1011x182.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:182,&quot;width&quot;:1011,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!8DlM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc588505b-2fe4-4b06-b177-d3301a6051d2_1011x182.png 424w, https://substackcdn.com/image/fetch/$s_!8DlM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc588505b-2fe4-4b06-b177-d3301a6051d2_1011x182.png 848w, https://substackcdn.com/image/fetch/$s_!8DlM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc588505b-2fe4-4b06-b177-d3301a6051d2_1011x182.png 1272w, https://substackcdn.com/image/fetch/$s_!8DlM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc588505b-2fe4-4b06-b177-d3301a6051d2_1011x182.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">finding the open files for &#8220;chrome&#8221;</figcaption></figure></div><p>Find processes by PID:<br><code>lsof -p 819</code></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3cyf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f04bd4-4fd3-4e14-b56f-8cca832baa8c_1011x222.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3cyf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f04bd4-4fd3-4e14-b56f-8cca832baa8c_1011x222.png 424w, https://substackcdn.com/image/fetch/$s_!3cyf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f04bd4-4fd3-4e14-b56f-8cca832baa8c_1011x222.png 848w, https://substackcdn.com/image/fetch/$s_!3cyf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f04bd4-4fd3-4e14-b56f-8cca832baa8c_1011x222.png 1272w, https://substackcdn.com/image/fetch/$s_!3cyf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f04bd4-4fd3-4e14-b56f-8cca832baa8c_1011x222.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3cyf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f04bd4-4fd3-4e14-b56f-8cca832baa8c_1011x222.png" width="1011" height="222" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55f04bd4-4fd3-4e14-b56f-8cca832baa8c_1011x222.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:222,&quot;width&quot;:1011,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!3cyf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f04bd4-4fd3-4e14-b56f-8cca832baa8c_1011x222.png 424w, https://substackcdn.com/image/fetch/$s_!3cyf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f04bd4-4fd3-4e14-b56f-8cca832baa8c_1011x222.png 848w, https://substackcdn.com/image/fetch/$s_!3cyf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f04bd4-4fd3-4e14-b56f-8cca832baa8c_1011x222.png 1272w, https://substackcdn.com/image/fetch/$s_!3cyf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55f04bd4-4fd3-4e14-b56f-8cca832baa8c_1011x222.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">finding the process by PID</figcaption></figure></div><p><strong>4. How to list all the network connections on your machine?</strong></p><ul><li><p>To list all the network connections of your machine, you can use the <code>netstat link</code> command.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_h9z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a03b9b-b5b9-43b0-92e2-006c25dbb20a_639x155.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_h9z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a03b9b-b5b9-43b0-92e2-006c25dbb20a_639x155.png 424w, https://substackcdn.com/image/fetch/$s_!_h9z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a03b9b-b5b9-43b0-92e2-006c25dbb20a_639x155.png 848w, https://substackcdn.com/image/fetch/$s_!_h9z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a03b9b-b5b9-43b0-92e2-006c25dbb20a_639x155.png 1272w, https://substackcdn.com/image/fetch/$s_!_h9z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a03b9b-b5b9-43b0-92e2-006c25dbb20a_639x155.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_h9z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a03b9b-b5b9-43b0-92e2-006c25dbb20a_639x155.png" width="639" height="155" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81a03b9b-b5b9-43b0-92e2-006c25dbb20a_639x155.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:155,&quot;width&quot;:639,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!_h9z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a03b9b-b5b9-43b0-92e2-006c25dbb20a_639x155.png 424w, https://substackcdn.com/image/fetch/$s_!_h9z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a03b9b-b5b9-43b0-92e2-006c25dbb20a_639x155.png 848w, https://substackcdn.com/image/fetch/$s_!_h9z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a03b9b-b5b9-43b0-92e2-006c25dbb20a_639x155.png 1272w, https://substackcdn.com/image/fetch/$s_!_h9z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a03b9b-b5b9-43b0-92e2-006c25dbb20a_639x155.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>5. How to get the version of your kernel or which UNIX distribution you are using?</strong></p><ul><li><p>To get the kernel version, you can simply use the <code>uname -a</code> . This will display the details of your OS</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5jGW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5d688b-8458-44d9-bcc4-942e3397e4ee_1011x90.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5jGW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5d688b-8458-44d9-bcc4-942e3397e4ee_1011x90.png 424w, https://substackcdn.com/image/fetch/$s_!5jGW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5d688b-8458-44d9-bcc4-942e3397e4ee_1011x90.png 848w, https://substackcdn.com/image/fetch/$s_!5jGW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5d688b-8458-44d9-bcc4-942e3397e4ee_1011x90.png 1272w, https://substackcdn.com/image/fetch/$s_!5jGW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5d688b-8458-44d9-bcc4-942e3397e4ee_1011x90.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5jGW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5d688b-8458-44d9-bcc4-942e3397e4ee_1011x90.png" width="1011" height="90" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc5d688b-8458-44d9-bcc4-942e3397e4ee_1011x90.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:90,&quot;width&quot;:1011,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!5jGW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5d688b-8458-44d9-bcc4-942e3397e4ee_1011x90.png 424w, https://substackcdn.com/image/fetch/$s_!5jGW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5d688b-8458-44d9-bcc4-942e3397e4ee_1011x90.png 848w, https://substackcdn.com/image/fetch/$s_!5jGW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5d688b-8458-44d9-bcc4-942e3397e4ee_1011x90.png 1272w, https://substackcdn.com/image/fetch/$s_!5jGW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc5d688b-8458-44d9-bcc4-942e3397e4ee_1011x90.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">running the uname -a command to obtain OS detail</figcaption></figure></div><ul><li><p>Another open-source tool you can use is <code>neofetch</code></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U4U8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d05a38a-be25-4f40-8fd7-cfbe9848cb25_571x386.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U4U8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d05a38a-be25-4f40-8fd7-cfbe9848cb25_571x386.png 424w, https://substackcdn.com/image/fetch/$s_!U4U8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d05a38a-be25-4f40-8fd7-cfbe9848cb25_571x386.png 848w, https://substackcdn.com/image/fetch/$s_!U4U8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d05a38a-be25-4f40-8fd7-cfbe9848cb25_571x386.png 1272w, https://substackcdn.com/image/fetch/$s_!U4U8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d05a38a-be25-4f40-8fd7-cfbe9848cb25_571x386.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U4U8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d05a38a-be25-4f40-8fd7-cfbe9848cb25_571x386.png" width="571" height="386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d05a38a-be25-4f40-8fd7-cfbe9848cb25_571x386.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:386,&quot;width&quot;:571,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!U4U8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d05a38a-be25-4f40-8fd7-cfbe9848cb25_571x386.png 424w, https://substackcdn.com/image/fetch/$s_!U4U8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d05a38a-be25-4f40-8fd7-cfbe9848cb25_571x386.png 848w, https://substackcdn.com/image/fetch/$s_!U4U8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d05a38a-be25-4f40-8fd7-cfbe9848cb25_571x386.png 1272w, https://substackcdn.com/image/fetch/$s_!U4U8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d05a38a-be25-4f40-8fd7-cfbe9848cb25_571x386.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>6. How to check for free disk space?</strong></p><ul><li><p>You can check all disk space usage using the <code>df</code> command. So that it&#8217;se easier to read, you may add the flag <code>-h</code>.</p></li><li><p>So you would run <code>df -h</code></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0usI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62f05449-77c2-42d0-aaf4-b87d705f813b_818x277.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0usI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62f05449-77c2-42d0-aaf4-b87d705f813b_818x277.png 424w, https://substackcdn.com/image/fetch/$s_!0usI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62f05449-77c2-42d0-aaf4-b87d705f813b_818x277.png 848w, https://substackcdn.com/image/fetch/$s_!0usI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62f05449-77c2-42d0-aaf4-b87d705f813b_818x277.png 1272w, https://substackcdn.com/image/fetch/$s_!0usI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62f05449-77c2-42d0-aaf4-b87d705f813b_818x277.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0usI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62f05449-77c2-42d0-aaf4-b87d705f813b_818x277.png" width="818" height="277" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/62f05449-77c2-42d0-aaf4-b87d705f813b_818x277.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:277,&quot;width&quot;:818,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!0usI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62f05449-77c2-42d0-aaf4-b87d705f813b_818x277.png 424w, https://substackcdn.com/image/fetch/$s_!0usI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62f05449-77c2-42d0-aaf4-b87d705f813b_818x277.png 848w, https://substackcdn.com/image/fetch/$s_!0usI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62f05449-77c2-42d0-aaf4-b87d705f813b_818x277.png 1272w, https://substackcdn.com/image/fetch/$s_!0usI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62f05449-77c2-42d0-aaf4-b87d705f813b_818x277.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">checking for free disk space &#8212; using the -h flag to make it more human-readable</figcaption></figure></div><p><strong>7. How to check the CPU usage of a specific process?</strong></p><ul><li><p>you may use the ps aux command to list all the processes &#8212; to look for something more specific, pipe it with the grep command. Like so:<br><code>ps aux | grep &#8220;process_name&#8221;</code></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jcTV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a8358f-0b34-4270-98b9-8af38f0d0e14_764x66.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jcTV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a8358f-0b34-4270-98b9-8af38f0d0e14_764x66.png 424w, https://substackcdn.com/image/fetch/$s_!jcTV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a8358f-0b34-4270-98b9-8af38f0d0e14_764x66.png 848w, https://substackcdn.com/image/fetch/$s_!jcTV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a8358f-0b34-4270-98b9-8af38f0d0e14_764x66.png 1272w, https://substackcdn.com/image/fetch/$s_!jcTV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a8358f-0b34-4270-98b9-8af38f0d0e14_764x66.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jcTV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a8358f-0b34-4270-98b9-8af38f0d0e14_764x66.png" width="764" height="66" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05a8358f-0b34-4270-98b9-8af38f0d0e14_764x66.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:66,&quot;width&quot;:764,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!jcTV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a8358f-0b34-4270-98b9-8af38f0d0e14_764x66.png 424w, https://substackcdn.com/image/fetch/$s_!jcTV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a8358f-0b34-4270-98b9-8af38f0d0e14_764x66.png 848w, https://substackcdn.com/image/fetch/$s_!jcTV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a8358f-0b34-4270-98b9-8af38f0d0e14_764x66.png 1272w, https://substackcdn.com/image/fetch/$s_!jcTV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05a8358f-0b34-4270-98b9-8af38f0d0e14_764x66.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ul><li><p>Alternatively, you can use the command <code>top</code>for a nicer view.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IdPy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a5eeb52-8be8-4343-91b1-3159e0ce2ec9_1006x242.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IdPy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a5eeb52-8be8-4343-91b1-3159e0ce2ec9_1006x242.png 424w, https://substackcdn.com/image/fetch/$s_!IdPy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a5eeb52-8be8-4343-91b1-3159e0ce2ec9_1006x242.png 848w, https://substackcdn.com/image/fetch/$s_!IdPy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a5eeb52-8be8-4343-91b1-3159e0ce2ec9_1006x242.png 1272w, https://substackcdn.com/image/fetch/$s_!IdPy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a5eeb52-8be8-4343-91b1-3159e0ce2ec9_1006x242.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IdPy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a5eeb52-8be8-4343-91b1-3159e0ce2ec9_1006x242.png" width="1006" height="242" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a5eeb52-8be8-4343-91b1-3159e0ce2ec9_1006x242.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:242,&quot;width&quot;:1006,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!IdPy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a5eeb52-8be8-4343-91b1-3159e0ce2ec9_1006x242.png 424w, https://substackcdn.com/image/fetch/$s_!IdPy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a5eeb52-8be8-4343-91b1-3159e0ce2ec9_1006x242.png 848w, https://substackcdn.com/image/fetch/$s_!IdPy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a5eeb52-8be8-4343-91b1-3159e0ce2ec9_1006x242.png 1272w, https://substackcdn.com/image/fetch/$s_!IdPy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a5eeb52-8be8-4343-91b1-3159e0ce2ec9_1006x242.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>8. How to check if a Linux service is running?</strong></p><ul><li><p>Most Linux distros would use an old command which is <code>systemd</code></p></li><li><p>Another option would be the <code>systemctl</code> command, which is relatively newer.</p></li><li><p>You may use it with these flags: <code>systemctl &lt;option&gt; &lt;service_name&gt;</code></p></li></ul><p><strong>9. How to mount a device on your machine? &amp; list all the mounts on your device?</strong></p><ul><li><p>To list all the mounts on your machine, you would run <code>ls /mnt</code></p></li><li><p>To mount a device, you may use the <code>mount</code> command</p></li><li><p>For example: <code>mount /dev/sda2 /mnt</code> &#8212; where /dev/sda2 would be the device</p></li></ul><p><strong>10</strong>. <strong>How can I find out more about a specific command in Linux?</strong></p><ul><li><p>A very crucial command that is underestimated as not all of us will know what every single Linux command out there can do.</p></li><li><p>So to save yourself the hassle, run <code>man &lt;command_name&gt;</code></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dYEO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31ec3aff-afca-49af-93a0-5c9c6f4e8432_1012x598.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dYEO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31ec3aff-afca-49af-93a0-5c9c6f4e8432_1012x598.png 424w, https://substackcdn.com/image/fetch/$s_!dYEO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31ec3aff-afca-49af-93a0-5c9c6f4e8432_1012x598.png 848w, https://substackcdn.com/image/fetch/$s_!dYEO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31ec3aff-afca-49af-93a0-5c9c6f4e8432_1012x598.png 1272w, https://substackcdn.com/image/fetch/$s_!dYEO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31ec3aff-afca-49af-93a0-5c9c6f4e8432_1012x598.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dYEO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31ec3aff-afca-49af-93a0-5c9c6f4e8432_1012x598.png" width="1012" height="598" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31ec3aff-afca-49af-93a0-5c9c6f4e8432_1012x598.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:598,&quot;width&quot;:1012,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dYEO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31ec3aff-afca-49af-93a0-5c9c6f4e8432_1012x598.png 424w, https://substackcdn.com/image/fetch/$s_!dYEO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31ec3aff-afca-49af-93a0-5c9c6f4e8432_1012x598.png 848w, https://substackcdn.com/image/fetch/$s_!dYEO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31ec3aff-afca-49af-93a0-5c9c6f4e8432_1012x598.png 1272w, https://substackcdn.com/image/fetch/$s_!dYEO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31ec3aff-afca-49af-93a0-5c9c6f4e8432_1012x598.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">running the &#8220;man grep&#8221; command &#8212; for more details on what &#8220;grep&#8221; does</figcaption></figure></div><p>Some of these commands are really handy, not just in interviews, but also in real-life debugging scenarios. I really hope you have learnt more about these Linux commands and how powerful they can be. Please do share and support to help me write more articles on this knowledge series.</p><p>Until then, keep learning! &#128512;</p>]]></content:encoded></item></channel></rss>