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.shpunya izin644, 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:
- r (read): boleh membaca isinya. Untuk folder: boleh melihat daftar isinya.
- w (write): boleh mengubah isinya. Untuk folder: boleh membuat dan menghapus file di dalamnya.
- x (execute): boleh menjalankannya sebagai program. Untuk folder: boleh masuk (
cd).
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...
- Dengan
644, trio owner-nyarw-: gak adax. Jadi./deploy.shditolak, walaupun kamu pemiliknya. Itu jawaban tebakannya. chmod 755memberi ownerrwx(7), group dan othersr-x(5). Sekarang semua boleh menjalankannya, tapi cuma pemilik yang boleh mengubahnya.- Script shell butuh
rjuga, karena bash harus membaca isinya. Tanpar, dia tetap ditolak walaupun adax.
| 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
- Siapa:
u(user, si owner),g(group),o(others),a(all, semuanya). - Caranya:
+tambah,-cabut,=set persis. chmod +x deploy.shtanpa huruf siapa memberixke semua (dengan setelan umumumask 022). Kalau maksudnya cuma pemilik, tulisu+x.
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
slice(i, i + 3)mengambil trio di posisi 0, 3, lalu 6.VALUES[char] || 0: huruf-gak ada diVALUES, hasilnyaundefined, jadi dihitung 0.NAMESdisusun supaya index-nya sama dengan angkanya:NAMES[6]adalah"rw",NAMES[0]adalah"none". Hurufnya ditulis tanpa-.
⚠️ Jebakan yang sering ketemu
chmod 777buat "membereskan" error. Semua user di server jadi boleh mengubah file itu. Biasanya yang salah pemiliknya: betulkan denganchown, lalu pakai755atau644.+xdikira cuma untuk pemilik.chmod +xmemberixke semua. Untuk pemilik saja,chmod u+x.- Mengira izin others ikut berlaku untuk pemilik.
chmod 077 rahasia.txtbikin pemiliknya sendiri ditolak (cat: rahasia.txt: Permission denied), karena untuk dia yang dipakai trio owner,---. - Format di latihan.
parsePermissionmengembalikan angka754, bukan string huruf.describePermissionmenulis huruf tanpa-(rx, bukanr-x), angka 0 jadinone, dan formatnya persisowner:rwx, group:rx, others:rx.
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.