inode(7) - wariua/manpages-ko GitHub Wiki
inode - νμΌ μμ΄λ Έλ μ 보
κ° νμΌμλ κ·Έ νμΌμ λν λ©νλ°μ΄ν°λ₯Ό λ΄μ μμ΄λ
Έλ(inode)κ° μλ€. stat
ꡬ쑰체λ₯Ό λ°ννλ stat(2)μ (λλ μ μ¬ νΈμΆμ) μ΄μ©ν΄μ, λλ statx
ꡬ쑰체λ₯Ό λ°ννλ statx(2)λ₯Ό μ΄μ©ν΄μ μμ©μμ κ·Έ λ©νμ 보λ₯Ό μ»μ μ μλ€.
λ€μμ μΌλ°μ μΌλ‘ νμΌ μμ΄λ Έλ λ΄μ μκ±°λ μ°κ³λΌ μλ μ 보λ€μ λͺ©λ‘μ΄λ€. stat(2) λ° statx(2)μμ λ°ννλ λμ ꡬ쑰체 νλμ μ΄λ¦μ΄ μ ν μλ€.
- μμ΄λ Έλκ° μμΉν μ₯μΉ
-
stat.st_dev
.statx.stx_dev_minor
λ°statx.stx_dev_major
.κ° μμ΄λ Έλλ (μ°κ΄λ νμΌκ³Ό λ§μ°¬κ°μ§λ‘) μ΄λ€ μ₯μΉ μμ νμΌ μμ€ν μ μμΉνλ€. (μΌλ°μ μ₯μΉ λΆλ₯λ₯Ό λνλ΄λ) μ£Ό IDμ (κ·Έ μΌλ° λΆλ₯ λ΄μμ νΉμ μΈμ€ν΄μ€λ₯Ό λνλ΄λ) λΆ IDμ μ‘°ν©μΌλ‘ κ·Έ μ₯μΉλ₯Ό μλ³νλ€.
- μμ΄λ Έλ λ²νΈ
-
stat.st_ino
.statx.stx_ino
.νμΌ μμ€ν μ κ° νμΌμλ κ³ μ ν μμ΄λ Έλ λ²νΈκ° μλ€. μμ΄λ Έλ λ²νΈλ ν νμΌ μμ€ν λ΄μμλ§ μ μΌμ±μ΄ 보μ₯λλ€. (μ¦ λ€λ₯Έ νμΌ μμ€ν μμ κ°μ μμ΄λ Έλ λ²νΈλ₯Ό μΈ μ μμΌλ©°, κ·Έλμ νλ λ§ν¬κ° νμΌ μμ€ν κ²½κ³λ₯Ό λμ΄κ° μ μλ€.) μ΄ νλλ νμΌμ μμ΄λ Έλ λ²νΈλ₯Ό λ΄κ³ μλ€.
- νμΌ μ’ λ₯ λ° λͺ¨λ
-
stat.st_mode
.statx.stx_mode
.μλμ νμΌ μ’ λ₯ λ° λͺ¨λ μ€λͺ μ°Έκ³ .
- λ§ν¬ μ
-
stat.st_nlink
.
statx.stx_nlink
.μ΄ νλλ νμΌμ λν νλ λ§ν¬ μλ₯Ό λ΄κ³ μλ€. link(2)λ₯Ό μ¨μ κΈ°μ‘΄ νμΌμ λν λ§ν¬λ₯Ό μΆκ°λ‘ λ§λ λ€.
- μ¬μ©μ ID
-
stat.st_uid
.statx.stx_uid
.μ΄ νλλ νμΌ μμ μμ μ¬μ©μ IDλ₯Ό κΈ°λ‘νλ€. νμΌμ΄ μλ‘ μμ±λ λ νμΌ μ¬μ©μ IDλ μμ± νλ‘μΈμ€μ μ€ν¨ μ¬μ©μ IDλ€. chown(2)μ μ¨μ νμΌμ μ¬μ©μ IDλ₯Ό λ°κΏ μ μλ€.
- κ·Έλ£Ή ID
-
stat.st_gid
.statx.stx_gid
.μμ΄λ Έλμ νμΌ κ·Έλ£Ή μμ μμ IDλ₯Ό κΈ°λ‘ν΄ λλ€. νμΌμ΄ μλ‘ μμ±λ λ νμΌ κ·Έλ£Ή IDλ λΆλͺ¨ λλ ν°λ¦¬μ set-group-ID λΉνΈκ° μ€μ λΌ μλμ§ μ¬λΆμ λ°λΌ λΆλͺ¨ λλ ν°λ¦¬μ κ·Έλ£Ή IDκ±°λ νΈμΆ νλ‘μΈμ€μ μ€ν¨ κ·Έλ£Ή IDλ€. (μλ μ°Έκ³ .) chown(2)μ μ¨μ νμΌμ κ·Έλ£Ή IDλ₯Ό λ°κΏ μ μλ€.
- μ΄ μμ΄λ Έλκ° λνλ΄λ μ₯μΉ
-
stat.st_rdev
.statx.stx_rdev_minor
λ°statx.stx_rdev_major
.μ΄ νμΌμ΄ (μμ΄λ Έλκ°) μ₯μΉλ₯Ό λνλ΄λ κ²½μ°μ μμ΄λ Έλμ κ·Έ μ₯μΉμ μ£Ό IDμ λΆ IDλ₯Ό κΈ°λ‘ν΄ λλ€.
- νμΌ ν¬κΈ°
-
stat.st_size
.statx.stx_size
.μ΄ νλλ (μ κ· νμΌμ΄λ μ¬λ³Όλ¦ λ§ν¬μΈ κ²½μ°) νμΌ ν¬κΈ°λ₯Ό λ°μ΄νΈ λ¨μλ‘ μλ € μ€λ€. μ¬λ³Όλ¦ λ§ν¬μ ν¬κΈ°λ λ΄κ³ μλ (μ’ λ£ λ λ°μ΄νΈ μλ) κ²½λ‘λͺ μ κΈΈμ΄λ€.
- μ νΈ I/O λΈλ‘ ν¬κΈ°
-
stat.st_blksize
.statx.stx_blksize
.μ΄ νλλ ν¨μ¨μ μΈ νμΌ μμ€ν I/Oλ₯Ό μν "μ νΈ" λΈλ‘ ν¬κΈ°λ₯Ό μλ € μ€λ€. (λ μμ ν¬κΈ°λ‘ νμΌμ μ°κΈ°λ₯Ό νλ©΄ λΉν¨μ¨μ μΈ μ½κΈ°-λ³κ²½-μ¬κΈ°λ‘μ΄ μΌμ΄λ μ μλ€.)
- νμΌμ ν λΉλ λΈλ‘ μ
-
stat.st_blocks
.statx.stx_blocks
.μ΄ νλλ νμΌμ ν λΉλ 512λ°μ΄νΈ λ¨μ λΈλ‘ μλ₯Ό λνλΈλ€. (νμΌμ ꡬλ©μ΄ μμ λλ
st_size
/512λ³΄λ€ μμ μλ μλ€.)POSIX.1 νμ€μμλ
stat
ꡬ쑰체μst_blocks
λ©€λ²μ λ¨μλ₯Ό νμ€μμ κ·μ νμ§ μλλ€κ³ μΈκΈνλ€. λ§μ ꡬνμμλ κ·Έ κ°μ΄ 512 λ°μ΄νΈλ€. λͺλͺ μμ€ν μμλ 1024 κ°μ λ€λ₯Έ λ¨μλ₯Ό μ΄λ€. λλΆμ΄ νμΌ μμ€ν μ λ°λΌ κ·Έ λ¨μκ° λ€λ₯Ό μλ μλ€. - μ΅κ·Ό μ κ·Ό νμμ€ν¬ν (atime)
-
stat.st_atime
.statx.stx_atime
.νμΌμ μ΅κ·Ό μ κ·Ό νμμ€ν¬νλ€. execve(2), mknod(2), pipe(2), utime(2), (0 λ°μ΄νΈλ³΄λ€ ν°)
read(2)
λ±μ νμΌ μ κ·Όμ μν΄ λ°λλ€. mmap(2) κ°μ λ€λ₯Έ μΈν°νμ΄μ€λ atime νμμ€ν¬νλ₯Ό κ°±μ ν μλ μκ³ νμ§ μμ μλ μλ€.μΌλΆ νμΌ μμ€ν νμ μμλ νμΌ λ°/λλ λλ ν°λ¦¬ μ κ·Όμ΄ atime νμμ€ν¬ν κ°±μ μ μΌμΌν€μ§ μλλ‘ λ§μ΄νΈ νλ κ² κ°λ₯νλ€. (mount(8)μ
noatime
,nodiratime
,relatime
, κ·Έλ¦¬κ³ mount(2)μ κ΄λ ¨ μ 보 μ°Έκ³ .) λλΆμ΄O_NOATIME
νλκ·Έλ₯Ό μ¨μ νμΌμ μ΄λ©΄ atime νμμ€ν¬νκ° κ°±μ λμ§ μλλ€. open(2) μ°Έκ³ . - νμΌ μμ± (νμ) νμμ€ν¬ν (btime)
-
(
stat
κ΅¬μ‘°μ²΄λ‘ λ°νλμ§ μμ.)statx.stx_btime
.νμΌμ μμ± νμμ€ν¬νλ€. νμΌ μμ± μ μ€μ λκ³ μ΄ν λ°λμ§ μλλ€.
btime νμμ€ν¬νλ μμ¬μ μΌλ‘ μ λμ€ μμ€ν μ μ‘΄μ¬νμ§ μμμΌλ©° νμ¬ λλΆλΆμ 리λ μ€ νμΌ μμ€ν λ€μμ μ§μνμ§ μλλ€.
- μ΅κ·Ό μμ νμμ€ν¬ν (mtime)
-
stat.st_mtime
.statx.stx_mtime
.νμΌμ μ΅κ·Ό μμ νμμ€ν¬νλ€. mknod(2), truncate(2), utime(2), (0 λ°μ΄νΈλ³΄λ€ ν°) write(2) λ±μ νμΌ λ³κ²½μ μν΄ λ°λλ€. λν λλ ν°λ¦¬μ mtime νμμ€ν¬νλ κ·Έ λλ ν°λ¦¬ λ΄μ νμΌ μμ± λ° μμ μ μν΄ λ°λλ€. μμ μ, κ·Έλ£Ή, νλ λ§ν¬ μ, λͺ¨λμ λ³κ²½μ μν΄μ mtime νμμ€ν¬νκ° λ°λμ§ μλλ€.
- μ΅κ·Ό μν λ³κ²½ νμμ€ν¬ν (ctime)
-
stat.st_ctime
.statx.stx_ctime
.νμΌμ μ΅κ·Ό μν λ³κ²½ νμμ€ν¬νλ€. μμ΄λ Έλ μ 보(μ¦ μμ μ, κ·Έλ£Ή, λ§ν¬ μ, λͺ¨λ λ±) κΈ°λ‘ λ΄μ§ μ€μ μ μν΄ λ°λλ€.
νμμ€ν¬ν νλλ€μ μν¬ν¬(Epoch), μ¦ 1970-01-01 00:00:00 +0000, UTCλ₯Ό μμ μΌλ‘ ν΄μ (time(7) μ°Έκ³ ) μΈ‘μ ν μκ°μ μλ € μ€λ€.
XFS, JFS, Btrfs, ext4(리λ
μ€ 2.6.23λΆν°)μμ λλ
Έμ΄ νμμ€ν¬νλ₯Ό μ§μνλ€. ext2, ext3, Reiserfsμμλ λλ
Έμ΄ νμμ€ν¬νλ₯Ό μ§μνμ§ μλλ€. λλ
Έμ΄ μ λ°λλ‘ νμμ€ν¬νλ₯Ό λ°νν μ μλλ‘ stat
λ° statx
ꡬ쑰체μ νμμ€ν¬ν νλλ€μ λλ
Έμ΄ νλͺ©μ ν¬ν¨ν κ΅¬μ‘°μ²΄λ‘ μ μλΌ μλ€. μμΈν 건 stat(2) λ° statx(2)λ₯Ό 보λΌ. μ΄λ³΄λ€ μμ λ¨μμ νμμ€ν¬νλ₯Ό μ§μνμ§ μλ νμΌ μμ€ν
μμλ stat
λ° statx
ꡬ쑰체μ λλ
Έμ΄ νλκ° 0 κ°μΌλ‘ λ°νλλ€.
stat.st_mode
νλλ (statx(2)μΈ κ²½μ° statx.stx_mode
νλλ) νμΌ μ’
λ₯ λ° λͺ¨λλ₯Ό λ΄κ³ μλ€.
POSIXμμλ stat.st_mode
μμ λ§μ€ν¬ S_IFMT
(μλ μ°Έκ³ )μ ν΄λΉνλ λΉνΈλ€μ νμΌ μ’
λ₯λ‘, λ§μ€ν¬ 07777μ ν΄λΉνλ 12λΉνΈλ₯Ό νμΌ λͺ¨λ λΉνΈλ‘, κ·Έλ¦¬κ³ λ§μ§λ§ 9λΉνΈ(0777)λ₯Ό νμΌ κΆν λΉνΈλΌκ³ λΆλ₯Έλ€.
νμΌ μ’ λ₯λ‘ λ€μ λ§μ€ν¬ κ°λ€μ΄ μ μλΌ μλ€.
S_IFMT |
0170000 |
νμΌ μ’ λ₯ λΉνΈ νλ λΉνΈ λ§μ€ν¬ |
S_IFSOCK |
0140000 |
μμΌ |
S_IFLNK |
0120000 |
μ¬λ³Όλ¦ λ§ν¬ |
S_IFREG |
0100000 |
μ κ· νμΌ |
S_IFBLK |
0060000 |
λΈλ‘ μ₯μΉ |
S_IFDIR |
0040000 |
λλ ν°λ¦¬ |
S_IFCHR |
0020000 |
λ¬Έμ μ₯μΉ |
S_IFIFO |
0010000 |
FIFO |
κ·Έλμ (μλ₯Ό λ€μ΄) μ κ· νμΌμΈμ§ νμΈνλ €λ©΄ λ€μκ³Ό κ°μ΄ μμ±ν μ μλ€.
stat(pathname, &sb);
if ((sb.st_mode & S_IFMT) == S_IFREG) {
/* μ κ· νμΌ μ²λ¦¬ */
}
μ ννμ κ²μ¬κ° ννκΈ° λλ¬Έμ POSIXμμλ st_mode
μ νμΌ μ’
λ₯ κ²μ¬λ₯Ό μ νν μμ±ν μ μλλ‘ ν΄ μ£Όλ λ§€ν¬λ‘λ₯Ό μΆκ°λ‘ μ μνλ€.
S_ISREG(m) |
μ κ· νμΌμΈκ°? |
S_ISDIR(m) |
λλ ν°λ¦¬μΈκ°? |
S_ISCHR(m) |
λ¬Έμ μ₯μΉμΈκ°? |
S_ISBLK(m) |
λΈλ‘ μ₯μΉμΈκ°? |
S_ISFIFO(m) |
FIFO(μ΄λ¦ μλ νμ΄ν)μΈκ°? |
S_ISLNK(m) |
μ¬λ³Όλ¦ λ§ν¬μΈκ°? (POSIX.1-1996μλ μμ.) |
S_ISSOCK(m) |
μμΌμΈκ°? (POSIX.1-1996μλ μμ.) |
κ·Έλμ μμ μ½λλ₯Ό λ€μκ³Ό κ°μ΄ μμ±ν μ μλ€.
stat(pathname, &sb);
if (S_ISREG(sb.st_mode)) {
/* μ κ· νμΌ μ²λ¦¬ */
}
μ νμΌ μ’
λ₯ κ²μ¬ λ§€ν¬λ‘ λλ€μλ κΈ°λ₯ νμΈ λ§€ν¬λ‘ _BSD_SOURCE
(glibc 2.19 λ° μ΄μ ), _SVID_SOURCE
(glibc 2.19 λ° μ΄μ ), _DEFAULT_SOURCE
(glibc 2.20 λ° μ΄ν) μ€ νλλΌλ μ μλΌ μμΌλ©΄ κ·Έ μ μκ° μ 곡λλ€. μΆκ°λ‘ _XOPEN_SOURCE
κ° μ μλΌ μμΌλ©΄ S_IFSOCK
λ° S_ISSOCK()
μ λΉΌκ³ μμ λ§€ν¬λ‘ μ 체μ μ μκ° μ 곡λλ€.
S_IFSOCK
μ μλ _XOPEN_SOURCE
λ₯Ό 500 μ΄μμ κ°μΌλ‘ μ μνκ±°λ (glibc 2.24λΆν°), _XOPEN_SOURCE
μ _XOPEN_SOURCE_EXTENDED
λͺ¨λλ₯Ό μ μν΄μ λλ¬λΌ μ μλ€.
S_ISSOCK()
μ μλ κΈ°λ₯ νμΈ λ§€ν¬λ‘ _BSD_SOURCE
(glibc 2.19 λ° μ΄μ ), DEFAULT_SOURCE
(glibc 2.20 λ° μ΄ν), 500 μ΄μ κ°μΌλ‘ _XOPEN_SOURCE
, 200112L μ΄μ κ°μΌλ‘ _POSIX_C_SOURCE
μ€ νλλΌλ μ μλΌ μκ±°λ _XOPEN_SOURCE
μ _XOPEN_SOURCE_EXTENDED
λͺ¨λκ° μ μλΌ μμΌλ©΄ λλ¬λλ€.
st_mode
νλμ νμΌ λͺ¨λ λΆλΆμ μν΄ λ€μ λ§μ€ν¬ κ°λ€μ΄ μ μλΌ μλ€.
S_ISUID |
04000 |
set-user-ID λΉνΈ (execve(2) μ°Έκ³ ) |
S_ISGID |
02000 |
set-group-ID λΉνΈ (μλ μ°Έκ³ ) |
S_ISVTX |
01000 |
μ€ν°ν€ λΉνΈ (μλ μ°Έκ³ ) |
S_IRWXU |
00700 |
μμ μκ° μ½κΈ°, μ°κΈ°, μ€ν κΆν κ°μ§ |
S_IRUSR |
00400 |
μμ μκ° μ½κΈ° κΆν κ°μ§ |
S_IWUSR |
00200 |
μμ μκ° μ°κΈ° κΆν κ°μ§ |
S_IXUSR |
00100 |
μμ μκ° μ€ν κΆν κ°μ§ |
S_IRWXG |
00070 |
κ·Έλ£Ήμ΄ μ½κΈ°, μ°κΈ°, μ€ν κΆν κ°μ§ |
S_IRGRP |
00040 |
κ·Έλ£Ήμ΄ μ½κΈ° κΆν κ°μ§ |
S_IWGRP |
00020 |
κ·Έλ£Ήμ΄ μ°κΈ° κΆν κ°μ§ |
S_IXGRP |
00010 |
κ·Έλ£Ήμ΄ μ€ν κΆν κ°μ§ |
S_IRWXO |
00007 |
(κ·Έλ£Ήμ μνμ§ μλ) κΈ°νκ° μ½κΈ°, μ°κΈ°, μ€ν κΆν κ°μ§ |
S_IROTH |
00004 |
κΈ°νκ° μ½κΈ° κΆν κ°μ§ |
S_IWOTH |
00002 |
κΈ°νκ° μ°κΈ° κΆν κ°μ§ |
S_IXOTH |
00001 |
κΈ°νκ° μ€ν κΆν κ°μ§ |
set-group-ID λΉνΈ(S_ISGID
)μλ μ¬λ¬ κ°μ§ νΉμν μ¬μ© λ°©μμ΄ μλ€. λλ ν°λ¦¬μμλ κ·Έ λλ ν°λ¦¬μ BSD λμ λ°©μμ΄ μ°μ¬μΌ ν¨μ λνλΈλ€. μ¦ κ±°κΈ°μ μμ±λλ νμΌλ€μ΄ νΈμΆ νλ‘μΈμ€μ μ€ν¨ κ·Έλ£Ή IDκ° μλλΌ λλ ν°λ¦¬μ κ·Έλ£Ή IDλ₯Ό λ¬Όλ €λ°μΌλ©°, κ±°κΈ°μ μμ±λλ λλ ν°λ¦¬μλ S_ISGID
λΉνΈκ° μ€μ λλ€. μ€ν νμΌμμ set-group-ID λΉνΈλ νμΌμ μ€ννλ νλ‘μΈμ€μ μ€ν¨ κ·Έλ£Ή IDκ° execve(2)μ κΈ°μ λ λλ‘ λ°λκ² νλ€. κ·Έλ£Ή μ€ν λΉνΈ(S_IXGRP
)κ° μ€μ λΌ μμ§ μμ νμΌμμ set-group-ID λΉνΈλ κ°μ μ νμΌ/λ μ½λ λ½νΉμ λνλΈλ€.
λλ ν°λ¦¬μ μ€ν°ν€ λΉνΈ(S_ISVTX
)λ κ·Έ λλ ν°λ¦¬ μμ νμΌμ νμΌ μμ μ, λλ ν°λ¦¬ μμ μ, νΉκΆ νλ‘μΈμ€λ§ μ΄λ¦μ λ°κΎΈκ±°λ μμ ν μ μλ€λ λ»μ΄λ€.
<sys/stat.h>
μμ blkcnt_t
λ΄μ§ blksize_t
νμ
μ μ μλ₯Ό μ»μ΄μΌ νλ€λ©΄ (μ΄λ€ ν€λ νμΌλ ν¬ν¨νκΈ° μ μ) _XOPEN_SOURCE
λ₯Ό 500 μ΄μ κ°μΌλ‘ μ μνλ©΄ λλ€.
POSIX.1-1990μμλ S_IFMT
, S_IFSOCK
, S_IFLNK
, S_IFREG
, S_IFBLK
, S_IFDIR
, S_IFCHR
, S_IFIFO
, S_ISVTX
μμλ₯Ό κΈ°μ νμ§ μμμ§λ§ λμ S_ISDIR()
λ±μ λ§€ν¬λ‘ μ¬μ©μ λͺ
μΈνλ€. S_IF*
μμλ€μ POSIX.1-2001 λ° μ΄νμ μ‘΄μ¬νλ€.
S_ISLNK()
λ° S_ISSOCK()
λ§€ν¬λ‘λ POSIX.1-1996μλ μκ³ POSIX.1-2001μλ μ‘΄μ¬νλ€. μ μλ SVID 4μμ μ¨ κ²μ΄κ³ νμλ SUSv2μμ μ¨ κ²μ΄λ€.
μ λμ€ V7(λ° μ΄ν μμ€ν
λ€)μλ S_IREAD
, S_IWRITE
, S_IEXEC
κ° μμλ λ°λ©΄ POSIXμλ λμμ΄ S_IRUSR
, S_IWUSR
, S_IXUSR
κ° μλ€.
컀λμμ μλ μμ±νλ κ°μ νμΌλ€μ λν΄ μ»€λμ΄ μλ € μ£Όλ νμΌ ν¬κΈ°(stat.st_size
, statx.stx_size
)κ° μ ννμ§ μλ€. μλ₯Ό λ€μ΄ /proc
λλ ν°λ¦¬μ λ§μ νμΌλ€μ λν΄ 0 κ°μ΄ λ°νλλ λ°λ©΄ /sys
μ μ¬λ¬ νμΌλ€μ λν΄μ νμΌ λ΄μ©μ΄ λ μμλ°λ ν¬κΈ°κ° 4096 λ°μ΄νΈλΌκ³ λμ¨λ€. κ·Έλ° νμΌλ€μμλ κ·Έλ₯ μ΅λνμΌλ‘ μ½μ΄ λ€μ΄λ©΄ (κ·Έλ¦¬κ³ κ·Έ κ²°κ³Όλ₯Ό λ¬Έμμ΄λ‘ ν΄μν΄μΌ νλ©΄ λ°ν λ²νΌ λμ '\0'μ λ§λΆμ¬ μ£Όλ©΄) λλ€.
stat(1)
, stat(2), statx(2), symlink(7)
2019-05-09