雖然學習爲即將到來的考試,我encoutered以下問題:系統調用:解讀的ktrace輸出
這是UNIX命令,將用戶試圖執行?在標有*的行中發生了什麼?有什麼問題?
我已經想通了,用戶可能希望像
LN -s DIR LS
但是,這並沒有給我預期的輸出執行的東西。
雖然學習爲即將到來的考試,我encoutered以下問題:系統調用:解讀的ktrace輸出
這是UNIX命令,將用戶試圖執行?在標有*的行中發生了什麼?有什麼問題?
我已經想通了,用戶可能希望像
LN -s DIR LS
但是,這並沒有給我預期的輸出執行的東西。
所以我設法回答這個問題我自己。
用戶試圖執行的命令是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
)。正如前面提到的,這是因爲權限而出錯。
該過程最後用負退出代碼完成。
鏈接不是別名。它可能在Windows中,但不在Unixoids中。 – Olaf
真的嗎?您發佈文字圖像更容易複製/粘貼? – Olaf
這不是「做我的作業」網站。 – Olaf
@Olaf很好,謝謝你的鼓勵幫助先生。順便說一句形象是因爲這是在考試中的一個問題,我不能C&P,因爲我只擁有它的非數字化的版本。 –