Permission & Ownership — Terminal

File Permission di Linux/macOS Setiap file dan folder di sistem Unix/Linux memiliki permission (izin) yang mengontrol siapa yang boleh membaca, menulis, dan…

Setiap file di Linux dan macOS punya pemilik dan izin (permission): siapa yang boleh membaca, mengubah, dan menjalankannya. Mirip kamar kos. Ada penghuni kamarnya sendiri (owner), teman-teman satu lantai (group), dan tamu dari luar (others). Masing-masing punya hak sendiri-sendiri: boleh melihat isi kamar, boleh mengubah barangnya, boleh memakainya.

🧪 Tebakan cepat: deploy.sh punya izin 644, dan kamu pemiliknya. Kamu menjalankan ./deploy.sh. Jalan, atau ditolak? Tebak dulu, jawabannya ada di bagian "Angka: r = 4, w = 2, x = 1".

Membaca ls -l

$ ls -l deploy.sh
-rw-r--r-- 1 budi dev 37 Oct  8 09:15 deploy.sh
Bagian Contoh Artinya
jenis - - file biasa, d folder, l symlink
owner rw- pemilik boleh baca dan tulis
group r-- anggota grup dev cuma boleh baca
others r-- semua orang lain cuma boleh baca
pemilik budi user yang memiliki file
grup dev grup file
ukuran 37 37 byte

Tiap trio selalu urut r, w, x, dan - artinya izin itu gak diberikan:

Sistem cuma memakai satu trio untuk tiap orang: kamu pemiliknya, pakai trio owner. Bukan pemilik tapi anggota grupnya, pakai trio group. Selain itu, trio others.

Angka: r = 4, w = 2, x = 1

Tiap trio bisa ditulis sebagai satu angka: jumlahkan nilai huruf yang ada.

Trio Hitungan Angka
rwx 4 + 2 + 1 7
rw- 4 + 2 6
r-x 4 + 1 5
r-- 4 4
--- 0

Tiga trio jadi tiga angka, urut owner, group, others. Jadi -rwxr-xr-- adalah 754, dan -rw-r--r-- adalah 644.

$ ./deploy.sh
bash: ./deploy.sh: Permission denied
$ chmod 755 deploy.sh
$ ls -l deploy.sh
-rwxr-xr-x 1 budi dev 37 Oct  8 09:15 deploy.sh
$ ./deploy.sh
Deploy dimulai...
Angka String Biasanya untuk
644 rw-r--r-- file biasa
755 rwxr-xr-x script dan folder
600 rw------- file rahasia: .env, private key
700 rwx------ folder pribadi, misalnya ~/.ssh

Mode simbolik: tambah atau cabut satu izin

Kadang kamu cuma mau mengubah satu izin tanpa menghitung ulang semuanya:

chmod u+x deploy.sh   # owner dapat x: rw-r--r-- jadi rwxr--r--
chmod go-r .env       # group dan others kehilangan r
chmod a+r README.md   # semua (all) boleh baca
chmod u=rw,go= .env   # set persis: owner rw-, sisanya ---, sama dengan 600

Pemilik dan grup: chown

sudo chown sari deploy.sh                  # owner jadi sari
sudo chown sari:dev deploy.sh              # owner jadi sari, grup jadi dev
sudo chown -R www-data:www-data storage/   # -R: folder beserta seluruh isinya

Mengganti pemilik file butuh hak root, makanya pakai sudo. Setelah itu, ls -l menampilkan pemilik barunya, dan trio owner berlaku untuk dia.

Dari string ke angka di JavaScript

Latihan pelajaran ini: parsePermission mengubah string 9 huruf jadi angka, dan describePermission mengubah angka jadi teks.

function parsePermission(permStr) {
  const VALUES = { r: 4, w: 2, x: 1 };
  const digits = [];
  for (let i = 0; i < 9; i += 3) {
    const trio = permStr.slice(i, i + 3); // "rwx", lalu "r-x", lalu "r--"
    let total = 0;
    for (const char of trio) total += VALUES[char] || 0; // "-" gak ada di VALUES, jadi 0
    digits.push(total);
  }
  return Number(digits.join("")); // [7, 5, 4] jadi "754" jadi 754
}

function describePermission(octal) {
  const NAMES = ["none", "x", "w", "wx", "r", "rx", "rw", "rwx"];
  const [owner, group, others] = String(octal).split("").map(Number);
  return "owner:" + NAMES[owner] + ", group:" + NAMES[group] + ", others:" + NAMES[others];
}

console.log(parsePermission("rwxr-xr--")); // 754
console.log(describePermission(755)); // owner:rwx, group:rx, others:rx
console.log(describePermission(640)); // owner:rw, group:r, others:none

⚠️ Jebakan yang sering ketemu

TL;DR: ls -l menampilkan jenis file lalu tiga trio izin, owner, group, others, misalnya -rwxr-xr--. r baca, w tulis, x jalankan (atau masuk folder), dan tiap orang cuma memakai satu trio: owner dulu, lalu group, lalu others. Dalam angka r = 4, w = 2, x = 1, dijumlahkan per trio: rwxr-xr-- = 754, 644 file biasa, 755 script dan folder, 600 file rahasia, 700 folder pribadi. chmod u+x menambah x untuk pemilik saja, chmod +x untuk semua. sudo chown user:grup file mengganti pemilik. Jangan pakai 777.

Yang akan kamu pelajari