0

我有一个问题,例如 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] 我认识目录和文件名。:)

4

1 回答 1

1

调试输出来自lib/fsm.c(function fsmStage)。相关代码片段:

rpmlog(RPMLOG_DEBUG, " %8s %06o%3d (%4d,%4d)%10d %s %s\n",
            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 *shed 成功)。st是一个标准struct stat,所以你有, , , , ,mode的数量。hardlinksuidgidfile/dir sizepath

你猜对了大部分调试项。至于模式不仅仅是一个简单的 4 位八进制数,它有点复杂。来自stat2 手册页:为 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
于 2013-09-01T09:00:15.760 回答