Let's see man 2 stat:
Code:
struct stat {
dev_t st_dev; /* device */
ino_t st_ino; /* inode */
mode_t st_mode; /* protection */
nlink_t st_nlink; /* number of hard links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device type (if inode device) */
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for filesystem I/O */
blkcnt_t st_blocks; /* number of blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last change */
};
Any change on any of these inode's entries cause an inode's change.
st_mode: chmod(2), fchmod(2)
st_nlink: link(2) and unlink(2), used by ln(1)
st_uid: chown(2), fchown(2)
st_gid: same as above. On the command line: chgrp(1)
st_size: write(2), truncate(2), etc
st_blocks: same as above
st_atime & st_mtime: utimes(2) and utimes(3), used by touch(1)
Just take a look at the manpage