Getting to Know The Linux 'env' Command

Warming Up
Perhatikan apa yang terjadi ketika saya mengetikkan perintah berikut di terminal:
envoutput-nya:
SHELL=/bin/bashCOLORTERM=truecolorVSSCRIPT_PATH=/usr/lib/python3.14/site-packages/vapoursynth/libvsscript.soMEMORY_PRESSURE_WRITE=c29tZSAyMDAwMDAgMjAwMDAwMAA=KITTY_PID=6073XCURSOR_SIZE=24EDITOR=nvimXDG_SEAT=seat0PWD=/home/wildanLOGNAME=wildanXDG_SESSION_TYPE=waylandSYSTEMD_EXEC_PID=628DESKTOP_STARTUP_ID=EVhVwlzH3PgOpF8XMi3n8yRlOKTcUwelKITTY_PUBLIC_KEY=1:M8)nOKvC@%@h_OQ|3U)}X#z>0Z;INvpL{cFgkt<9MOTD_SHOWN=pamHOME=/home/wildanLANG=en_US.UTF-8XDG_CURRENT_DESKTOP=niriMEMORY_PRESSURE_WATCH=/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/session.slice/niri.service/memory.pressureSTARSHIP_SHELL=bashWAYLAND_DISPLAY=wayland-1KITTY_WINDOW_ID=2INVOCATION_ID=3b21282c381d401a82b7f5305672891dNIRI_SOCKET=/run/user/1000/niri.wayland-1.628.sockMANAGERPID=482STARSHIP_SESSION_KEY=2880615391969817XDG_SESSION_CLASS=userTERMINFO=/usr/lib/kitty/terminfoTERM=xterm-kittyUSER=wildanVISUAL=nvimSHLVL=3XDG_VTNR=1XDG_SESSION_ID=1MANAGERPIDFDID=4235XDG_RUNTIME_DIR=/run/user/1000DEBUGINFOD_URLS=https://debuginfod.archlinux.orgJOURNAL_STREAM=10:12511XCURSOR_THEME=defaultPATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/wildan/.local/bin/:/home/wildan/.local/bin/DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/busMAIL=/var/spool/mail/wildanKITTY_INSTALLATION_DIR=/usr/lib/kitty_=/usr/bin/envApa itu semua?
Fungsinya apa?
Kita akan bahas..
What is env?
env adalah akronim dari Environment Variable. Environment Variable sendiri merupakan sebuah objek (variabel) yang menyimpan data yang dapat digunakan oleh satu atau lebih aplikasi. Sederhananya, Environment Variable adalah variabel dengan sebuah nama dan sebuah nilai.1 Variabel tersebut memiliki embel-embel “Environment” karena memang memiliki batas lingkungan (scope) dimana mereka dapat diakses.
Kita akan bahas mengenai “scope” ini nanti.
Perhatikan Environment Variable berikut:
SHELL=/bin/bash
Keterangan:
SHELL: ini adalah nama variabel./bin/bash: ini adalah nilai (value) variabel-nya.
Jadi, SHELL=/bin/bash adalah sebuah variabel, dimana namanya adalah SHELL dan nilai dari SHELL yaitu /bin/bash.
What is env used for?
Nilai-nilai (values) dari Environment Variable dapat berupa lokasi file binary di file system, default editor, hingga system locale settings (pengaturan preferensi bahasa, format waktu, dan pengkodean karakter). Tujuannya adalah untuk menyediakan kemudahan untuk berbagi pengaturan konfigurasi diantara banyak aplikasi dan proses di Linux.1
Sebagai ilustrasi, berikut adalah beberapa jenis value Environment Variable:
- Lokasi file binary
SHELL=/bin/bash- Default editor
EDITOR=vim- System locale settings
LANG=en_US.UTF-8env UsageBerikut adalah contoh konkret penggunaan Environment Variable di Linux.
Misalkan saya ingin meng-edit suatu file teks (.txt), tapi, saya tidak tahu aplikasi/tools file editor apa yang ter-install dan dapat saya gunakan untuk meng-edit file tersebut. Saya bisa memanfaatkan Environment Variable untuk meng-edit-nya:
$EDITOR ~/notes/mytoolsNah, karena nilai (value) dari Environment Variable EDITOR-nya (misalnya) adalah nvim, maka file tersebut akan terbuka dengan program nvim:

Types of Environment Variable
Seperti sudah disinggung tadi di awal soal scope, ada 3 jenis Environment Variable berdasarkan scope-nya:2
- System-wide Environment Variable
Environment Variable pada scope ini adalah Environment Variable yang tersedia untuk semua user dan di-set oleh system administrator. Variable-variabel tersebut “didefinisikan” di beberapa tempat (file) berikut:
/etc/environment/etc/profile/etc/bash.bashrc
- User-specific Environment Variable
Environment Variable pada scope ini adalah Environment Variable yang tersedia dan di-set oleh user tertentu, di:
~/.bashrc~/.profile~/.bash_profile
- Shell Variable
Variable ini hanya tersedia di shell yang sedang berjalan sehingga dapat dibuat dan dimodifikasi langsung dari shell atau terminal yang sedang berjalan. Misalnya:
export EDITOR=nanoThe Main Part
How to View
Environment Variable dapat dilihat (atau ditampilkan) dengan beberapa cara berikut:
- Using the
printenv
# menampilkan semua Environment Variableprintenv
# menampilkan Environment Variable tertentu (SHELL misalnya)printenv SHELLecho $SHELL- Using the
env
env- Using the
set
set | lessHow to Set / Export
Kita dapat men-set Environment Variable dengan 2 cara, tergantung tujuan:
1. Temporarily
Ketik perintah berikut langsung di terminal / shell prompt:
export TEST="I use Arch, btw!"
# lihat hasilnyaecho $TESTPerlu diingat bahwa men-set Environment Variable seperti ini hanya akan berlaku saat sesi tersebut masih aktif. Jika sesi berakhir, maka Environment Variable-nya juga akan hilang.
2. Permanently
Kita perlu menyimpan Environment Variable di file-file yang sudah disebutkan di atas (/etc/environment, /etc/profile, dan /etc/bash.bashrc untuk System-wide & ~/.bashrc, ~/.profile, dan ~/.bash_profile untuk User Specific) agar permanen (tidak hilang ketika sesi selesai).
Misalnya, saya akan men-set Environment Variable ke
~/.bashrc:
echo TEST_PERMANENT="I use Arch, btw!" >> ~/.bashrc
# untuk mengaktifkan Environment Variablesource ~/.bashrc
# lihat hasilnyaecho 'TEST_PERMANENT="I use Arch, btw!"'How to Unset
Untuk menghapus sebuah Environment Variable:
unset TEST
# lihat perubahannya (gak ada output)echo $TESTJika Environment Variable di-set secara permanen, maka disamping hanya mengandalkan perintah unset, akan lebih baik jika kita juga menghapusnya dari file yang kita gunakan untuk menyimpannya.

Real Use Case
Apa fungsi konkret dari Environment Variable?
Misalnya, kita sedang bekerja dengan bash scripting untuk membuat sebuah aplikasi dan kita memerlukan sebuah ip address sebagai percobaan. Namun, IP tersebut akan kita tulis berulang kali di dalam bash script tersebut. Nah, daripada menulis IP yang sama berulang kali, kita dapat memanfaatkan Environment Variable ini.
Mula-mula, kita set terlebih dahulu Environment Variable-nya dengan menuliskan nama variabelnya berikut dengan nilainya. Misal:
export IP_ADDR="192.168.34.99"Kemudian, di dalam bash script tersebut, kita hanya perlu “memanggil” nama variabelnya saja alih-alih nomor-nomor IP tersebut:
#!/usr/bin/env bash# Port scanner TCP sederhana untuk percobaan di VM sendiri.# Gunakan hanya pada sistem yang Anda miliki atau punya izin untuk diuji.## Pemakaian:# ./port_scanner.sh [HOST] [PORTS] [TIMEOUT] [WORKERS]# Jika HOST dikosongkan, dipakai nilai variabel lingkungan IP_ADDR.## Contoh:# ./port_scanner.sh# ./port_scanner.sh "$IP_ADDR" 1-65535# ./port_scanner.sh "$IP_ADDR" 22,80,443,3306 1
HOST="${1:-$IP_ADDR}"PORTS="${2:-1-1024}"TIMEOUT="${3:-0.5}"WORKERS="${4:-100}"
if [[ -z "$HOST" ]]; then echo "Error: IP target tidak ditemukan. Set variabel lingkungan IP_ADDR atau berikan IP sebagai argumen pertama." >&2 exit 1fi
export HOST TIMEOUT
# Ubah "1-1024" atau "22,80,443" menjadi daftar port (satu per baris)expand_ports() { local part IFS=',' read -ra parts <<< "$1" for part in "${parts[@]}"; do if [[ "$part" =~ ^([0-9]+)-([0-9]+)$ ]]; then seq "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" elif [[ "$part" =~ ^[0-9]+$ ]]; then echo "$part" fi done | awk '$1 >= 1 && $1 <= 65535' | sort -un}
port_list=$(expand_ports "$PORTS")total=$(echo "$port_list" | wc -l)
echo "Memindai $HOST ($total port)..."echo
# Pindai paralel memakai /dev/tcp bawaan bashopen_ports=$(echo "$port_list" | xargs -P "$WORKERS" -I{} bash -c ' timeout "$TIMEOUT" bash -c "exec 3<>/dev/tcp/$HOST/$1" 2>/dev/null && echo "$1"' _ {} | sort -n)
if [[ -n "$open_ports" ]]; then printf '%-8s%-8s%s\n' "PORT" "STATE" "SERVICE" while read -r p; do svc=$(getent services "$p/tcp" | awk '{print $1}') printf '%-8s%-8s%s\n' "$p" "open" "${svc:-unknown}" done <<< "$open_ports" count=$(echo "$open_ports" | wc -l)else echo "Tidak ada port terbuka yang ditemukan." count=0fi
echoecho "Selesai. $count port terbuka."AI Usage
Kode di atas di-generate oleh AI Antrophic Claude
Footnotes
Support & Share
If this article helped you, please share or support!












