2016-07-26 59 views
-1

雖然學習爲即將到來的考試,我encoutered以下問題:系統調用:解讀的ktrace輸出

這是UNIX命令,將用戶試圖執行?在標有*的行中發生了什麼?有什麼問題?

我已經想通了,用戶可能希望像

LN -s DIR LS

但是,這並沒有給我預期的輸出執行的東西。

enter image description here

+0

真的嗎?您發佈文字圖像更容易複製/粘貼? – Olaf

+0

這不是「做我的作業」網站。 – Olaf

+0

@Olaf很好,謝謝你的鼓勵幫助先生。順便說一句形象是因爲這是在考試中的一個問題,我不能C&P,因爲我只擁有它的非數字化的版本。 –

回答

0

所以我設法回答這個問題我自己。

用戶試圖執行的命令是ln ls dir,其使用DIR作爲ls命令一個「別名」字基本上靶向。

這樣做是錯誤的,因爲用戶嘗試在不授予寫權限的目錄下操作(最可能是/bin目錄),這意味着他無法創建文件(硬鏈接)在這個目錄中。

通過使用的ktrace /內核轉儲我設法再現輸出:

第一系統調用是收集的索引節點信息:

[...] 
*77019 ln  CALL stat(0x7fffffffebab,0x7fffffffd668) 
    77019 ln  NAMI "test/ls" 
    77019 ln  RET stat 0 
*77019 ln  CALL lstat(0x7fffffffebb3,0x7fffffffd668) 
    77019 ln  NAMI "test/dir" 
    77019 ln  RET lstat -1 errno 2 No such file or directory 
*77019 ln  CALL stat(0x7fffffffebb3,0x7fffffffd668) 
    77019 ln  NAMI "test/dir" 
    77019 ln  RET stat -1 errno 2 No such file or directory 
*77019 ln  CALL lstat(0x7fffffffebb3,0x7fffffffd668) 
    77019 ln  NAMI "test/dir" 
    77019 ln  RET lstat -1 errno 2 No such file or directory 
*77019 ln  CALL linkat(AT_FDCWD,0x7fffffffebab,AT_FDCWD,0x7fffffffebb3,0x400) 
    77019 ln  NAMI "test/ls" 
    77019 ln  NAMI "test/dir" 
    77019 ln  RET linkat -1 errno 13 Permission denied 
    [...] 
*77019 ln  CALL exit(0x1) 

標有星號的步驟可以如下進行說明原始文件('test/ln)。 接着,檢查目標文件(test/dir)是否已經存在,或者作爲一個已命名的文件(stat)或爲符號鏈接(lstat)。

因爲情況並非如此,所以該過程會嘗試鏈接文件(linkat - 在原始示例中:link)。正如前面提到的,這是因爲權限而出錯。

該過程最後用負退出代碼完成。

+0

鏈接不是別名。它可能在Windows中,但不在Unixoids中。 – Olaf