File Attributes: Difference between revisions
From Leo's Notes
This page was last edited on 30 December 2021, at 05:14.
m Added categories |
file change time info |
||
| Line 16: | Line 16: | ||
Use the following tools to modify: | Use the following tools to modify: | ||
{| class="wikitable" | {| class="wikitable" | ||
! | !Modify... | ||
! | !Utility | ||
! Example | !Example | ||
|- | |- | ||
! | !Permission | ||
| {{code|chmod <permission>}} | (access modes) | ||
|{{code|chmod <permission>}} | |||
|{{highlight|lang=terminal|code= | |{{highlight|lang=terminal|code= | ||
# chmod 644 file.dat | # chmod 644 file.dat | ||
# chmod u+rw file.dat}} | # chmod u+rw file.dat}} | ||
|- | |- | ||
! Ownership | !Ownership | ||
| {{code|chown}} / {{code|chgrp}} | |{{code|chown}} / {{code|chgrp}} | ||
|{{highlight|lang=terminal|code= | |{{highlight|lang=terminal|code= | ||
## Both | ## Both | ||
| Line 36: | Line 37: | ||
# chgrp group file.dat}} | # chgrp group file.dat}} | ||
|- | |- | ||
! SELinux Context | !SELinux Context | ||
| {{code|chcon -R <context>}} | |{{code|chcon -R <context>}} | ||
| {{highlight|lang=terminal|code= | |{{highlight|lang=terminal|code= | ||
# chcon -R unconfined_u:object_r:user_home_t:s0 /home/user/.ssh/}} | # chcon -R unconfined_u:object_r:user_home_t:s0 /home/user/.ssh/}} | ||
|- | |- | ||
! Access Time | !File Access Time | ||
| {{code|touch -a -t YYYYMMDDhhmm.ss}} | |{{code|touch -a -t YYYYMMDDhhmm.ss}} | ||
| {{highlight|lang=terminal|code= | |{{highlight|lang=terminal|code= | ||
## Set access time to Dec 26 2020 at 1:30:30PM | ## Set access time to Dec 26 2020 at 1:30:30PM | ||
# touch -a -t 202012261330.30 /some/file | # touch -a -t 202012261330.30 /some/file | ||
| Line 49: | Line 50: | ||
# touch -a -r reference.ext target.ext}} | # touch -a -r reference.ext target.ext}} | ||
|- | |- | ||
! Modify Time | !File Modify Time | ||
| {{code|touch -m -t YYYYMMDDhhmm.ss}} | |{{code|touch -m -t YYYYMMDDhhmm.ss}} | ||
| {{highlight|lang=terminal|code= | |{{highlight|lang=terminal|code= | ||
## Set modification time to Dec 26 2020 at 1:30:30PM | ## Set modification time to Dec 26 2020 at 1:30:30PM | ||
# touch -m -t 202012261330.30 /some/file | # touch -m -t 202012261330.30 /some/file | ||
| Line 57: | Line 58: | ||
# touch -m -r reference.ext target.ext}} | # touch -m -r reference.ext target.ext}} | ||
|- | |- | ||
! Change Time | !File Change Time | ||
| | |N/A | ||
| | |You can't change a file's ctime. If you absolutely need to, you can [https://unix.stackexchange.com/questions/36021/how-can-i-change-change-date-of-file try these options]: | ||
# Set the system clock and then touch the file. | |||
# <code>debugfs -w -R 'set_inode_field /tmp/foo ctime 201001010101' /dev/sda1</code>, then <code>echo 2 > /proc/sys/vm/drop_caches</code> | |||
|} | |} | ||
==Tasks== | |||
== Tasks == | ===Preserve File Ownership/Attributes=== | ||
=== Preserve File Ownership/Attributes === | |||
If you copied a set of files without preserving any of the attributes, rather than copying the data again, you can rsync again but this time using the archive option (which enables a bunch of other flags including the one for preserving ownership, permissions, and timestamps). | If you copied a set of files without preserving any of the attributes, rather than copying the data again, you can rsync again but this time using the archive option (which enables a bunch of other flags including the one for preserving ownership, permissions, and timestamps). | ||
| Line 86: | Line 89: | ||
}} | }} | ||
{{Navbox Linux}}[[Category:Linux]] | {{Navbox Linux}} | ||
[[Category:Linux]] | |||
Revision as of 05:14, 30 December 2021
Unix file attributes can be listed with the stat utility.
# stat /some/file
File: ‘/some/file’
Size: 13857688196 Blocks: 27066368 IO Block: 16777216 regular file
Device: 2dh/45d Inode: 12331 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2018-09-06 17:30:48.650399353 -0600
Modify: 2018-09-01 22:26:44.904672188 -0600
Change: 2020-06-11 15:53:36.225415501 -0600
Birth: -
Use the following tools to modify:
| Modify... | Utility | Example |
|---|---|---|
| Permission
(access modes) |
chmod <permission>
|
# chmod 644 file.dat
# chmod u+rw file.dat
|
| Ownership | chown / chgrp
|
## Both
# chown user:group file.dat
## Or individually
# chown user file.dat
# chgrp group file.dat
|
| SELinux Context | chcon -R <context>
|
# chcon -R unconfined_u:object_r:user_home_t:s0 /home/user/.ssh/
|
| File Access Time | touch -a -t YYYYMMDDhhmm.ss
|
## Set access time to Dec 26 2020 at 1:30:30PM
# touch -a -t 202012261330.30 /some/file
## Set a file based on a reference file
# touch -a -r reference.ext target.ext
|
| File Modify Time | touch -m -t YYYYMMDDhhmm.ss
|
## Set modification time to Dec 26 2020 at 1:30:30PM
# touch -m -t 202012261330.30 /some/file
## Set a file based on a reference file
# touch -m -r reference.ext target.ext
|
| File Change Time | N/A | You can't change a file's ctime. If you absolutely need to, you can try these options:
|
Tasks
Preserve File Ownership/Attributes
If you copied a set of files without preserving any of the attributes, rather than copying the data again, you can rsync again but this time using the archive option (which enables a bunch of other flags including the one for preserving ownership, permissions, and timestamps).
If you're in a rut like I was after recovering data from a tape, you can do something like this:
#!/bin/bash
# Replace files here to the root filesystem, but preserving timestamps
# Eg. ./etc/fstab gets copied to /etc/fstab, but with timestamps, permissions retained.
find | while read i ; do
if [ -f $i ] ; then
touch -a -m -r /$i $i
chown -v --reference /$i $i
chmod -v --reference /$i $i
# Replace source with the local copy I have here
rm -v /$i
mv -v $i /$i
fi
done