adb上使用cp命令的替代方法(failed on '***' - Cross-device link解決方法)

今天把玩手頭的那部Android手機時碰到一個問題,即因爲權限問題無法將文件複製到/system/和/data/分區中,經過一番折騰後,算是解決了,在此記錄一筆。本方所涉及到的命令輸入,均用斜體字表示。

情況是這樣的:該臺Android手機不提供adb root的權限,但又不能裝破解root權限的軟件,若要往Android手機的/system/和/data/分區下拷一些文件, 是否有其它方法可以將文件複製到上述的分區中? 當然,手機裏的文件管理器沒有提供將文件從存儲卡上覆制到這兩個分區的功能,如果有哪個Android文件管理器提供類似的功能,在此也因爲不能下載安裝而做罷。

幸好,發現手機有預留方法可以使/system和/data分區獲得寫權限,而且也可以在adb shell裏執行su命令以切換用戶。能執行的su加上可寫的分區,意味着該分區的殺剮均在我們的掌控之下了(如對手機內置的運營商定製軟件不滿,那就殺之……)。廢話少說,假如要將test.mp3文件拷貝到/system/media/audio/目錄下,可以按如下步驟執行:
1. 將目標文件test.mp3複製到存儲卡上, /sdcard/test.mp3; 
2. 打開PC機上的命令行,輸入adb shell並按回車進入Android系統命令行模式;
3. 輸入cd system/media/audio並回車;
4. 輸入cat /sdcard/test.mp3 > test.mp3並回車。
當第4步完成後,在命令行下輸入命令ls應該就能看到test.mp3文件了。當然,步驟3也可省略,在adb shell裏,直接敲入命令 cat /sdcard/test.mp3 >/system/media/audio/test.mp3效果也是一樣的。

因爲Andorid命令行裏沒有cp命令(我一直未能明白爲何不將該命令集成進去?),但是有mv這一條命令,那爲什麼不直接輸入mv /sdcard/test.mp3 /system/meida/audio/test.mp3呢?好,那我們試一下該命令,得到答覆是:“failed on '/sdcard/test.mp3' - Cross-device link”, 也就是說mv命令不允許將存儲卡中的文件複製到/system/或/data/分區中,因爲兩者被認爲是在不同的設備上。所以步驟4採用cat命令,查一下cat的用法:cat [選項]... [文件]... ,其作用是將[文件]或標準輸入組合輸出到標準輸出。平常工作時偶爾會用到cat命令去顯示文本文件的內容,然後又想到了重定向符'>',所以兩者一結合,就自然則然地想到是否可以通過將cat的文件輸出到指定位置來代替cp的功能?通過嘗試發現確實可以,不過我不清楚Linux系統下cp命令的實現細節,回頭去查一下看。前已敘及有了su命令及可寫的分區,基本可以爲所欲爲了,所以曲線將文件複製到/system/或/data/分區後,如果文件權限/用戶名/組不符合,就可以通過chmod和chown命令進行更改。當然,如果/system/沒有寫權限,那本記錄所講述的方法就不適用了。


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