考慮如下情景:foo用戶home目錄下有一文件file.txt,要將其copy至bar用戶的home目錄。Linux對用戶home目錄有嚴格的權限限制,非owner用戶或者同group用戶無權限讀寫,除非是root(至高無上的root)。如果沒有root權限,有什麼辦法把file.txt 復制到bar用戶的home目錄下呢?
想到兩個辦法。第一個辦法,先用foo用戶登錄,把文件copy到系統臨時目錄/tmp,然後切換到bar用戶,再從系統臨時目錄/tmp把文件copy到自己的home目錄。這裡為什麼用cp不用mv?因為復制到/tmp的文件owner還是foo,默認情況下其他用戶自有讀權限,沒有寫權限(自然沒有移動權限)。即使通過修改文件權限,讓bar可寫,移動到bar的home目錄下owner還是foo,而且非得root才能改成bar。這個辦法有點曲折,弊端也很明顯,文件需要復制兩次,花兩倍的時間。
# cp file.txt /tmp/
# su - bar
# cp /tmp/file.txt ~/
# exit
# rm /tmp/file.txt
第二個辦法,使用scp命令。原本scp是用來在不同主機上通過網絡copy文件,用在這裡剛好。用bar用戶登錄
# scp foo@localhost:/home/foo/file.txt ./
輸入foo用戶密碼,開始文件傳輸。也可以用foo用戶登錄,
# scp file.txt bar@localhost:/home/bar/
輸入bar用戶密碼,過程一樣。
實際中使用哪一種方法,看個人喜好了。如果要copy的文件不大,第一種方法也不失為一種選擇。