2012-09-12 38 views
0

我有一個問題,其中一個rpm擦除如如何解釋rpm install/erase extra verbose命令的目錄輸出?

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]我認識到目錄和文件名。 :)

+0

所以,你要爲調試輸出的解釋或解決爲什麼轉-e 與符號鏈接並以目錄的行爲不同?如果是後者,至少使用部分* .spec文件來構建RPM將非常有幫助。只是不要完全發佈它... tomcat規範肯定是巨大的:-) – Stan

+1

嗨Stan,對調試輸出更感興趣。我們已經接受了它的行爲方式,因爲它被認爲是一個文件而不是目錄,並且早就解決了這個問題。但我仍然對調試輸出感興趣。 –

回答

1

調試輸出來自lib/fsm.c(功能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 *棚成功地)。 st是標準struct stat因此您有mode,編號爲hardlinksuidgid,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 
+0

哇!謝謝斯坦。 –