Parsing file /proc/cmdline adalah teknik esensial bagi administrator sistem Linux dan pengembang kernel untuk membaca parameter boot yang diteruskan oleh bootloader (seperti GRUB atau U-Boot) ke kernel saat sistem dinyalakan. File semu (pseudo-file) ini berisi satu baris teks panjang yang memuat seluruh argumen kernel yang aktif saat ini.
Untuk mengekstrak nilai parameter tertentu dari /proc/cmdline secara programatik atau melalui baris perintah, Anda dapat memanfaatkan utilitas teks standar Linux seperti awk, sed, atau menulis skrip pendek menggunakan bahasa pemrograman seperti Python atau Bash.
Metode Cepat Menggunakan Bash dan Awk
Cara paling cepat untuk membaca parameter individual tanpa menginstal dependensi tambahan adalah dengan memproses string /proc/cmdline menggunakan kombinasi tr dan awk atau parameter expansion bawaan Bash.
Contoh 1: Menggunakan Bash Parameter Expansion
#!/bin/bash
# Membaca isi /proc/cmdline
cmdline=$(cat /proc/cmdline)
# Mencari parameter tertentu, contoh: 'root'
for param in $cmdline; do
case "$param" in
root=*)
root_val="${param#*=}"
echo "Nilai root: $root_val"
;;
esac
done
Contoh 2: Menggunakan Awk untuk Ekstraksi Nilai Key-Value
# Mendapatkan nilai dari parameter 'quiet' atau 'console'
awk -v RS=' ' '$1 ~ /^console=/' /proc/cmdline
Metode Pemrograman dengan Python
Bagi skrip otomasi yang lebih kompleks, Python menyediakan cara yang sangat bersih dan mudah dibaca untuk mem-parsing argumen berbasis spasi dan tanda sama dengan (=) di dalam /proc/cmdline.
#!/usr/bin/env python3
def parse_cmdline():
kernel_args = {}
try:
with open('/proc/cmdline', 'r') as f:
content = f.read().strip()
params = content.split()
for p in params:
if '=' in p:
key, value = p.split('=', 1)
kernel_args[key] = value
else:
kernel_args[p] = True
except FileNotFoundError:
print("File /proc/cmdline tidak ditemukan. Bukan sistem Linux?")
return kernel_args
if __name__ == '__main__':
args = parse_cmdline()
print(f"Parameter 'root': {args.get('root', 'Tidak ditemukan')}")
print(f"Mode quiet aktif: {'quiet' in args}")
Matriks Perbandingan Metode Parsing
| Metode | Kelebihan | Kekurangan | Rekomendasi Penggunaan |
|---|---|---|---|
| Bash Built-in | Tanpa dependensi eksternal, sangat cepat untuk skrip init sederhana. | Kurang fleksibel untuk struktur argumen yang rumit atau bersarang. | Skrip shell ringan atau initramfs. |
| Awk / Sed | Satu baris perintah (one-liner) di terminal, sangat ringkas. | Sintaks sulit dibaca jika logika pembersihan string semakin rumit. | Pengecekan cepat via SSH atau debugging manual. |
| Python | Struktur data rapi (dictionary), mudah menangani argumen tanpa nilai (flag). | Membutuhkan interpreter Python (tidak tersedia di minimal initramfs). | Daemon sistem, alat manajemen, atau skrip konfigurasi berbasis Python. |
Tips Troubleshooting Lapangan
Ketika melakukan parsing /proc/cmdline, perhatikan beberapa jebakan umum yang sering terjadi di lingkungan produksi:
- Karakter Baris Baru (Newline): Selalu gunakan method
.strip()atautr -d '\n'karena baris terakhir pada/proc/cmdlinediakhiri oleh karakter newline. - Parameter Ganda: Beberapa parameter kernel dapat didefinisikan lebih dari sekali (misalnya opsi
earlyprintkatauconsole). Pastikan logika parser Anda mendukung penyimpanan sebagai list jika diperlukan. - Flag Tanpa Nilai: Parameter seperti
quiet,splash, ataunomodesettidak memiliki tanda=dan nilai di sebelah kanannya. Parser harus memperlakukannya sebagai booleanTrueatau flag aktif.