linux文件拷贝
前言
考慮如下情景: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用戶密碼,開始文件傳輸。也可以用foo用戶登錄,
# scp file.txt bar@localhost:/home/bar/
輸入bar用戶密碼,過程一樣。
實際中使用哪一種方法,看個人喜好了。如果要copy的文件不大,第一種方法也不失為一種選擇。
結束語
以上就是給大家分享的Linux中不同用戶之間復制文件的兩個方法,希望對大家的學習和工作能有所幫助。如果有疑問可以留言討論。
上面是同一主機不同用戶之間的拷貝
不同的Linux之間copy文件常用有3種方法
第一種:ftp,也就是其中一臺Linux安裝ftpServer,這樣可以另外一臺使用ftp的client程序來進行文件的copy。
第二種:采用samba服務,類似Windows文件copy的方式來操作,比較簡潔方便,
第三種:利用scp命令來進行文件復制。
介紹
scp是secure?copy的簡寫,是linux系統下基于ssh登陸進行安全的遠程文件拷貝命令。linux的scp命令可以在linux服務器之間復制文件和目錄。和它類似的命令有cp,不過cp只是在本機進行拷貝不能跨服務器。
當你服務器硬盤變為只讀?read?only?system時,用scp可以幫你把文件移出來。另外,scp還非常不占資源,不會提高多少系統負荷,在這一點上,rsync就遠遠不及它了。雖然?rsync比scp會快一點,但當小文件眾多的情況下,rsync會導致硬盤I/O非常高,而scp基本不影響系統正常使用。
說明:當兩臺LINUX主機之間要互傳文件時可使用SCP命令來實現,建立信任關系之后可不輸入密碼。?
?
命令格式:
scp?[參數]?[原路徑]?[目標路徑]
scp 本地用戶名 @IP 地址 : 文件名 1 遠程用戶名 @IP 地址 : 文件名 2
?
命令參數:
-1??強制scp命令使用協議ssh1??
-2??強制scp命令使用協議ssh2??
-4??強制scp命令只使用IPv4尋址??
-6??強制scp命令只使用IPv6尋址??
-B??使用批處理模式(傳輸過程中不詢問傳輸口令或短語)??
-C??允許壓縮。(將-C標志傳遞給ssh,從而打開壓縮功能)??
-p?保留原文件的修改時間,訪問時間和訪問權限。??
-q??不顯示傳輸進度條。??
-r??遞歸復制整個目錄。??
-v?詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的調試信息。這些信息用于調試連接,驗證和配置問題。???
-c?cipher??以cipher將數據傳輸進行加密,這個選項將直接傳遞給ssh。???
-F?ssh_config??指定一個替代的ssh配置文件,此參數直接傳遞給ssh。??
-i?identity_file??從指定文件中讀取傳輸時使用的密鑰文件,此參數直接傳遞給ssh。????
-l?limit??限定用戶所能使用的帶寬,以Kbit/s為單位。?????
-o?ssh_option??如果習慣于使用ssh_config(5)中的參數傳遞方式,???
-P?port??注意是大寫的P,?port是指定數據傳輸用到的端口號???
-S?program??指定加密傳輸時所使用的程序。此程序必須能夠理解ssh(1)的選項。
?
使用方法:
1、將本地服務器的文件傳送到遠程服務器。
命令格式:??
scp?local_file?remote_username@remote_ip:remote_folder??
或者??
scp?local_file?remote_username@remote_ip:remote_file??
或者??
scp?local_file?remote_ip:remote_folder??
或者??
scp?local_file?remote_ip:remote_file??
第1,2個指定了用戶名,命令執行后需要輸入用戶密碼,第1個僅指定了遠程的目錄,文件名字不變,第2個指定了文件名??
第3,4個沒有指定用戶名,命令執行后需要輸入用戶名和密碼,第3個僅指定了遠程的目錄,文件名字不變,第4個指定了文件名???
?
2、將本地服務器的目錄傳送到遠程服務器。
命令格式:??
scp?-r?local_folder?remote_username@remote_ip:remote_folder??
或者??
scp?-r?local_folder?remote_ip:remote_folder??
第1個指定了用戶名,命令執行后需要輸入用戶密碼;??
第2個沒有指定用戶名,命令執行后需要輸入用戶名和密碼;
?
3、從遠程服務器的文件或目錄拷貝到本地服務器。與從本地傳送到遠程服務器相類似,只是將參數位置互換一下。
?
使用實例:
1、從遠程復制文件到本地目錄。
說明:從192.168.120.204機器上的/opt/soft/的目錄中下載nginx-0.5.38.tar.gz?文件到本地/opt/soft/目錄中
$scp?root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz?/opt/soft/
?
2、從遠程復制目錄到本地目錄。
說明:從192.168.120.204機器上的/opt/soft/中下載mongodb?目錄到本地的/opt/soft/目錄來。
$scp?-r?root@192.168.120.204:/opt/soft/mongodb?/opt/soft/
?
3、上傳本地文件到遠程目錄。
說明:復制本地opt/soft/目錄下的文件nginx-0.5.38.tar.gz?到遠程機器192.168.120.204的opt/soft/scptest目錄
$scp?/opt/soft/nginx-0.5.38.tar.gz?root@192.168.120.204:/opt/soft/scptest
?
4、上傳本地目錄到遠程目錄。
說明:上傳本地目錄?/opt/soft/mongodb到遠程機器192.168.120.204上/opt/soft/scptest的目錄中去
$scp?-r?/opt/soft/mongodb?root@192.168.120.204:/opt/soft/scptest
?
標簽: linux總結
- 上一篇: linux pytorch 快速安装
- 下一篇: listary 指定目录搜索_every