s3cmd ls之迷惑

習慣了文件系統的我們一直都覺得 ls 命令應該會把文件全部 list 出來,對於 s3cmd ls 我一開始也是這麼理解的。

直到有一天,同事通過 s3cmd delete 刪除了一個文件,執行 s3cmd ls 竟然返回200,但是 s3cmd get 卻返回404,這就很奇怪了,用戶明明已經刪了對象,爲何 ls 得到呢,這不合理,當然 get 不到,那纔是合理的,那麼 get 不應該 ls 得到啊。

具體的情況如下。

[root@site ~]# s3cmd ls s3://game/1586744327001/sample/allblueapp/80121/ap_80121_14_20200515115522_216.txt     
2020-05-15 03:58      1606   s3://game/1586744327001/sample/allblueapp/80121/ap_80121_14_20200515115522_216.txt
[root@site ~]# s3cmd get s3://game/1586744327001/sample/allblueapp/80121/ap_80121_14_20200515115522_216.txt .
download: 's3://game/1586744327001/sample/allblueapp/80121/ap_80121_14_20200515115522_216.txt' -> './ap_80121_14_20200515115522_216.txt'  [1 of 1]
ERROR: S3 error: 404 (NoSuchKey)

於是加一下加一下 -d 選項來 debug 一下。發現依然是返回200,且也看不出有什麼問題。於是去看了下 s3cmd 的源碼,發現 s3cmd ls 只要 bucket 存在,就一定會返回200,不管要 ls 的 object 存不存在,於是做了個實驗,去 ls 一個從來不存在的 object 發現,竟然也是200,OK,Fine。

感興趣的話,可以去看下這塊代碼,確認一下。

https://github.com/s3tools/s3cmd/blob/master/S3/S3.py#L324

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章