Linux Documentation

This article offers documentation about using Linux in general as a Cloud Support & Media Engineer.
Let’s face it: I have been trying to really learn linux and understand it for the last 5 years. I have made some progress, at the point that in my working computer I can not work without a linux terminal to do my troubleshooting stuff.
However, I am just scratching the tip of the iceberg. I don’t want to go deeper inside because I will need a new life to learn it, but at least I just want to feel comfortable with the fundamentals".
With that said, I will follow the quote of Linus Torvalds:
Talk is cheap. Show me the code.
– Linus Torvalds
Without further delay, let us go over the main elements of Markdown and what the resulting HTML looks like!
1 curl
The basis
curl command:
curl -vo /dev/null https://google.comFrom the output, we can see the headers that we are sending (The ones that begins with >) in our HTTP/S connection to the origin, and the response headers from the origin. In the above example, from the output we can see that the headers we sent to google.com are:
> GET / HTTP/2
> Host: google.com
> user-agent: curl/7.81.0
> accept: */*And the once that starts with < are the response headers from the Origin:
< HTTP/2 301
< location: https://www.google.com/
< content-type: text/html; charset=UTF-8
< content-security-policy-report-only: object-src 'none';base-uri 'self';script-src 'nonce-EYfqVJPZeMfTFfdJG07Haw' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
< reporting-endpoints: default="//www.google.com/httpservice/retry/jserror?ei=iy2gabPwFOSs0PEP8aS84AI&cad=crash&error=Page%20Crash&jsel=1&bver=2384&dpf=lSp35wFxjKhjSWH5zgcgbmxlUXPi2wJZbVymb2X7kZU"
< date: Thu, 26 Feb 2026 11:24:59 GMT
< expires: Sat, 28 Mar 2026 11:24:59 GMT
< cache-control: public, max-age=2592000
< server: gws
< content-length: 220
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000The most important might be the HTTP/2 status code response, which is a 301 Moved Permanently (redirection response).
Forward redirect -L
With that said, if you want to follow a redirect response, you can make use of the -L flag. In the above example it will be:
curl -vo /dev/null -L https://google.comOutput:
> GET / HTTP/2
> Host: google.com
> user-agent: curl/7.81.0
> accept: */*
...
< HTTP/2 301
< location: https://www.google.com/
< content-type: text/html; charset=UTF-8
< content-security-policy-report-only:
...
< date: Fri, 27 Feb 2026 03:37:14 GMT
< expires: Sun, 29 Mar 2026 03:37:14 GMT
< cache-control: public, max-age=2592000
< server: gws
< content-length: 220
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000It’s making the first connection to google.com and then the response is forwarding the connection to www.google.com:
* Issue another request to this URL: 'https://www.google.com/'
* Trying 142.250.76.100:443...
* Connected to www.google.com (142.250.76.100) port 443 (#1)
...
> GET / HTTP/2
> Host: www.google.com
> user-agent: curl/7.81.0
> accept: */*
...
< HTTP/2 200
< date: Fri, 27 Feb 2026 03:37:14 GMT
< expires: -1
< cache-control: private, max-age=0
< content-type: text/html; charset=ISO-8859-1
< content-security-policy-report-only: object-src 'none';base-uri 'self';script-src 'nonce-mBEeYs33lb7d5SlBoYGLeg' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp
< reporting-endpoints: default="//www.google.com/httpservice/retry/jserror?ei=ahGhaZO7NsughbIPg-jOqAI&cad=crash&error=Page%20Crash&jsel=1&bver=2384&dpf=jtAPAEfitwVC859gVg16JznWei3gRfkiR_8fdje5jKQ"
< accept-ch: Sec-CH-Prefers-Color-Scheme
< p3p: CP="This is not a P3P policy! See g.co/p3phelp for more info."
< server: gws
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< set-cookie:
...
< alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
< accept-ranges: none
< vary: Accept-Encoding
< Host headers flag -H
In your cURL request you can pass host headers. Here is an example where we are passing one header, the host header with the value www.example.com:
curl -H 'Host: www.example.com' http://server-ip-address/The HTML looks like this:
<h2>h2 Heading</h2>
<h3>h3 Heading</h3>
<h4>h4 Heading</h4>
<h5>h5 Heading</h5>
<h6>h6 Heading</h6>To add a custom heading ID, enclose the custom ID in curly braces on the same line as the heading:
### A Great Heading {#custom-id}The HTML looks like this:
<h3 id="custom-id">A Great Heading</h3>Byobu
Byobu is a text window manager and terminal multiplexer.
keybindings:
- Shift+F1 = Help menu
- F2 = Create a new window
- Shift-F2 Create a horizontal split
- Ctrl-F2 Create a vertical split
- Ctrl-Shift-F2 Create a new session
- F3/F4 Move focus among windows
- Alt-Left/Right Move focus among windows
- Alt-Up/Down Move focus among sessions
- Shift-Left/Right/Up/Down Move focus among splits
- Shift-F3/F4 Move focus among splits
- Ctrl-F3/F4 Move a split
- Ctrl-Shift-F3/F4 Move a window
- Shift-Alt-Left/Right/Up/Down Resize a split
- F6 Detach session and then logout
3 Local AI in Linux (Ollama)
ollama listwill list the LLM (Large Language Model)http://localhost:11434/test if Ollama is running. The output should be Ollama is running
Open-WebUI
Open WebUI is an extensible, feature-rich, and user-friendly self-hosted AI platform designed to operate entirely offline. It supports various LLM runners like Ollama and OpenAI-compatible APIs, with built-in inference engine for RAG, making it a powerful AI deployment solution.
If Ollama is on your computer, use this command:
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:mainHowever, I needed to modify a file from Ollama to see the LLM’s already downloaded from Ollama:
How to update Open-WebUI
1 - I have docker running:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1988936a932 ghcr.io/open-webui/open-webui:main "bash start.sh" 3 weeks ago Up 13 hours (healthy) 0.0.0.0:3000->8080/tcp, [::]:3000->8080/tcp open-webuiSo, I need to stop and remove existing container:
docker rm -f open-webui 2 - Then, I will Pull the latest image:
docker pull ghcr.io/open-webui/open-webui:main 3 - Recreate the container with the existing environment variables and colume mounts:
docker run -d -p 3000:8080 \
-v open-webui:/app/backend/data \
-e WEBUI_SECRET_KEY="your-secret-key" \
--name open-webui --restart always \
ghcr.io/open-webui/open-webui:main4 - Connections
Not model found:

Network isolation and incorrect URL configuration are the primary reasons Open WebUI fails to detect Ollama models.
- Host Binding: If Ollama runs on the host, add Environment=“OLLAMA_HOST=0.0.0.0” to the Ollama systemd service to allow external connections, then set OLLAMA_BASE_URL in Open WebUI to http://host.docker.internal:11434 or the host’s local IP.
I can verify that Ollama is running locally by curl http://ollama:11434 –> Ollama is running
1 - docker stop open-webui 2 - docker rm open-webui
3 - docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=http://docker.internal -v open-webui:/app/backend/data –name open-webui –restart always ghcr.io/open-webui/open-webui:main
4 - I connected to the docker by running , and then I realise that I needed to use my host IP:
docker exec -it open-webui /bin/bash
curl http://host.docker.internal:11434
curl: (6) Could not resolve host: host.docker.internal
curl http://localhost:11434
curl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server
url http://1.1.1.1:11434
Ollama is runningI made the changes in the Open WebUI –> Settings –> Connections –> Ollama API
4 Basic commands
1 - Show Linux flavour:
-
cat /etc/issue==> Output:Ubuntu 22.04.5 LTS \n \l -
lsb_release -a==> Output:```bash No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.5 LTS Release: 22.04 Codename: jammy ```
2 - mpv
- Watch a youtube video:
mpv --ytdl-format=best "https://youtu.be/Cwm6krslrOc?si=vODFbOAlI6inrhWR"
3 - rsync
Using rsync:
rsync -av [source_folder/] [destination_folder/]
-a: Archive mode, which preserves file attributes, permissions, timestamps, etc. -v: Verbose mode, which provides detailed output about the transfer.
Example: Suppose you want to copy a folder named SourceFolder from /media/username/Drive1/ to /media/username/Drive2/.
rsync -av /media/username/Drive1/SourceFolder/ /media/username/Drive2/Note the trailing slash on SourceFolder. This tells rsync to copy the contents of the folder rather than creating a new directory with the same name.
4 - Disks
4.1 - du
In Linux, you can use the du command to check the size of a folder in human-readable format. Here’s how:
du -h [folder_name]
du -sh /path/to/folder # shows the total size of the folder and its contents
du -sh /path/to/folder/ | less # shows the size of the folder and its contents, and pipes the output to less for easier reading4.2 - df Check free space on all disks:
df -hThis will display information about all mounted file systems, including the disk you’re using. The -h option makes the output human-readable (e.g., 1K, 234M, 1.2G).
5 Docker
I have not idea how to use containers or how to administrate them. I do know that they are powerfull and at work I need to troubleshoot some servers that they run containers on it. So, let’s learn a bit about it.
If you want to see all containers (both running and stopped), you can use the -a or –all option:
docker ps -aThis will give you a comprehensive list of all containers, allowing you to quickly identify which ones are running and which are stopped. Here’s an example of what the output might look like:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
123456789abc my-web-app "python app.py" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp my-web-container
def456789ghi my-db "mysqld --datadir=..." 3 days ago Up 3 days 3306/tcp my-db-containerConnect to the docker:
docker exec -it open-webui /bin/bash6 Small project
NAS
-
- Analysis data to be backed up.
-
- Got into a unified data backup.
-
- Consolidate all the data into 1 place –> Clone it
-
- Think big, NAS with at least 2 RAID disk
1.Analysis data to be backed up.
- 2 TB External drive (HDD 3.5-inch)
- 1 TB External drive (HDD 2.5-inch)
I think that I should consolidate everything into less than 1TB, then clone them.