Configuring a Home File Server on Linux Mint

Introduction

A home Linux file server often becomes the quiet workhorse of the household network. It stores documents, photos, installers, backups, archives, media, exported projects, and random files copied from Windows machines. When that same directory is shared to Windows 11 clients through Samba and published over HTTP by nginx, it becomes even more useful. It also becomes a place where malware, unwanted scripts, malicious documents, or infected downloads can sit unnoticed.

That is where ClamAV fits. ClamAV is not a replacement for good backups, careful permissions, patching, endpoint protection on Windows clients, or common sense. However, for a Linux Mint 21.3 home file server sharing /data/ through Samba and nginx, ClamAV provides a practical open-source antivirus layer. The official ClamAV documentation describes it as an open-source toolkit for detecting viruses, Trojans, malware, and other threats, with tools such as freshclam, clamd, clamscan, and clamdscan (Cisco Talos, n.d.-a).

Linux Mint 21.3 uses an Ubuntu Jammy package base, which makes the installation process familiar for Ubuntu-style administration (Linux Mint, n.d.).

The Target Design

The design in this article assumes a simple home server layout:

Windows 11 clients -> Samba share -> /data/

nginx web server   -> HTTP access -> /data/

ClamAV daemon      -> scheduled malware scans of /data/

freshclam          -> automatic signature updates

rsync              -> scheduled backup from /data/ to /data-backup/

systemd timers     -> automation for scans and backups

The goal is to protect the shared file repository without making the server difficult to maintain. Files can arrive through Samba, be served later by nginx, and be scanned regularly by ClamAV. A separate scheduled rsync job keeps a local backup copy in /data-backup/.

Install ClamAV

Install the ClamAV packages:

sudo apt update

sudo apt install clamav clamav-daemon

The clamav package provides the basic scanner tools. The clamav-daemon package provides clamd, the scanning daemon. ClamAV documentation explains that clamdscan sends scan requests to clamd, while daemon behavior is controlled largely through clamd.conf (Cisco Talos, n.d.-b).

Enable and start the services:

sudo systemctl enable --now clamav-freshclam

sudo systemctl enable --now clamav-daemon

Check status:

systemctl status clamav-freshclam

systemctl status clamav-daemon

The clamav-freshclam service updates virus signature databases. The clamav-daemon service runs the scanner daemon.

Confirm Signature Updates

A healthy freshclam log should show database updates such as:

daily.cvd updated

main.cvd updated

bytecode.cvd updated

Database test passed

Check the updater logs:

sudo journalctl -u clamav-freshclam -n 100

sudo tail -n 100 /var/log/clamav/freshclam.log

A warning such as the following usually means the updater could not notify the scanning daemon:

WARNING: Clamd was NOT notified: Cannot connect to clamd through /var/run/clamav/clamd.ctl

That normally means clamd is not installed, is not running, or its socket was not available when freshclam tried to notify it. Restart both services:

sudo systemctl restart clamav-daemon

sudo systemctl restart clamav-freshclam

Then verify:

systemctl status clamav-daemon

systemctl status clamav-freshclam

Check ClamAV Logging

ClamAV logs are usually found under:

/var/log/clamav/

Useful log commands:

ls -lh /var/log/clamav/

sudo tail -f /var/log/clamav/clamav.log

sudo tail -f /var/log/clamav/freshclam.log

sudo journalctl -u clamav-daemon -f

sudo journalctl -u clamav-freshclam -f

To confirm the configured log file:

grep -E '^(LogFile|LogSyslog|LogFacility|LogFileMaxSize)' /etc/clamav/clamd.conf

The clamd.conf file controls daemon behavior, including logging, socket settings, scan limits, recursion limits, and thread configuration (Canonical, n.d.-a).

Make systemctl Easier to Use

On many systems, systemctl status opens in a pager. To make systemd tools behave as though --no-pager was used, set SYSTEMD_PAGER=cat:

echo 'export SYSTEMD_PAGER=cat' >> ~/.bashrc

source ~/.bashrc

For root:

echo 'export SYSTEMD_PAGER=cat' >> /root/.bashrc

source /root/.bashrc

Test clamdscan

Start small before scanning the full share:

sudo clamdscan -v --fdpass /etc/hosts

Then test the shared directory:

sudo clamdscan -v --fdpass --multiscan /data/

Useful clamdscan options include the following:

Option

Use

-v, --verbose

Shows more output during a scan.

--fdpass

Passes open file descriptors to clamd. This is useful when clamd runs as a different user.

--multiscan

Uses multiple daemon worker threads for directory scans.

--log=FILE

Writes scan output to a specified log file.

--move=DIRECTORY

Moves infected files to a quarantine directory.

--copy=DIRECTORY

Copies infected files to a quarantine directory while leaving the original in place.

--remove

Deletes infected files. Use cautiously on shared storage.

--reload

Asks clamd to reload signatures.

--ping

Checks whether clamd responds.

 

The --fdpass option is especially useful on a local Linux server because clamdscan can open files and pass the file descriptors to the daemon. ClamAV documentation notes that --multiscan lets directory scans use multiple daemon worker threads, and when combined with --fdpass, clamdscan walks the directory tree and submits individual file scans to the daemon (Cisco Talos, n.d.-b).

A practical manual scan command is:

sudo clamdscan -v --fdpass --multiscan --log=/var/log/clamav/manual-data-scan.log /data/

Prepare Permissions for Samba, nginx, ClamAV, and Backups

A file server serving the same directory through Samba and nginx has multiple access paths. Each service needs only the access required for its role.

Component

Access requirement

Samba users or groups

Write and read files through the Windows file share.

nginx worker process

Read files when serving static content over HTTP.

ClamAV scanner

Read files during scheduled malware scans.

Backup process

Read the source directory and write to the backup destination.

 

A practical pattern is to use a shared Linux group for write access and ACLs for service read access.

Create a file-sharing group:

sudo groupadd fileshare

Set group ownership:

sudo chgrp -R fileshare /data/

sudo chmod -R 2775 /data/

The 2 in 2775 sets the setgid bit on directories, helping new files inherit the directory group.

Grant nginx read and directory traversal access:

sudo setfacl -R -m u:www-data:rx /data/

sudo setfacl -R -d -m u:www-data:rx /data/

Grant ClamAV read and directory traversal access:

sudo setfacl -R -m u:clamav:rx /data/

sudo setfacl -R -d -m u:clamav:rx /data/

Verify ACLs:

getfacl /data/

When scans are launched with sudo clamdscan --fdpass, the root-launched client can open files and pass them to clamd. Even so, explicit ACLs for the clamav user make future troubleshooting easier.

Example Samba Share

A simple Samba share for /data/ might look like this:

sudo nano /etc/samba/smb.conf

Example share definition:

[data]

    path = /data

    browseable = yes

    read only = no

    guest ok = no

    valid users = @fileshare

    force group = fileshare

    create mask = 0664

    directory mask = 2775

Restart Samba:

sudo systemctl restart smbd nmbd

Windows 11 clients can connect using:

\\server-name\data

\\server-ip-address\data

Samba also provides a vfs_virusfilter module for on-access antivirus scanning on Samba file services, but scheduled scans are simpler and easier to troubleshoot for a home server. The Samba documentation describes vfs_virusfilter as a stackable VFS module for scanning and filtering virus files on Samba file services (Samba Team, n.d.).

Example nginx Static File Share

nginx can publish /data/ over HTTP as static content. NGINX documentation explains that the root directive defines the filesystem path used to serve requested files (NGINX, n.d.).

Create a site file:

sudo nano /etc/nginx/sites-available/data-share

Example configuration:

server {

    listen 80;

    server_name server-name;

 

    root /data;

 

    location / {

        autoindex on;

        try_files $uri $uri/ =404;

    }

}

Enable the site:

sudo ln -s /etc/nginx/sites-available/data-share /etc/nginx/sites-enabled/data-share

sudo nginx -t

sudo systemctl reload nginx

For a home LAN-only service, restrict access by subnet:

server {

    listen 80;

    server_name server-name;

 

    root /data;

 

    location / {

        allow 192.168.1.0/24;

        deny all;

        autoindex on;

        try_files $uri $uri/ =404;

    }

}

Adjust the subnet to match the local network.

Schedule ClamAV Scans with systemd

A systemd timer is a clean way to schedule scans. Timers are unit files ending in .timer and can activate matching .service units on a calendar schedule. The systemd.timer documentation describes timer units and the use of calendar-based scheduling through timer configuration (freedesktop.org, n.d.).

Create the scan script:

sudo nano /usr/local/sbin/clamav-scan-data.sh

Paste:

#!/bin/bash

 

LOGFILE="/var/log/clamav/scheduled-data-scan.log"

LOCKFILE="/run/lock/clamav-scan-data.lock"

SCAN_TARGET="/data/"

 

{

    echo "============================================================"

    echo "ClamAV scheduled scan started: $(date)"

    echo "Target: ${SCAN_TARGET}"

    echo "============================================================"

} >> "$LOGFILE"

 

/usr/bin/flock -n "$LOCKFILE"     /usr/bin/nice -n 10 /usr/bin/ionice -c2 -n7     /usr/bin/clamdscan -v --fdpass --multiscan --log="$LOGFILE" "$SCAN_TARGET"

 

EXIT_CODE=$?

 

{

    echo "============================================================"

    echo "ClamAV scheduled scan finished: $(date)"

    echo "Exit code: ${EXIT_CODE}"

    echo "Exit code meaning: 0=no virus found, 1=virus found, 2=error"

    echo "============================================================"

    echo

} >> "$LOGFILE"

 

exit "$EXIT_CODE"

Make it executable:

sudo chmod 750 /usr/local/sbin/clamav-scan-data.sh

Test it:

sudo /usr/local/sbin/clamav-scan-data.sh

sudo tail -n 50 /var/log/clamav/scheduled-data-scan.log

Create the service:

sudo nano /etc/systemd/system/clamav-data-scan.service

Paste:

[Unit]

Description=Scheduled ClamAV scan of /data

Wants=clamav-daemon.service

After=clamav-daemon.service

 

[Service]

Type=oneshot

ExecStart=/usr/local/sbin/clamav-scan-data.sh

Create the timer:

sudo nano /etc/systemd/system/clamav-data-scan.timer

Paste:

[Unit]

Description=Run scheduled ClamAV scan of /data

 

[Timer]

OnCalendar=*-*-* 02:00:00

Persistent=true

Unit=clamav-data-scan.service

 

[Install]

WantedBy=timers.target

Enable the timer:

sudo systemctl daemon-reload

sudo systemctl enable --now clamav-data-scan.timer

Check it:

systemctl list-timers --all | grep clamav

systemctl status clamav-data-scan.timer

systemctl status clamav-data-scan.service

Watch the scan log:

sudo tail -f /var/log/clamav/scheduled-data-scan.log

Persistent=true is useful on a home server because the timer can catch up after a missed run if the machine was powered off during the scheduled time (freedesktop.org, n.d.).

Add a Scheduled rsync Backup from /data/ to /data-backup/

Antivirus is not a backup strategy. A clean ClamAV scan only means malware was not detected by the available signatures and scan engine. A backup helps protect against accidental deletion, hardware failure, user mistakes, ransomware damage, failed upgrades, and administrative errors.

This example uses rsync to mirror the contents of /data/ into /data-backup/.

Create the destination directory:

sudo mkdir -p /data-backup

Run a first manual test:

sudo rsync -aHAX --delete --numeric-ids /data/ /data-backup/

The trailing slash on /data/ matters. It means copy the contents of /data/ into /data-backup/, rather than copying the /data directory itself as a subdirectory. The rsync manual documents archive mode, deletion options, and local-copy behavior (rsync project, n.d.).

The options used here are:

-a              Archive mode

-H              Preserve hard links

-A              Preserve ACLs

-X              Preserve extended attributes

--delete        Delete destination files that no longer exist in the source

--numeric-ids   Preserve numeric user and group IDs

Use --delete carefully. It keeps the destination as a mirror of the source. That is useful for a clean local mirror, but it also means deletions in /data/ will eventually be reflected in /data-backup/.

Create the rsync Backup Script

Create the script:

sudo nano /usr/local/sbin/rsync-backup-data.sh

Paste:

#!/bin/bash

 

SOURCE="/data/"

DESTINATION="/data-backup/"

LOGFILE="/var/log/rsync-data-backup.log"

LOCKFILE="/run/lock/rsync-data-backup.lock"

 

{

    echo "============================================================"

    echo "rsync backup started: $(date)"

    echo "Source: ${SOURCE}"

    echo "Destination: ${DESTINATION}"

    echo "============================================================"

} >> "$LOGFILE"

 

/usr/bin/flock -n "$LOCKFILE"     /usr/bin/nice -n 10 /usr/bin/ionice -c2 -n7     /usr/bin/rsync -aHAX --delete --numeric-ids     --info=stats2     "$SOURCE" "$DESTINATION" >> "$LOGFILE" 2>&1

 

EXIT_CODE=$?

 

{

    echo "============================================================"

    echo "rsync backup finished: $(date)"

    echo "Exit code: ${EXIT_CODE}"

    echo "============================================================"

    echo

} >> "$LOGFILE"

 

exit "$EXIT_CODE"

Make it executable:

sudo chmod 750 /usr/local/sbin/rsync-backup-data.sh

Test it manually:

sudo /usr/local/sbin/rsync-backup-data.sh

sudo tail -n 50 /var/log/rsync-data-backup.log

Optional Safety Check for a Mounted Backup Disk

If /data-backup/ is expected to be a separate mounted filesystem, add a mount check to the script before the rsync command:

if ! /usr/bin/mountpoint -q /data-backup; then

    echo "ERROR: /data-backup is not a mount point. Backup aborted: $(date)" >> "$LOGFILE"

    exit 2

fi

This prevents accidentally filling the root filesystem if an external or secondary disk is not mounted.

Schedule the rsync Backup with systemd

Create the service:

sudo nano /etc/systemd/system/rsync-data-backup.service

Paste:

[Unit]

Description=Scheduled rsync backup of /data to /data-backup

After=local-fs.target

 

[Service]

Type=oneshot

ExecStart=/usr/local/sbin/rsync-backup-data.sh

Create the timer:

sudo nano /etc/systemd/system/rsync-data-backup.timer

Paste:

[Unit]

Description=Run scheduled rsync backup of /data to /data-backup

 

[Timer]

OnCalendar=*-*-* 01:00:00

Persistent=true

Unit=rsync-data-backup.service

 

[Install]

WantedBy=timers.target

This schedules the backup for 1:00 AM. The ClamAV scan example runs at 2:00 AM, so the backup finishes first and the scan runs afterward.

Enable the timer:

sudo systemctl daemon-reload

sudo systemctl enable --now rsync-data-backup.timer

Check both scheduled jobs:

systemctl list-timers --all | egrep 'rsync|clamav'

Check the backup service:

systemctl status rsync-data-backup.timer

systemctl status rsync-data-backup.service

View backup logs:

sudo tail -f /var/log/rsync-data-backup.log

Backup First or Scan First?

A reasonable nightly schedule looks like this:

1:00 AM   rsync /data/ to /data-backup/

2:00 AM   ClamAV scan of /data/

This order gives the server a fresh backup before the antivirus scan runs. Another valid approach is to scan first and back up afterward, so detected files are not copied into the backup. There is no single perfect answer. For a home server, the most important point is that both jobs run consistently and produce logs.

A more cautious design is:

1:00 AM   ClamAV scan of /data/

2:00 AM   rsync /data/ to /data-backup/

That approach reduces the chance of copying suspicious files to the backup. However, if the scan takes a long time, the backup may overlap unless locks and scheduling are planned carefully.

Quarantine Instead of Delete

At first, avoid automatic deletion. A quarantine workflow is safer.

Create a quarantine directory:

sudo mkdir -p /var/quarantine/clamav

sudo chown clamav:clamav /var/quarantine/clamav

sudo chmod 700 /var/quarantine/clamav

To move detected files into quarantine, modify the scan command in the ClamAV script:

/usr/bin/clamdscan -v --fdpass --multiscan --move=/var/quarantine/clamav --log="$LOGFILE" "$SCAN_TARGET"

Avoid --remove until the behavior is well understood. The clamdscan documentation includes removal and quarantine-style options, but automatic deletion on a shared file server can create unnecessary operational risk (Canonical, n.d.-b).

Large Directories Require Patience

A large file share may appear to scan slowly. That is normal. File count matters as much as total size.

Estimate the size:

sudo du -sh /data/

sudo find /data/ -type f | wc -l

Watch ClamAV activity:

ps -eo pid,ppid,user,stat,pcpu,pmem,etime,cmd | egrep 'clamd|clamdscan'

sudo tail -f /var/log/clamav/scheduled-data-scan.log

Watch rsync backup activity:

ps -eo pid,ppid,user,stat,pcpu,pmem,etime,cmd | egrep 'rsync|rsync-backup'

sudo tail -f /var/log/rsync-data-backup.log

For disk I/O:

sudo apt install iotop

sudo iotop -oPa

Optional clamd Tuning

Check key daemon settings:

grep -E '^(MaxThreads|MaxQueue|MaxScanSize|MaxFileSize|MaxRecursion|LogFile|LocalSocket|User)' /etc/clamav/clamd.conf

For a modest home server:

MaxThreads 4

MaxQueue 100

For a larger server with more CPU and RAM:

MaxThreads 8

MaxQueue 200

Restart the daemon after changes:

sudo systemctl restart clamav-daemon

MaxThreads and related scan behavior are part of clamd.conf, which controls daemon-side scanning rather than the clamdscan command alone (Canonical, n.d.-a).

Should On-Access Scanning Be Enabled?

ClamAV supports on-access scanning on Linux through ClamOnAcc. ClamAV documentation describes this as real-time protection that can scan files when they are accessed and can optionally block access while scanning occurs (Cisco Talos, n.d.-c).

For a home file server, scheduled scanning is usually the better first step. It is easier to understand, easier to log, easier to troubleshoot, and less likely to interfere with Samba or nginx performance. On-access scanning can be added later after permissions, scan speed, and logging are understood.

Administration Cheat Sheet

Check ClamAV services:

systemctl status clamav-daemon

systemctl status clamav-freshclam

Update signatures manually:

sudo freshclam

Reload signatures into the daemon:

sudo clamdscan --reload

Run a manual scan:

sudo clamdscan -v --fdpass --multiscan --log=/var/log/clamav/manual-data-scan.log /data/

Check ClamAV timer:

systemctl list-timers --all | grep clamav

systemctl status clamav-data-scan.timer

systemctl status clamav-data-scan.service

Run a manual rsync backup:

sudo /usr/local/sbin/rsync-backup-data.sh

Check rsync timer:

systemctl list-timers --all | grep rsync

systemctl status rsync-data-backup.timer

systemctl status rsync-data-backup.service

View logs:

sudo tail -f /var/log/clamav/scheduled-data-scan.log

sudo tail -f /var/log/rsync-data-backup.log

sudo journalctl -u clamav-daemon -f

Final Recommendation

For a Linux Mint 21.3 home file server that shares /data/ through Samba to Windows 11 clients and through nginx over HTTP, the most maintainable design is:

·         Install ClamAV and clamav-daemon.

·         Run freshclam automatically.

·         Run clamd automatically.

·         Use clamdscan with --fdpass and --multiscan.

·         Scan /data/ on a systemd timer.

·         Back up /data/ to /data-backup/ with rsync on a systemd timer.

·         Log both scans and backups.

·         Quarantine suspicious files before considering deletion.

·         Keep Samba, nginx, ClamAV, and backup permissions explicit.

This gives the server a practical security and recovery baseline. ClamAV helps detect known malware in the shared repository. rsync provides a local backup mirror. Samba and nginx continue serving the same data through their normal paths. The result is a home file server that remains simple, visible, and maintainable.

References

Canonical. (n.d.-a). clamd.conf(5): Configuration file for Clam AntiVirus daemon. Ubuntu Manpages. https://manpages.ubuntu.com/manpages/jammy/man5/clamd.conf.5.html

Canonical. (n.d.-b). clamdscan(1): Scan files and directories for viruses using Clam AntiVirus daemon. Ubuntu Manpages. https://manpages.ubuntu.com/manpages/jammy/man1/clamdscan.1.html

Cisco Talos. (n.d.-a). ClamAV documentation: Introduction. ClamAV Documentation. https://docs.clamav.net/

Cisco Talos. (n.d.-b). ClamAV documentation: Scanning. ClamAV Documentation. https://docs.clamav.net/manual/Usage/Scanning.html

Cisco Talos. (n.d.-c). ClamAV documentation: On-access scanning. ClamAV Documentation. https://docs.clamav.net/manual/OnAccess.html

freedesktop.org. (n.d.). systemd.timer: Timer unit configuration. https://www.freedesktop.org/software/systemd/man/systemd.timer.html

Linux Mint. (n.d.). New features in Linux Mint 21.3 Virginia. https://www.linuxmint.com/rel_virginia_whatsnew.php

NGINX. (n.d.). Serving static content. NGINX Documentation. https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/

rsync project. (n.d.). rsync(1): Linux man page. https://download.samba.org/pub/rsync/rsync.1

Samba Team. (n.d.). vfs_virusfilter: On access virus scanner. Samba Documentation. https://www.samba.org/samba/docs/current/man-html/vfs_virusfilter.8.h

Running the Latest Minecraft Java Server on Linux Mint

 A short practical guide for installing, launching, and managing a vanilla Minecraft Java server on Linux Mint 21.3

Introduction

Running a Minecraft server on Linux Mint is straightforward, but the newest Java Edition releases require attention to one detail: the Java version. Linux Mint 21.3, known as Virginia, is based on Ubuntu Jammy and is supported until April 2027, which makes it a stable choice for a home server. However, its default repositories may not contain the newest Java runtime required by the latest Minecraft server releases (Linux Mint, n.d.).

As of May 21, 2026, Mojang identifies Minecraft Java Edition 26.1.2 as the current stable Java Edition release, published on April 9, 2026. Mojang’s release information provides the current Java Edition version details, while earlier 26.1 technical notes state that Minecraft now requires Java 25 (Mojang, 2026a, 2026b).

Java Edition, Not Bedrock

The standard Linux-hosted server .jar is for Minecraft: Java Edition, not Bedrock Edition. Java Edition is the edition normally used for a vanilla server running from a Java .jar file on Linux. Bedrock Edition is a different platform family used by consoles, mobile devices, and Minecraft for Windows. Java and Bedrock clients do not connect to the same server type without additional proxy or compatibility software (Mojang, 2021).

Install Java 25

Modern Minecraft Java servers require Java 25. Eclipse Temurin is a practical option because Adoptium provides Debian and Ubuntu package repositories. Adoptium’s Linux installation guidance also notes that Linux Mint users should use the Ubuntu codename from the operating system release file when configuring the repository (Eclipse Adoptium, n.d.).

sudo apt update

sudo apt install -y wget apt-transport-https gpg

wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public \

| gpg --dearmor \

| sudo tee /etc/apt/trusted.gpg.d/adoptium.gpg > /dev/null

echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^UBUNTU_CODENAME/{print$2}' /etc/os-release) main" \

| sudo tee /etc/apt/sources.list.d/adoptium.list

sudo apt update

sudo apt install -y temurin-25-jdk

Verify the installed Java version:

java -version

The output should show Java 25. If it does not, confirm the Temurin package was installed correctly and check which Java binary is being used.

Create a Server Directory

Create a dedicated location for the Minecraft server files:

sudo mkdir -p /opt/minecraft

sudo chown "$USER":"$USER" /opt/minecraft

cd /opt/minecraft

Download the official server .jar from Mojang’s Minecraft: Java Edition server download page. Mojang’s server download page states that the Java server is run from the command line with Java (Mojang, n.d.).

For Minecraft Java Edition 26.1.2, a command-style download using Mojang’s published server .jar link looks like this:

wget -O server.jar "https://piston-data.mojang.com/v1/objects/97ccd4c0ed3f81bbb7bfacddd1090b0c56f9bc51/server.jar"

For future releases, use the current server .jar link from Mojang rather than reusing an older URL.

First Start and EULA Acceptance

Start the server once:

java -Xms2G -Xmx4G -jar server.jar nogui

The first run creates the configuration files and stops because the end-user license agreement has not been accepted. Edit the EULA file:

nano eula.txt

Change this line:

eula=false

to this:

eula=true

Then start the server again:

java -Xms2G -Xmx4G -jar server.jar nogui

The nogui option is appropriate for a Linux server because it runs Minecraft without the graphical interface. Mojang’s server download page also notes that the graphical interface can be used by omitting nogui, but headless operation is usually cleaner for a server (Mojang, n.d.).

Open the Firewall

Minecraft Java Edition uses TCP port 25565 by default. If UFW is enabled, allow the port:

sudo ufw allow 25565/tcp

sudo ufw status verbose

Find the server IP address with:

ip -o -4 addr show up scope global

Clients on the same network can connect using that server IP address and port 25565.

Run the Server Under systemd

For regular use, manage the Minecraft server with systemd instead of launching it manually. First create a dedicated service account:

sudo useradd --system --home-dir /opt/minecraft --shell /usr/sbin/nologin minecraft

sudo chown -R minecraft:minecraft /opt/minecraft

Create the service file:

sudo nano /etc/systemd/system/minecraft.service

Add this service definition:

[Unit]

Description=Minecraft Java Server

After=network.target

 

[Service]

Type=simple

User=minecraft

Group=minecraft

WorkingDirectory=/opt/minecraft

ExecStart=/usr/lib/jvm/temurin-25-jdk-amd64/bin/java -Xms2G -Xmx4G -jar /opt/minecraft/server.jar nogui

Restart=on-failure

RestartSec=10

SuccessExitStatus=0 143

 

[Install]

WantedBy=multi-user.target

Enable and start the service:

sudo systemctl daemon-reload

sudo systemctl enable --now minecraft

Check status and logs:

systemctl status minecraft

journalctl -u minecraft -f

Keep Clients on the Same Version

The Windows client must run the same Minecraft Java version as the server. In the Minecraft Launcher, select Minecraft: Java Edition and choose the matching release. Mojang’s release article for 26.1.2 says to use the Minecraft Launcher and select Latest Release for the current stable release; if the server is running a snapshot, the client must use the same snapshot (Mojang, 2026b).

Troubleshooting the Java Version Error

If the server fails with an UnsupportedClassVersionError, the Java runtime is too old for the server .jar. For Minecraft 26.1 and later, the fix is to run the server with Java 25, not Java 17 or Java 21. Mojang’s 26.1 technical notes state that the game now requires Java 25 and that the included Java distribution is the Microsoft build of OpenJDK 25 (Mojang, 2026a).

Use the explicit Java 25 path in the systemd service to avoid accidentally launching the server with an older /usr/bin/java:

/usr/lib/jvm/temurin-25-jdk-amd64/bin/java -version

Final Recommendation

·         Install Java 25 from Eclipse Temurin.

·         Download the official Java Edition server .jar from Mojang.

·         Run the server once and accept the EULA.

·         Open TCP port 25565.

·         Run the server as a dedicated minecraft user.

·         Manage the server with systemd.

·         Keep Windows clients on the same Minecraft Java version as the server.

This approach gives Linux Mint users a reliable vanilla Minecraft Java server that starts at boot, logs through journalctl, and avoids the common Java runtime mismatch that prevents newer server versions from launching.

References

Eclipse Adoptium. (n.d.). Linux (RPM/DEB/APK) installer packages. https://adoptium.net/installation/linux

Linux Mint. (n.d.). All versions. https://linuxmint.com/download_all.php

Mojang. (2021, October 25). The difference between Java and Bedrock Editions. https://www.minecraft.net/en-us/article/java-or-bedrock-edition

Mojang. (2025, December 2). Minecraft new version numbering system. https://www.minecraft.net/en-us/article/minecraft-new-version-numbering-system

Mojang. (2026a, March 24). Minecraft Java Edition 26.1. https://www.minecraft.net/en-us/article/minecraft-java-edition-26-1

Mojang. (2026b, April 9). Minecraft Java Edition 26.1.2. https://www.minecraft.net/en-us/article/minecraft-java-edition-26-1-2

Mojang. (n.d.). Download the Minecraft: Java Edition server. https://www.minecraft.net/en-us/download/server

The Heebie-Jeebies!

 The phrase “heebie-jeebies” is an informal English expression that means a feeling of nervousness, anxiety, unease, fear, or revulsion. People usually say they “get the heebie-jeebies” when something creeps them out or makes them uncomfortable.

Examples:

  • “That abandoned house gives me the heebie-jeebies.”
  • “Watching spiders crawl around gives me the heebie-jeebies.”

The phrase is often associated with:

  • creepy or eerie situations,
  • irrational nervousness,
  • superstition,
  • or mild paranoia/jitters.

Origin of the Term

The expression is widely credited to American cartoonist Billy DeBeck, who coined it around 1923 in his comic strip Barney Google. It became extremely popular during the 1920s in the United States.

At the time, it was used to describe:

  • jitters,
  • nervous tension,
  • or a kind of psychological distress.

The phrase became so common that newspapers, musicians, and even medical commentators of the era referenced it.

Spelling

The standard spelling is:

  • heebie-jeebies

Common misspellings include:

  • “heebee jeebes”
  • “heeby jeebies”
  • “heebie geebies”

Related Expressions

Similar expressions include:

  • “the creeps”
  • “the jitters”
  • “a bad feeling”
  • “skin crawling”
  • “spooked”

Today, the phrase is usually playful or humorous rather than clinical or serious.


How many Crusades total have occurred in World History?

 

The Middle Ages - Illustration History

Short answer: There is no single, universally accepted “total number” of Crusades in world history.

  • If you mean the big, numbered Crusades to the Holy Land, historians usually count eight, sometimes nine, Crusades between 1096 and 1272. (Britannica says “at least eight” and lists eight expeditions from the First to the Eighth Crusade.)

  • If you count all papally authorized “crusading” campaigns, including those in Spain, the Baltic, against heretics, and against the Ottomans, scholars describe dozens of separate crusades from the late 11th century into the late 16th century, and there is no standard finite count. One defense-analysis survey, for example, notes that “dozens of Crusades were authorized every half century” after 1291 and treats the Spanish Armada of 1588 as the last crusade in this broad sense (Department of Defense, 2018).

Below, I will give you the conventional list of the nine major Crusades to the Holy Land, since that is the only “complete” list that historians use with anything like consistency.


The nine “major” Crusades to the Holy Land

Years vary slightly by author, but the ranges below reflect common scholarly usage, with support from modern reference works and teaching texts (Encyclopaedia Britannica, n.d.-a; HistoryCrunch, 2019a; Lumen Learning, n.d.; World History Encyclopedia, 2018a, 2018b, 2018c, 2018d, 2018e, 2018f, 2018g).

  1. First Crusade – 1096–1099

    • Launched after Pope Urban II’s call in 1095; Western European forces captured Jerusalem in 1099 and created the first Crusader states (World History Encyclopedia, 2018a).

  2. Second Crusade – 1147–1149

    • Called in response to the fall of the County of Edessa; led by kings of France and Germany, it failed to retake Edessa and accomplished little in the Levant (Lumen Learning, n.d.; World History Encyclopedia, 2018b).

  3. Third Crusade – 1189–1192

    • Launched after Saladin captured Jerusalem in 1187; led by Richard I of England, Philip II of France, and Frederick I Barbarossa. It recovered some coastal territories but not Jerusalem (Encyclopaedia Britannica, n.d.-b; World History Encyclopedia, 2018c).

  4. Fourth Crusade – 1202–1204

    • Intended to attack Egypt, but was diverted and ended with the sack of Constantinople in 1204, creating the Latin Empire instead of liberating Jerusalem (Lumen Learning, n.d.; World History Encyclopedia, 2018d).

  5. Fifth Crusade – 1217–1221

    • Focused on Egypt (especially Damietta) as the key to controlling the Holy Land; ultimately failed and ended with a negotiated withdrawal (EBSCO, n.d.-a; World History Encyclopedia, 2018e).

  6. Sixth Crusade – 1228–1229

    • Led by Emperor Frederick II; relied mainly on diplomacy. A treaty restored Jerusalem and other cities to Christian control for a time, without major battles (Encyclopaedia Britannica, n.d.-c; World History Encyclopedia, 2018f).

  7. Seventh Crusade – 1248–1254

    • Led by King Louis IX of France; again targeted Egypt, briefly capturing Damietta but ending in Louis’s defeat and captivity (EBSCO, n.d.-b; World History Encyclopedia, 2018g).

  8. Eighth Crusade – 1270

    • Also led by Louis IX, this time against Tunis in North Africa; the campaign collapsed after Louis died of disease soon after landing (HistoryLearning, n.d.).

  9. Ninth Crusade – 1271–1272

    • Often treated as a continuation of the Eighth Crusade. Led by Prince Edward of England (later Edward I); it achieved some local military successes but did not reverse the overall Muslim advantage and is usually regarded as the last major crusade to reach the Holy Land (HistoryCrunch, 2019b; Medium, 2022).

Because of how historians define “crusade” today, any attempt to give a single total number for all Crusades in world history is inherently interpretive. In strict “numbered Holy Land” terms, you are looking at eight to nine major Crusades. In the broader sense of papally backed crusading warfare across Europe and the Mediterranean, you are looking at many dozens of separate expeditions between about 1096 and 1588 (Department of Defense, 2018; Newberry Library, 2012).


References

Department of Defense. (2018). Religion and war: Past, present, and future [PDF]. Office of the Secretary of Defense. Retrieved November 19, 2025, from https://www.esd.whs.mil/Portals/54/Documents/FOID/Reading%20Room/Other/15-F-0953_DOC_08_Religion_and_War-Past_Present_and_Future.pdf

EBSCO. (n.d.-a). Fifth Crusade | Research starters. EBSCOhost. Retrieved November 19, 2025, from https://www.ebsco.com/research-starters/history/fifth-crusade

EBSCO. (n.d.-b). Seventh Crusade | Research starters. EBSCOhost. Retrieved November 19, 2025, from https://www.ebsco.com/research-starters/history/seventh-crusade

Encyclopaedia Britannica. (n.d.-a). How many Crusades were there, and when did they take place? Encyclopaedia Britannica. Retrieved November 19, 2025, from https://www.britannica.com/question/How-many-Crusades-were-there-and-when-did-they-take-place

Encyclopaedia Britannica. (n.d.-b). Third Crusade. Encyclopaedia Britannica. Retrieved November 19, 2025, from https://www.britannica.com/event/Third-Crusade

Encyclopaedia Britannica. (n.d.-c). Sixth Crusade. Encyclopaedia Britannica. Retrieved November 19, 2025, from https://www.britannica.com/event/Sixth-Crusade

HistoryCrunch. (2019a, November 17). How many Crusades were there? HistoryCrunch. Retrieved November 19, 2025, from https://www.historycrunch.com/how-many-crusades-were-there.html

HistoryCrunch. (2019b, November 17). Ninth Crusade. HistoryCrunch. Retrieved November 19, 2025, from https://www.historycrunch.com/ninth-crusade.html

HistoryLearning. (n.d.). The Eighth Crusade. HistoryLearning.com. Retrieved November 19, 2025, from https://historylearning.com/medieval-england/the-crusades/eighth-crusade/

Lumen Learning. (n.d.). The Second Crusade | Western civilization. Lumen Learning. Retrieved November 19, 2025, from https://courses.lumenlearning.com/atd-herkimer-westerncivilization/chapter/the-second-crusade/

Lumen Learning. (n.d.). The Fourth Crusade | Western civilization. Lumen Learning. Retrieved November 19, 2025, from https://courses.lumenlearning.com/atd-herkimer-westerncivilization/chapter/the-fourth-crusade/

Medium. (2022, June 10). The ninth Crusade (1271–1272). Chronicles of Islam History. Retrieved November 19, 2025, from https://chroniclesofislamhistory.medium.com/the-ninth-crusade-1271-1272-6a456cf4c60e

Newberry Library. (2012, June 25). The Crusades: Motivations, administration, and cultural influence in the Middle Ages. Newberry Digital Collections for the Classroom. Retrieved November 19, 2025, from https://dcc.newberry.org/?p=14390

World History Encyclopedia. (2018a, July 9). First Crusade. World History Encyclopedia. Retrieved November 19, 2025, from https://www.worldhistory.org/First_Crusade/

World History Encyclopedia. (2018b, July 17). Second Crusade. World History Encyclopedia. Retrieved November 19, 2025, from https://www.worldhistory.org/Second_Crusade/

World History Encyclopedia. (2018c, August 27). Third Crusade. World History Encyclopedia. Retrieved November 19, 2025, from https://www.worldhistory.org/Third_Crusade/

World History Encyclopedia. (2018d, November 15). Fourth Crusade. World History Encyclopedia. Retrieved November 19, 2025, from https://www.worldhistory.org/Fourth_Crusade/

World History Encyclopedia. (2018e, September 6). Fifth Crusade. World History Encyclopedia. Retrieved November 19, 2025, from https://www.worldhistory.org/Fifth_Crusade/

World History Encyclopedia. (2018f, September 10). Sixth Crusade. World History Encyclopedia. Retrieved November 19, 2025, from https://www.worldhistory.org/Sixth_Crusade/

World History Encyclopedia. (2018g, September 12). Seventh Crusade. World History Encyclopedia. Retrieved November 19, 2025, from https://www.worldhistory.org/Seventh_Crusade/

Can military personnel in uniform wear a Masonic apron?

Normally, no. A Masonic apron should not be worn over a U.S. military uniform unless the service member has specific authorization from the proper military authority. A Masonic apron is best treated as civilian or fraternal ceremonial regalia, not as a military uniform item. Masonic dress rules may vary by Grand Lodge, but they do not override military uniform regulations (Department of the Army, 2021; Department of the Navy, n.d.; United States Coast Guard, 2020).

 

The religious-apparel exception probably does not solve this issue. Federal law defines religious apparel as apparel worn as part of observing the service member’s religious faith, and DoD religious-accommodation policy addresses items tied to religious practice (10 U.S.C. § 774, n.d.; Department of Defense, 2020). Public Masonic sources describe Freemasonry as a members’ organization with no political or religious affiliations, and describe the apron as Masonic regalia or the “badge of a Mason” (Grand Lodge of Ohio, 2023; United Grand Lodge of England, n.d.).

 

Branch-by-branch practical read

 

Army: AR 670-1 allows religious apparel only under specific conditions and defines it as articles worn as part of religious observance. The same regulation also limits mixing uniform items and civilian clothing. A Masonic apron worn over an Army uniform would normally be unauthorized unless specifically approved by the proper authority or clearly covered by a valid accommodation or worship-service exception (Department of the Army, 2021).

 

Navy: The Navy rule is direct. Navy Uniform Regulations state that wearing civilian ceremonial regalia with a naval uniform is normally improper, with only a narrow academic-regalia exception. A Masonic apron over a Navy uniform would normally be improper unless specifically authorized (Department of the Navy, n.d.).

 

Marine Corps: Marine Corps uniform regulations state that exceptions to the uniform manual are granted only in writing by the Commandant of the Marine Corps Uniform Board. The regulations also state that uniform components will not be mixed except as authorized. A Masonic apron over a Marine Corps uniform would normally be unauthorized unless proper written authorization exists (United States Marine Corps, 2018).

 

Air Force: DAFI 36-2903 states that dress and appearance standards not listed as authorized are unauthorized. It also requires Airmen to maintain a professional military image and gives commanders authority to enforce uniformity. A Masonic apron over an Air Force uniform would normally be unauthorized unless specifically approved through an applicable process (Department of the Air Force, 2024).

 

Space Force: SPFI 36-2903 similarly states that personal accessories not listed in the instruction are not authorized for wear and gives commanders authority to prohibit optional items during formations, ceremonies, or events where uniformity is required. A Masonic apron over a Space Force uniform would normally be unauthorized unless specifically approved (United States Space Force, 2025).

 

Coast Guard: Coast Guard uniform regulations explicitly prohibit civilian ceremonial regalia while in 

uniform, with a narrow allowance for certain academic hoods worn over the left forearm. A Masonic apron over a Coast Guard uniform would normally be prohibited (United States Coast Guard, 2020).

 

How this should work in military lodges

 

A “military lodge” does not create a military-uniform exception by itself. The lodge may be Masonic in membership, location, or tradition. However, the service member’s uniform is still governed by the member’s branch regulations, command policy, installation policy, and any approved religious-accommodation process (Department of Defense, 2020; Department of the Army, 2021; Department of the Navy, n.d.).

 

The best practice is for members to wear civilian formal or business attire for lodge work, then wear the Masonic apron and other Masonic regalia as required by the lodge. For official military ceremonies, the service member should wear the prescribed military uniform without Masonic or other fraternal regalia unless written approval has been granted. For mixed military and lodge events, the event organizer should obtain a command decision in writing before the event.

 

For the photos circulating online, I would not call it a violation without knowing the duty status, event type, and whether authorization existed. However, under normal U.S. military branch rules, a Masonic apron over a military uniform is not, by default, authorized as wearable.

 

References

 

10 U.S.C. § 774. (n.d.). Religious apparel: Wearing while in uniform. Office of the Law Revision Counsel, U.S. House of Representatives. https://uscode.house.gov/view.xhtml?edition=prelim&f=treesort&jumpTo=true&num=0&req=%28title%3A10+section%3A774+edition%3Aprelim%29+OR+%28granuleid%3AUSC-prelim-title10-section774%29

Department of Defense. (2020, September 1). Department of Defense Instruction 1300.17: Religious liberty in the Military Services. https://www.esd.whs.mil/Portals/54/Documents/DD/issuances/dodi/130017p.pdf

Department of the Air Force. (2024, February 29). DAFI 36-2903: Dress and personal appearance of Department of the Air Force personnel. https://static.e-publishing.af.mil/production/1/af_a1/publication/dafi36-2903/dafi36-2903.pdf

Department of the Army. (2021, January 26). Army Regulation 670-1: Wear and appearance of Army uniforms and insignia. https://www.usarcent.army.mil/Portals/1/AR%20670-1%20Wear%20and%20Appearance%20of%20Army%20Uniforms%20and%20Insignia.pdf

Department of the Navy. (n.d.). U.S. Navy uniform regulations: 7201-7205 general regulations. MyNavyHR. https://www.mynavyhr.navy.mil/References/US-Navy-Uniforms/Uniform-Regulations/Chapter-7/7201-7205-General-Regulations/

Grand Lodge of Ohio. (2023, August 2). The meaning of Masonic aprons. https://www.freemason.com/meaning-masonic-aprons/

United Grand Lodge of England. (n.d.). Freemasonry FAQs: Answers to common questions. https://www.ugle.org.uk/discover-freemasonry/frequently-asked-questions

United States Coast Guard. (2020, July 7). Uniform regulations, COMDTINST M1020.6K. https://media.defense.gov/2020/Jul/09/2002451108/-1/-1/0/CIM_1020_6K.PDF

United States Marine Corps. (2018, May 1). Marine Corps uniform regulations, MCO 1020.34H. https://www.marines.mil/portals/1/Publications/MCO%201020.34H%20v2.pdf

United States Space Force. (2025, August 14). SPFI 36-2903: Dress and appearance. https://static.e-publishing.af.mil/production/1/ussf/publication/spfi36-2903/spfi36-2903.pdf

 

 

Gen X, Gen Z, and the Same Old Road with Different Potholes

One of the strange things about getting older is watching younger people go through things that feel very familiar.

As a Gen X’er, it is easy to look at Gen Z and think, “I have seen this before.” The confidence, the bad choices, the ignored advice, the belief that older people just do not understand. We had all of that too. We just did it with less internet, worse hair, and fewer cameras pointed at us.

But it would be unfair to say Gen Z is simply repeating Gen X with better phones. The world really is different now.

Gen X got to make a lot of mistakes in private. Gen Z is growing up in a world where one bad moment can be recorded, shared, judged, and saved forever. That changes things. It adds pressure that many of us did not have when we were young.

The money side is different, too. College, housing, careers, and adulthood all come with a steeper price tag now. A lot of the old advice still has value, but some of the old timelines no longer work the same way.

That is where both generations could probably give each other a little more grace.

Gen X has lived long enough to recognize some patterns. We know that some decisions age badly. We know that not every opportunity comes around twice. We know that a little patience, humility, and self-control can save a person a lot of trouble.

Gen Z, on the other hand, is trying to grow up in a world that moves faster, watches more closely, and demands more visibility than anything Gen X had to deal with at that age.

So maybe the point is not for Gen X to lecture Gen Z, or for Gen Z to dismiss Gen X as outdated. Maybe the better answer is somewhere in the middle.

Gen X can admit that the game board has changed.

Gen Z can admit that some mistakes are older than Wi-Fi.

And maybe both sides can agree on this: youth has energy, age has perspective, and life would be a lot easier if those two things showed up at the same time.

Happy St. Patrick's Day!

 Happy St. Patrick's Day! I made this today:

=============================================================

Medieval Corned Beef
British Isles - Medieval 
(Honey-basted roasted corned beef.)
City/Region: Ireland 
Time Period: c. 1100
URL: https://www.tastinghistory.com/recipes/medievalcornedbeef


Corned beef’s popularity fell in medieval Ireland because most of the good corned beef was sent overseas to England.  Pork was cheaper to raise, so many ate bacon and cabbage until the Irish Potato Famine, when many immigrated to America. The neighborhoods where they tended to move to were serviced by Kosher butchers, who didn’t have any bacon, but did have plenty of corned beef. This recipe is derived from a poem written around 1100, which describes how corned beef was prepared. The main difference between this medieval preparation and modern versions is the honey. The combination of corned beef's saltiness and honey's sweetness is so wonderful. Delicious!

“Tender corned beef…and honey in the comb, and English salt…He rubbed the honey and the salt into one piece after another.” 
— Aislinge Maic Con Glinne (The Vision of Mac Con Glinne), c. 1100

Ingredients:

4 lbs (2 kg) corned beef brisket (my brisket was only 3 pounds...)
1/4 cup (85 g) honey
1/2 teaspoon salt
(I added 1 shot of Jamison's Irish Whiskey because...)

Instructions:
1. Preheat the oven to 325°F (165°C).
2. In a large pot, cover the corned beef with water and bring to a boil. Boil for 1 minute, then drain. Repeat at least once. This process will help reduce the corned beef's saltiness. After you’ve boiled the corned beef at least twice, place it on a large piece of foil.
3. Mix the salt and the honey, then brush it generously all over the corned beef. Wrap the corned beef in the foil and place it on a baking sheet or roasting pan. Roast in the oven for 1 hour per pound.
4. 30 minutes before the corned beef is done, open the foil and raise the temperature of the oven to 400°F (205°C) to brown the top.
5. Slice and serve it forth with Cabbage Pottage.

=============================================================
Cabbage Pottage
British Isles - Medieval 
(Cabbage cooked with leeks and onions.)
City/Region: Ireland | England
Time Period: 14th Century
URL: https://www.tastinghistory.com/recipes/cabbagepottage


“Caboches in potage. Take caboches and quarter them, and seeth them in gode broth with oynouns mynced and the whyte of lekes slit and carved small”      
— Curye on Inglysch, 14th Century

Finding a historical recipe from Ireland is really hard, and finding a medieval Irish recipe is basically impossible. I started with a medieval English recipe from a few hundred years after the corned beef description. I adjusted it to match the ingredients we know were available in Ireland around 1100. The cabbage pottage is simple to prepare and has a mild flavor, though there is a touch of heat from the onions and leeks. The simplicity of the dish pairs perfectly with the complex Medieval Corned Beef. 

Ingredients:
 1 large head of cabbage, quartered
 1 large onion, chopped fine
 2 leeks, sliced into half rings
 2 cups beef broth (I ended up using 4 cups...)
 1 teaspoon salt
 1 teaspoon pepper, optional

Instructions:

1. Leeks can have dirt and silt in them, so swish the sliced leeks in a large bowl of water to clean them.
2. Combine the vegetables in a pot and sprinkle them with the salt and optional pepper.
3. Pour in the beef broth and bring it to a boil. Reduce to a simmer and cover. Cook for 20 to 30 minutes.
4. Serve it forth with Medieval Corned Beef.

=============================================================



Graduation Memento!

 
I got this in the mail yesterday. A pretty cool memento!

Ode to Cybersecurity



The History of “Cyber”: How an Ancient Word Shaped the Digital Age

 

What’s in a Word? The Origin of “Cyber”

If you spend any time in the worlds of technology, security, or defense, you’ve probably noticed that cyber has become the ultimate prefix. We hear about cybersecurity, cybercrime, cyber operations, and even cyber cafés. But where did this little word actually come from, and why has it stuck around?

Let’s take a quick journey through history.


From Ancient Greece to Modern Tech

The story begins in ancient Greece. The word κυβερνήτης (kybernētēs) meant helmsman or steersman—someone who guides a ship. That idea of steering or governing is at the root of the modern term.

Fast-forward to the 20th century, when American mathematician Norbert Wiener drew on this concept. In 1948, he published Cybernetics: Or Control and Communication in the Animal and the Machine. For Wiener, cybernetics was the science of control systems, feedback loops, and communication, whether in a living brain or a mechanical device. The Greek “steersman” was now steering machines and information.


Cybernetics Meets Computing

As computing matured in the 1960s and 70s, the language of cybernetics seeped into computer science and artificial intelligence. Researchers began using “cyber” as shorthand for anything involving machines, systems, and information flow.

It was a technical term, but one waiting to jump into popular culture.


Enter Cyberspace

The big leap came in 1984 when science fiction author William Gibson published Neuromancer. In it, he described cyberspace as a “consensual hallucination” shared by millions—a digital world inside computer networks.

That vision stuck. By the 1990s, as the internet went mainstream, “cyber” became glued to nearly every online activity: cyber cafés, cybersex, cybercrime, and more. What had once been a mathematical idea now belonged to pop culture.


Today’s “Cyber”

Today, “cyber” has narrowed its focus. Governments, businesses, and security professionals use it mostly to describe the digital domain—especially the threats and defenses around it. For example:

  • Cybersecurity: protecting systems, networks, and data

  • Cyber operations: digital activities carried out by militaries or governments

  • Cyber threats: malicious activity in the online space

In other words, “cyber” is shorthand for the intersection of technology, information, and control—exactly where it started back with Wiener.


Why It Matters

Words carry history. Understanding where “cyber” comes from helps us see that our conversations about digital safety, control, and communication aren’t entirely new—they’re rooted in centuries-old ideas about guidance, governance, and steering through uncertainty.

So next time you hear “cyber,” remember: it’s not just jargon. It’s a word with a journey—one that began on the decks of Greek ships and found its way into the heart of our digital age.