我遇到了一个问题,rpm擦除(如)
rpm -e <package>
正在导致软链接目录被删除。然而,如果目录不是链接,而只是一个目录,那么它就可以正常工作。
为了研究这一点,我开始使用额外的详细输出-vv,它显示了很多信息,其中一些是关于被操纵的目录和文件。然而,我不知道如何阅读输出,也无法在谷歌上搜索任何解释细节的资源。
有问题的输出示例如下:
D: erase: waitpid(4409) rc 4409 status 0 secs 1.107
D: fini 100755 1 (65534,65533) 105 /usr/foobar/tomcat/logs/om_be/dummy.log
D: fini 040755 2 (65534,65533) 4096 /usr/foobar/tomcat/logs/om_be
D: fini 100755 1 (65534,65533) 105 /usr/foobar/tomcat/logs/mc_be/dummy.log
D: fini 040755 2 (65534,65533) 4096 /usr/foobar/tomcat/logs/mc_be
D: fini 100755 1 (65534,65533) 105 /usr/foobar/tomcat/logs/dummy.log
D: fini 120755 1 (65534,65533) 24 /usr/foobar/tomcat/logs
D: fini 040755 2 (65534,65533) 4096 /usr/foobar/tomcat
D: fini 100755 1 ( 0, 1) 4293 /usr/foobar/share/mrtg2/icons/mrtg-ti.png
[1] [2] [3] [4] [5] [6]
[1] 我怀疑D:
是为了指示调试输出。但是fini
呢?它有什么意义吗?
[2] 这组数字(其中6个)怎么样。它们看起来可能是权限模式设置,但数字太多了。至少最后三个数字看起来像八进制模式值,我不知道前三个是什么
[3] 我不知道这个专栏代表什么
[4] 我猜测(##,##)
部分是所有者和组权限,因为它们与预期的值相匹配。
[5] 我不知道这个数字代表什么。也许尺寸?
[6] 我能识别目录和文件名。:)
调试输出来自lib/fsm.c
(函数fsmStage
)。相关代码片段:
rpmlog(RPMLOG_DEBUG, " %8s %06o%3d (%4d,%4d)%10d %s %sn",
cur,
(unsigned)st->st_mode, (int)st->st_nlink,
(int)st->st_uid, (int)st->st_gid, (int)st->st_size,
(fsm->path ? fsm->path : ""),
_fafilter(fsm->action));
其中,cur
是正在执行的操作的当前状态的字符串表示(在您的情况下,操作为擦除,后续任务的当前状态为*fini*成功清除)。st
是标准的struct stat
,所以您有mode
,编号为hardlinks
、uid
、gid
、file/dir size
、path
。
您猜对了大多数调试项目。至于模式不仅仅是一个简单的4位八进制数,它有点复杂。来自stat
2手册页:为st_mode字段定义了以下标志:
S_IFMT 0170000 bit mask for the file type bit fields
S_IFSOCK 0140000 socket
S_IFLNK 0120000 symbolic link
S_IFREG 0100000 regular file
S_IFBLK 0060000 block device
S_IFDIR 0040000 directory
S_IFCHR 0020000 character device
S_IFIFO 0010000 FIFO
S_ISUID 0004000 set UID bit
S_ISGID 0002000 set-group-ID bit (see below)
S_ISVTX 0001000 sticky bit (see below)
S_IRWXU 00700 mask for file owner permissions
S_IRUSR 00400 owner has read permission
S_IWUSR 00200 owner has write permission
S_IXUSR 00100 owner has execute permission
S_IRWXG 00070 mask for group permissions
S_IRGRP 00040 group has read permission
S_IWGRP 00020 group has write permission
S_IXGRP 00010 group has execute permission
S_IRWXO 00007 mask for permissions for others (not in group)
S_IROTH 00004 others have read permission
S_IWOTH 00002 others have write permission
S_IXOTH 00001 others have execute permission