Perintah stat Linux: ukuran, izin, inode, dan stempel waktu
Perintah stat di Linux menampilkan metadata file atau direktori: ukuran, izin, pemilik, inode, jumlah hard link, alokasi blok, dan stempel waktu. Dibandingkan ls -l, perintah ini memberikan rincian yang lebih lengkap dan dapat menampilkan hanya nilai yang diperlukan untuk skrip shell.
Dalam artikel ini, kami menjelaskan cara membaca output default dari stat GNU Coreutils, perbedaan antara atime/mtime/ctime/Birth, tautan simbolik, informasi sistem file, dan cara menggunakan --format.
Apa itu perintah stat?
stat mengambil informasi status yang dikelola oleh sistem file, yaitu metadata, bukan isi file. Anda hanya perlu menentukan file atau direktori yang ingin diperiksa sebagai argumen.
Panduan ini memakai GNU stat dari GNU Coreutils. Opsi pada BSD atau macOS dapat berbeda, khususnya arti -f; pastikan hasil stat --version menunjukkan implementasi GNU sebelum memakai contoh ini. Nama seperti report.txt dan disk.img adalah contoh file yang harus sudah tersedia. Jalur seperti /usr/bin/bash bergantung pada sistem Anda.
stat report.txt
stat /etc
stat /usr/bin/bash
Tujuannya berbeda dari perintah file untuk mengenali format dari isi. file memperkirakan format, sedangkan stat melaporkan metadata yang dikelola sistem file. Inode adalah struktur metadata yang memiliki nomor pengenal dalam satu sistem file; hard link adalah entri nama lain dalam direktori yang merujuk inode yang sama.
Sintaks dasar dan penggunaan
stat [opsi] berkas...
Anda dapat menentukan tidak hanya satu file tetapi juga beberapa jalur sekaligus.
stat file1.txt file2.txt
stat src tests
stat "annual report.pdf"
Untuk nama file yang diawali dengan tanda hubung, tentukan setelah -- agar tidak salah diartikan sebagai opsi.
stat -- -sample.txt
Anda dapat memeriksa versi GNU stat dan opsi yang didukung dengan perintah berikut.
stat --version
stat --help
info '(coreutils) stat invocation'
Cara membaca keluaran dasar
Berikut ilustrasi keluaran untuk file biasa, bukan nilai yang pasti muncul di komputer Anda. Format perangkat, angka, dan bidang yang tersedia bergantung pada versi, sistem file, serta sistem operasi. Zona waktu mengikuti variabel TZ, atau pengaturan sistem jika variabel itu tidak disetel.
File: report.txt
Size: 4096 Blocks: 8 IO Block: 4096 regular file
Device: 8,1 Inode: 1234567 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2026-09-21 10:15:30.000000000 +0900
Modify: 2026-09-21 10:14:02.000000000 +0900
Change: 2026-09-21 10:14:02.000000000 +0900
Birth: 2026-09-20 19:42:11.000000000 +0900
Setiap item memiliki arti sebagai berikut.
| Item | Arti |
|---|---|
File |
Nama file atau direktori yang diperiksa. |
Size |
Ukuran logis file, biasanya ditampilkan dalam byte. |
Blocks |
Jumlah blok yang dialokasikan untuk file. File sparse atau sistem file terkompresi mungkin menunjukkan perbedaan besar antara ukuran logis dan alokasi aktual. |
IO Block |
Informasi ukuran blok yang direkomendasikan untuk input/output yang efisien. |
Device |
Nomor yang mengidentifikasi perangkat tempat file berada. |
Inode |
Ini adalah nomor inode yang mengidentifikasi metadata file dalam sistem file. |
Links |
Jumlah tautan keras yang menunjuk ke inode yang sama. |
Access |
Menampilkan izin dan jenis file dalam bentuk oktal dan simbolik. |
Uid, Gid |
ID numerik dan nama pemilik pengguna serta grup. |
Access, Modify, Change, Birth |
Stempel waktu terkait akses, modifikasi konten, perubahan status, dan pembuatan. |
Perbedaan antara ls -l dan stat
| Item perbandingan | ls -l |
stat |
|---|---|---|
| Tujuan Utama | Membandingkan beberapa file dengan cepat dalam bentuk daftar. | Memeriksa metadata rinci dari file yang ditentukan. |
| Waktu dasar | Utamanya menampilkan waktu modifikasi secara singkat. | Menampilkan waktu akses, modifikasi, perubahan status, dan pembuatan secara terpisah. |
| inode dan blok | Anda perlu menambahkan opsi untuk melihat beberapa informasi. | Menunjukkan inode, jumlah tautan, blok yang dialokasikan, dll., dalam keluaran default. |
| Keluaran skrip | Mengurai daftar untuk manusia rentan terhadap perbedaan lingkungan dan nama file. | Anda dapat langsung menentukan bidang yang diperlukan dengan --format. |
| Informasi sistem berkas | Tidak disediakan secara langsung. | Gunakan -f untuk menampilkan status sistem file di mana file tersebut berada. |
Saat menelusuri nama, ukuran, dan izin dari beberapa file, ls -l nyaman digunakan, dan jika Anda membutuhkan bidang yang akurat dari satu file atau nilai untuk otomatisasi, stat cocok digunakan.
Memahami ukuran file dan blok yang dialokasikan
Memeriksa ukuran logis
Output default Size adalah jumlah total byte yang diwakili oleh file. Untuk hanya menampilkan nilai yang diperlukan, gunakan %s.
stat -c '%s' disk.img
stat -c '%n: %s bytes' file1 file2
Size dari sebuah direktori bukanlah jumlah semua file di dalamnya. Itu adalah ukuran direktori itu sendiri yang menyimpan entri direktori. Untuk memeriksa total penggunaan isi, gunakan du.
Menghitung ruang yang dialokasikan
%b mengeluarkan jumlah blok yang dialokasikan, dan %B mengeluarkan ukuran dalam byte dari satu blok.
stat -c 'size=%s blocks=%b block-size=%B' disk.img
Jumlah byte yang dialokasikan secara perkiraan dapat dihitung dengan %b × %B. File sparse mungkin memiliki ruang yang dialokasikan sebenarnya jauh lebih kecil daripada ukuran logis, dan dengan fitur seperti kompresi sistem file atau blok yang dibagi, sulit untuk menentukan penggunaan penyimpanan fisik hanya dari nilai ini.
File sparse menyimpan sebagian rentang nol tanpa mengalokasikan blok data untuk seluruh rentang tersebut. Jangan samakan IO Block, yang merupakan petunjuk ukuran transfer I/O, dengan satuan %B yang dipakai menghitung alokasi.
Memeriksa izin dan kepemilikan
Menampilkan izin oktal dan izin simbolik
%a menampilkan izin oktal, dan %A menampilkan izin yang dapat dibaca manusia termasuk tipe file.
stat -c '%a %A %n' script.sh
Jika mode script.sh memang 755 pada sistem Unix yang sesuai, keluarannya dapat berbentuk berikut. Perintah stat hanya membaca izin, tidak mengubahnya.
755 -rwxr-xr-x script.sh
Menampilkan pemilik dan grup
%U dan %G menampilkan nama pengguna dan grup, sedangkan %u dan %g menampilkan UID (user ID) serta GID (group ID) numerik. Angka tersebut adalah pengenal pemilik menurut sistem.
stat -c 'owner=%U(%u) group=%G(%g)' report.txt
Di lingkungan di mana nama yang sesuai dengan ID numerik tidak dapat ditemukan, bidang nama mungkin ditampilkan secara berbeda.
Memeriksa inode dan tautan keras
Menampilkan nomor inode
%i menampilkan nomor inode yang mengidentifikasi file dalam sistem file.
stat -c '%i %n' report.txt
Nomor inode tidak unik secara global di seluruh batas sistem file. Untuk membandingkan apakah file itu sama, Anda harus mempertimbangkan informasi perangkat bersama dengan inode.
Memeriksa jumlah hard link
%h adalah jumlah hard link yang menunjuk ke inode tersebut.
stat -c 'inode=%i links=%h name=%n' original.txt copy-link.txt
Contoh ini mengasumsikan original.txt dan copy-link.txt sudah tersedia. Untuk membandingkan identitas file secara langsung, gunakan stat -c '%d:%i %h %n' original.txt copy-link.txt: %d adalah nomor perangkat dalam desimal. Dua nama berbeda dengan pasangan perangkat dan inode yang sama dapat merujuk file yang sama melalui hard link. Tautan simbolik memiliki inode sendiri, sedangkan penyalinan biasa umumnya menghasilkan inode berbeda.
Perbedaan atime, mtime, ctime, dan Birth
Nama stempel waktu serupa, tetapi peristiwa yang mereka catat berbeda. Secara khusus, penting untuk tidak salah mengira ctime sebagai waktu pembuatan.
| Waktu | Arti | Contoh pemicu perubahan |
|---|---|---|
atime |
Waktu akses terakhir data file. | Membaca file. Namun, tergantung pada opsi mount dan kebijakan cache, mungkin tidak diperbarui setiap kali. |
mtime |
Waktu terakhir konten file dimodifikasi. | Menulis data file atau mengubah panjang konten. |
ctime |
Waktu terakhir status inode berubah. | Perubahan izin, pemilik, jumlah tautan, nama, atau isi file. Bukan waktu pembuatan. |
Birth |
Waktu file dibuat. | Dicatat sekali saat pembuatan jika didukung dan tidak berubah dengan perubahan status normal. |
Cetak waktu dalam format yang dapat dibaca manusia
%x, %y, %z, dan %w mencetak atime, mtime, ctime, dan Birth dalam format yang dapat dibaca manusia, masing-masing.
stat -c 'atime=%x
mtime=%y
ctime=%z
birth=%w' report.txt
Pada sistem file yang tidak mendukung Birth atau tidak dapat memperoleh nilainya, %w dapat ditampilkan sebagai tanda hubung.
Keluaran dalam detik sejak Epoch
%X, %Y, %Z, dan %W menampilkan waktu yang bersesuaian dalam detik sejak Unix Epoch, yaitu 1 Januari 1970 pukul 00:00:00 UTC.
stat -c 'atime=%X mtime=%Y ctime=%Z birth=%W' report.txt
Jika waktu pembuatan (Birth) tidak diketahui, %W menampilkan 0. Format %Y pada contoh menghasilkan detik bulat sehingga perubahan dalam detik yang sama dapat terlihat setara. GNU stat juga mendukung presisi pecahan pada format waktu, tetapi ketelitian nyata tetap bergantung pada sistem file dan sistem operasi.
Memeriksa informasi tautan simbolik
Melihat metadata dari tautan itu sendiri
Secara default, GNU stat tidak mengikuti tautan simbolik dan memeriksa tautan itu sendiri.
stat current.log
stat -c '%N | inode=%i | type=%F' current.log
%N dapat menampilkan nama file dalam tanda kutip bersama dengan targetnya untuk tautan.
Melihat metadata target dengan -L
Menggunakan -L atau --dereference memeriksa status target sebenarnya yang dituju oleh tautan.
stat -L current.log
stat -L -c '%n | inode=%i | type=%F | size=%s' current.log
Tautan simbolik yang rusak tidak dapat memeriksa target, jadi menggunakan -L akan menyebabkan kesalahan.
Cetak hanya bidang yang diinginkan
Menggunakan -c dan --format
-c atau --format menampilkan hasil dalam format yang ditentukan dan menambahkan jeda baris untuk setiap file.
stat -c '%n %s %a %U:%G' file1 file2
stat --format='name=%n type=%F inode=%i' report.txt
Apit string format dengan tanda kutip tunggal agar shell tidak menafsirkannya. --format tidak memproses escape seperti \n; gunakan --printf untuk itu. Status keluar 0 berarti berhasil, sedangkan nilai bukan nol berarti ada kegagalan. Saat memeriksa beberapa file, sebagian keluaran dapat muncul meskipun file lain gagal diperiksa.
Menyusun beberapa baris dengan --printf
--printf menafsirkan escape backslash tetapi tidak menambahkan pemutusan baris otomatis. Masukkan \n secara langsung jika diperlukan.
stat --printf='name=%n\nsize=%s\nmode=%a\n' report.txt
Saat memproses beberapa file, string format juga harus menyertakan pemisah antar file.
Jika nama dapat mengandung baris baru, format seperti stat --printf='%n\0%s\0' -- file1 file2 memberikan pasangan nama dan ukuran dengan pemisah NUL. Baca hasilnya menggunakan program yang memahami NUL; variabel shell biasa tidak dapat menyimpan byte NUL dengan utuh.
Penentu format yang sering digunakan
| Penentu | Isi keluaran |
|---|---|
%n |
Nama file. |
%N |
Nama file yang dikutip, dan jika itu adalah tautan simbolik, mungkin juga menyertakan informasi tentang targetnya. |
%F |
Jenis file, seperti file biasa, direktori, atau tautan simbolik. |
%s |
Ini adalah ukuran total (dalam byte). |
%b |
Ini adalah jumlah blok yang dialokasikan. |
%B |
Ini adalah ukuran byte dari sebuah blok yang diwakili oleh %b. |
%a |
Izin oktal. |
%A |
Izin simbolik termasuk jenis file. |
%u, %g |
UID dan GID numerik dari pemilik. |
%U, %G |
Nama pengguna dan nama grup pemilik. |
%i |
Nomor inode. |
%h |
Jumlah tautan keras. |
%m |
Titik mount tempat file berada. |
%x, %X |
Tampilkan waktu akses terakhir dalam format yang dapat dibaca manusia atau dalam detik Epoch. |
%y, %Y |
Tampilkan waktu modifikasi konten terakhir dalam format yang mudah dibaca manusia atau sebagai detik Epoch. |
%z, %Z |
Tampilkan waktu perubahan status terakhir dalam format yang mudah dibaca manusia atau sebagai detik Epoch. |
%w, %W |
Tampilkan waktu pembuatan dalam format yang mudah dibaca manusia atau sebagai detik Epoch; jika tidak diketahui, tampilkan tanda hubung atau 0. |
%C |
Tampilkan konteks keamanan SELinux di lingkungan yang didukung. |
Periksa informasi sistem berkas
Lihat status sistem berkas dengan -f
-f atau --file-system menampilkan status sistem file yang memuat jalur tersebut. Opsi ini juga menyiratkan -L, sehingga tautan simbolik diikuti ke targetnya.
stat -f /
stat --file-system /home
Anda dapat memeriksa tipe sistem file, total blok, blok yang tersedia, jumlah inode, dan panjang nama file maksimum.
Menggunakan spesifikasi format sistem file
Dalam mode -f, maknanya berbeda dari spesifikasi untuk file. Sebagai contoh, %T menunjukkan tipe sistem file yang dapat dibaca manusia, %b mewakili total blok data, dan %a menunjukkan jumlah blok yang tersedia untuk pengguna biasa.
stat -f -c 'type=%T total=%b available=%a block-size=%S' /
Pada mode ini, kalikan jumlah blok dengan %S, ukuran blok dasar untuk perhitungan blok. Jangan memakai arti %b atau %s dari mode file biasa untuk menafsirkan keluaran -f.
Untuk membandingkan penggunaan disk yang dapat dibaca manusia, df -h mungkin lebih nyaman, dan untuk mengekstrak hanya bidang sistem file yang diperlukan untuk otomatisasi, stat -f -c berguna.
Sistem file jarak jauh dan kebijakan cache
Dalam versi GNU Coreutils yang didukung, Anda dapat menentukan metode penggunaan cache saat mengambil atribut sistem file jarak jauh dengan --cached=MODE.
| Mode | Aksi |
|---|---|
default |
Apakah akan menggunakan cache atau tidak diserahkan pada kebijakan default sistem file. |
always |
Gunakan atribut yang di-cache jika memungkinkan. Ini mungkin cepat, tetapi mungkin tidak terbaru. |
never |
Coba sinkronisasi dengan atribut terbaru jika memungkinkan. Latensi akses jarak jauh mungkin meningkat. |
stat --cached=never /mnt/remote/report.txt
Ganti jalur contoh dengan file yang memang berada di mount jarak jauh milik Anda. Jaminannya bergantung pada dukungan sistem, sistem file seperti NFS, dan pengaturan mount. Mode never juga dapat memicu pemasangan sistem file yang menggunakan automount. Periksa dukungan opsi melalui stat --help.
Contoh penggunaan skrip shell
Memilih tindakan berdasarkan ukuran file
Simpan sebagai check-size.sh, lalu jalankan sh check-size.sh './archive.tar'. Skrip memakai shell POSIX dan GNU stat. Batas 100 MiB berarti 100 × 1024 × 1024 = 104857600 byte; nilai tepat pada batas belum dianggap lebih besar.
#!/bin/sh
if [ "$#" -ne 1 ]; then
printf '%s\n' 'Penggunaan: sh check-size.sh PATH' >&2
exit 2
fi
path=$1
size=$(stat -c '%s' -- "$path") || exit 1
if [ "$size" -gt 104857600 ]; then
printf '%s\n' 'Ukuran file lebih besar dari 100 MiB.'
else
printf '%s\n' 'Ukuran file tidak lebih besar dari 100 MiB.'
fi
Kedua hasil perbandingan yang berhasil menghasilkan status 0. Kegagalan membaca metadata menghasilkan status 1, sedangkan jumlah argumen yang salah menghasilkan status 2. Skrip membaca ukuran logis, bukan alokasi fisik; jika jalurnya direktori, nilainya adalah ukuran direktori itu sendiri.
Di lingkungan di mana file dapat berubah antara pemeriksaan dan penggunaan, jangan berasumsi bahwa metadata yang diperiksa sekali akan tetap sama hingga operasi berikutnya.
Bandingkan waktu modifikasi secara numerik
Simpan sebagai compare-mtime.sh dan jalankan sh compare-mtime.sh './file-a' './file-b'. Periksa kegagalan pada kedua pemanggilan stat sebelum membandingkan hasil agar nilai kosong tidak dipakai sebagai angka.
#!/bin/sh
if [ "$#" -ne 2 ]; then
printf '%s\n' 'Penggunaan: sh compare-mtime.sh FILE_A FILE_B' >&2
exit 2
fi
left_mtime=$(stat -c '%Y' -- "$1") || exit 1
right_mtime=$(stat -c '%Y' -- "$2") || exit 1
if [ "$left_mtime" -gt "$right_mtime" ]; then
printf '%s\n' 'FILE_A dimodifikasi lebih baru.'
elif [ "$left_mtime" -lt "$right_mtime" ]; then
printf '%s\n' 'FILE_B dimodifikasi lebih baru.'
else
printf '%s\n' 'Kedua mtime sama pada ketelitian satu detik.'
fi
Perbandingan yang berhasil menghasilkan status 0, kegagalan mengambil salah satu nilai menghasilkan status 1, dan jumlah argumen yang salah menghasilkan status 2. Nilai yang sama di sini tidak membuktikan isi file sama.
Mengandalkan hanya pada satu stempel waktu untuk keputusan cadangan atau penyebaran dapat menyebabkan masalah karena perbedaan jam, stempel waktu yang dipulihkan, atau modifikasi simultan. Jika perlu, gunakan juga checksum atau informasi versi.
Perintah stat yang sering digunakan
| Perintah | Tujuan |
|---|---|
stat file |
Menampilkan rincian metadata yang tersedia dalam keluaran standar. |
stat -L link |
Menampilkan informasi tentang target yang ditunjuk oleh tautan simbolik. |
stat -c '%s' file |
Mengeluarkan ukuran file dalam byte. |
stat -c '%a %n' file |
Menampilkan izin dalam oktal dan nama file. |
stat -c '%U:%G' file |
Menampilkan pemilik pengguna dan grup. |
stat -c '%i %h %n' file |
Menampilkan inode, jumlah tautan keras, dan nama file. |
stat -c '%y' file |
Menampilkan waktu modifikasi terakhir dari konten. |
stat -c '%Y' file |
Mencetak waktu modifikasi terakhir sebagai detik Epoch. |
stat -f path |
Menampilkan informasi tentang sistem file yang berisi jalur yang diberikan. |
stat -t file |
Mengeluarkan dalam format singkat satu baris dengan bidang tetap. |
Tindakan pencegahan saat menggunakan
ctime bukan waktu pembuatan
ctime adalah waktu perubahan, yaitu waktu ketika informasi status file diubah. Ini bukan singkatan dari waktu pembuatan, dan waktu pembuatan dapat disediakan di bidang Birth terpisah.
Birth dan atime tidak selalu merupakan nilai yang diharapkan.
Waktu pembuatan mungkin tidak didukung tergantung pada sistem file, kernel, dan metode mount. atime juga mungkin tidak diperbarui segera setiap kali file dibaca karena kebijakan mount seperti noatime atau relatime dan caching.
Jangan langsung menguraikan teks keluaran.
Keluaran default ditujukan untuk manusia dan dapat bervariasi menurut sistem operasi, versi Coreutils, dan locale. Untuk otomatisasi, pilih hanya bidang yang diperlukan dengan -c. Jika mengeluarkan nama file, tangani kemungkinan spasi dan baris baru serta gunakan pemisah yang sesuai.
FAQ
Bagaimana saya bisa memeriksa hanya izin oktal dari sebuah file?
Gunakan stat -c '%a' filename. Jika Anda juga memerlukan nama file, gunakan stat -c '%a %n' filename.
Apa perbedaan antara mtime dan ctime?
mtime adalah waktu ketika konten file terakhir dimodifikasi, dan ctime adalah waktu ketika status inode, seperti izin, kepemilikan, dan jumlah link, terakhir diubah. ctime bukan waktu pembuatan file.
Mengapa Birth ditampilkan sebagai tanda hubung?
Itu karena sistem file atau sistem operasi yang digunakan tidak menyediakan waktu pembuatan, atau stat tidak dapat memperoleh nilai tersebut. Dalam hal ini, %w menampilkan tanda hubung, dan %W menampilkan 0.
Apakah Size direktori adalah total ukuran semua file di dalamnya?
Tidak. Nilai itu adalah ukuran direktori itu sendiri yang menyimpan entri nama, bukan jumlah ukuran seluruh isinya. Untuk memeriksa penggunaan ruang di bawah direktori, gunakan du -sh directory dengan mengganti directory sesuai target.
Dokumentasi resmi
Perbandingan dengan utilitas lain tersedia dalam daftar perintah Linux menurut tugas (bahasa Inggris). Arti opsi dan stempel waktu dapat diperiksa melalui manual GNU berikut.




