scp和rsync 均可實現(xiàn)文件的復(fù)制,但相比較,scp占用系統(tǒng)資源較小,rsync速度較快。當(dāng)小文件眾多時,rsync會導(dǎo)致硬盤I/O非常高,而scp基本不影響系統(tǒng)正常使用。可根據(jù)需要這倆選其一實現(xiàn)文件復(fù)制。
在臨洮等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需求定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,成都全網(wǎng)營銷,成都外貿(mào)網(wǎng)站建設(shè),臨洮網(wǎng)站建設(shè)費用合理。
scp 是secure copy的縮寫,scp是Linux系統(tǒng)下基于ssh登錄進行安全的遠程文件拷貝命令。
可以實現(xiàn)本地文件復(fù)制到遠程服務(wù)器,也可以將遠程文件復(fù)制到本地。
rsync 是remote sync的縮寫。使用rsync備份數(shù)據(jù)時,不會直接覆蓋以前的數(shù)據(jù)(如果數(shù)據(jù)已經(jīng)存在),而是先判斷已存在的數(shù)據(jù)和新數(shù)據(jù)的差異(默認規(guī)則是文件大小或修改時間有差異),只有數(shù)據(jù)不相同時才會把不相同的部分覆蓋。在僅作增量數(shù)據(jù)的copy時比scp靈活。
一般CentOS默認安裝rsync,若使用 rsync -v 提示找不到命令,可使用 yum install -y rsync 安裝。
單個冒號和雙冒號的區(qū)別 :使用rsync在遠程傳輸數(shù)據(jù)前,是需要進行登陸認證的,這個過程可使用ssh協(xié)議也可以使用rsync協(xié)議完成。單冒號(:)使用的是ssh協(xié)議;雙冒號(::)使用的是rsync協(xié)議。
默認情況下,rsync只確保源文件的所有內(nèi)容(明確排除的文件除外)都復(fù)制到目標(biāo)目錄。它不會使兩個目錄保持不同,并且不會刪除文件。如果要使目標(biāo)目錄成為源目錄的鏡像副本,則使用--delete選項。可刪除只存在目標(biāo)目錄,不存在于源目錄的文件。
增量備份算是一個經(jīng)常使用的場景了。兩臺服務(wù)器之間進行文件定期備份,無需所有文件都copy一遍,僅復(fù)制有變動的文件。
具體做法是,第一次同步是全量備份,所有文件在基準目錄里面同步一份。以后每一次同步都是增量備份,只同步源目錄與基準目錄之間有變動的部分,將這部分保存在一個新的目標(biāo)目錄。這個新的目標(biāo)目錄之中,也是包含所有文件,但實際上,只有那些變動過的文件是存在于該目錄,其他沒有變動的文件都是指向基準目錄文件的硬鏈接。
--link-dest 參數(shù)用來指定同步時的基準目錄。
上面命令中, --link-dest 參數(shù)指定基準目錄 /compare/path ,然后源目錄 /source/path 跟基準目錄進行比較,找出變動的文件,將它們拷貝到目標(biāo)目錄 /target/path 。那些沒變動的文件則會生成硬鏈接。這個命令的第一次備份時是全量備份,后面就都是增量備份了。
一般服務(wù)器之間復(fù)制文件都比較大,為防止誤操作,最好在后臺運行。但因為需要和遠程服務(wù)器之間的ssh通訊多是需要密碼的,所以不能直接使用nohup 放置于后臺。無論是scp還是rsync都可操作如下:
后臺和前臺任務(wù)的切換
scp不支持斷點續(xù)傳,掛起scp進程可能導(dǎo)致數(shù)據(jù)缺失。傾向于使用rsync。
如果有其他任務(wù)需要使用nohup后臺運行,但執(zhí)行時卻忘記了使用nohup,也可參照此方法進行設(shè)置。
參考:1. Linux之scp命令及后臺運行scp
fg 將后臺中的命令調(diào)至前臺繼續(xù)運行
bg 將一個在后臺暫停的命令,變成繼續(xù)執(zhí)行
jobs 查看當(dāng)前有多少在后臺運行的命令
舉例:
$ jobs
[1]- Stopped vim abc
[2]+ Stopped vim def此處使用jobs查看后臺任務(wù)列表,看到有兩個進程處于后臺
$ fg 2
執(zhí)行該命令可將 "vim def"進程調(diào)至前臺運行
在前臺運行的程序中按ctrl + z 可以將一個正在前臺執(zhí)行的命令放到后臺,并且暫停。
有些時候,我們需要在終端啟動一個程序,并使之運行——但是如果關(guān)閉終端,那么這個程序也就隨著關(guān)閉了。那么有沒有什么方法在關(guān)閉終端后,讓已經(jīng)從這個終端啟動的程序繼續(xù)運行呢?有以下方法
1.讓linux忽略終端的hung up 信號,不關(guān)閉進程;
2.讓此進程變?yōu)榻K端的非子進程。
方法一:
在終端輸入命令:
# ./pso pso.file 21
解釋:將pso直接放在后臺運行,并把終端輸出存放在當(dāng)前目錄下的pso.file文件中。
當(dāng)客戶端關(guān)機后重新登陸服務(wù)器后,直接查看pso.file文件就可看執(zhí)行結(jié)果(命
令:#cat pso.file )。
或者 在終端輸入命令:
# nohup ./pso pso.file 21
解釋:nohup就是不掛起的意思,將pso直接放在后臺運行,并把終端輸出存放在當(dāng)前
目錄下的pso.file文件中。當(dāng)客戶端關(guān)機后重新登陸服務(wù)器后,直接查看pso.file
文件就可看執(zhí)行結(jié)果(命令:#cat pso.file )。
方法二:
實現(xiàn)方案就是nohup命令。
例如要啟動jboss,可以nohup ./run.sh 。這樣就可以了,結(jié)尾的“”符號表示后臺啟動jboss,從而不影響繼續(xù)運行其他命令。
但這樣有一個問題,nohup命令雖然可以讓linux“放過”這個進程,但是nohup會同時把進程的控制臺輸出重定向到nohup.txt下(默認是這個文件),當(dāng)然可以重定向為其他的文件,但是輸出總會有的。
如果jboss運行很長時間,而且如果有很多控制臺輸出的話,nohup.txt文件就會變的很大很大。
通常項目中的日志都會輸出到特定的日志文件或者輸出到 數(shù)據(jù)庫 中,也就是說控制臺的輸出對于程序的意義不大,那么可不可以拋棄掉這些輸出呢?答案是肯定的。
這里講解一下linux的重定向(注意,是linux的重定向,不是針對nohup)。
0、1和2分別表示標(biāo)準輸入、標(biāo)準輸出和標(biāo)準錯誤信息輸出,可以用來指定需要重定向的標(biāo)準輸入或輸出。
在一般使用時,默認的是標(biāo)準輸出,既1.當(dāng)我們需要特殊用途時,可以使用其他標(biāo)號。例如,將某個程序的錯誤信息輸出到log文件中:./program 2log。這樣標(biāo)準輸出還是在屏幕上,但是錯誤信息會輸出到log文件中。
另外,也可以實現(xiàn)0,1,2之間的重定向。21:將錯誤信息重定向到標(biāo)準輸出。
Linux下還有一個特殊的文件/dev/null,它就像一個無底洞,所有重定向到它的信息都會消失得無影無蹤。
結(jié)合nohup,我們可以這樣 nohup ./run.sh /dev/null
這是最簡單的一種方式,既保證了程序能夠一直后臺執(zhí)行,又能保證不會產(chǎn)生太大的nohup.txt文件。
方法三:
利用的linux的一個機制,讓程序在subshell中執(zhí)行,方法很簡單,將命令用括號() 括起來即可。
ps -ef | grep test
可以看到run.sh的父進程為1,不是當(dāng)前終端了,這樣就能忽略hung up信號。
當(dāng)然linux還可以動態(tài)的讓程序后臺運行或不被hung up 信號關(guān)閉,例如disown命令,setid命令等。
方法四:
如果是使用Ubuntu的話,你可以利用CTRL+ALT+T組合鍵打開終端。當(dāng)然你也可以使用超級鍵(Windows鍵)打開Dash,搜索“TERM”,然后點擊“Term”圖標(biāo)來打開終端窗口。
對于其他的桌面環(huán)境來說,例如XFCE、KDE、LXDE、Cinnamon以及MATE,你可以在菜單中找到終端。有些環(huán)境會在??繖诨蛘呙姘迳厦姘K端圖標(biāo)。
通常情況下,你可以在終端里面直接輸入應(yīng)用程序名來啟動一個應(yīng)用程序。比如說,你可以通過輸入“firefox”來啟動Firefox。
在終端啟動應(yīng)用程序的好處是,你可以包含一些額外的參數(shù)。
例如,你可以通過下列命令來打開一個Firefox瀏覽窗口,然后利用默認的搜索引擎搜索相關(guān)信息:
firefox -search "linux.cn"
你可能會注意到,如果你啟動Firefox,程序打開以后,回到了終端窗口控制,這就意味著你可以繼續(xù)在終端進行工作。
通常情況下,如果你在終端啟動了應(yīng)用程序,控制會切換到新啟動的應(yīng)用程序,只有程序被關(guān)閉以后才會重新切換到終端控制。這是因為你在前臺啟動了這個程序。
如果要在Linux終端打開應(yīng)用程序并且返回終端控制,那么你需要將應(yīng)用程序啟動為后臺進程。
和下面所列的命令一樣,我們可以通過增加一個()符號,將應(yīng)用程序在后臺啟動。
libreoffice
譯者注:如果需要加參數(shù)的話,記得把符號放在最后。
譯者注:一般情況下,關(guān)閉終端時,在這個終端啟動的后臺程序也會被終止,要使終端關(guān)閉以后,后臺程序依然保持執(zhí)行可以使用下列命令
nohup command [arg...]
如果應(yīng)用程序目錄沒有安裝在PATH變量包含的目錄里面的話,我們就沒有辦法直接通過應(yīng)用程序名來啟動程序,必須輸入應(yīng)用程序的整個路徑來啟動它。
/path/to/yourprogram
如果你不確定程序輸入哪個Linux目錄結(jié)構(gòu)的話,可以使用find或者location命令來定位它。
可以輸入下列符號來找到一個文件:
find /path/to/start/from -name programname
例如,你可以輸入下列命令來找到Firefox:
find / -name firefox
命令運行的結(jié)果會嗖的一下輸出一大堆,別擔(dān)心,你也可以通過less或者more來進行分頁查看。
find / -name firefox | more find / -name firefox | less
當(dāng)find命令查找到?jīng)]有權(quán)限訪問的文件夾時,會報出一條拒絕訪問錯誤,
你可以通過sudo命令來提示權(quán)限。當(dāng)然,如果你沒有安裝sudo的話,就只能切換到一個擁有權(quán)限的用戶了。
sudo find / -name firefox | more
如果你知道你要查找的文件在你的當(dāng)前目錄結(jié)構(gòu)中,那么你可以使用點來代替斜杠:
sudo find . -name firefox | more
你可能需要sudo來提升權(quán)限,也可能根本就不需要,如果這個文件在你的主目錄里面,那么就不需要使用sudo。
有些應(yīng)用程序則必須要提升權(quán)限才能運行,否則你就會得到一大堆拒絕訪問錯誤,除非你使用一個具有權(quán)限的用戶或者使用sudo提升權(quán)限。
這里有個小竅門。如果你運行了一個程序,但是它需要提升權(quán)限來操作,輸入下面命令試試:
sudo !!
方法五:
在Unix/Linux下如果想讓程序獨立終端運行,一般都是使用 在命令結(jié)尾來讓程序自動運行。(命令后可以不追加空格)
打開gnome-terminal,執(zhí)行如下命令:
delectate@delectate:~$ totem [1] 8510delectate@delectate:~$ 有幾點需要注意:
已經(jīng)啟動的程序依然attach于當(dāng)前pts,只有當(dāng)前終端模擬器關(guān)閉(使用exit命令退出),進程自動被tty繼承。delectate@delectate:~$ ps -e | grep totem //程序已被以totem 形式啟動,當(dāng)前附在pts0上8819 pts/0 00:00:00 totemdelectate@delectate:~$ ps -e | grep totem //pts0的模擬終端被exit命令關(guān)閉,totem自動附在tty8819 ? 00:00:00 totemdelectate@delectate:~$
具有debug輸出的進程,需要按enter鍵進行中斷當(dāng)前debug輸出。但是如果程序持續(xù)進行printf,你將無法輸入任何命令。delectate@delectate:~$ vlc [1] 8850delectate@delectate:~$ VLC media player 1.0.6 Goldeneye[0x8b998b0] main libvlc: Running vlc with the default interface. Use ‘cvlc’ to use vlc without interface. //enter presseddelectate@delectate:~$ //show a clean terminal now** (:8850): CRITICAL **: giop_thread_request_push: assertion `tdata != NULL’ failed //仍然在輸出數(shù)據(jù)…… //關(guān)閉程序[1]+ Done vlcdelectate@delectate:~$
你無法記錄程序的debug輸出結(jié)果。
只有當(dāng)虛擬終端是 $ 或者 # 時候,才可以關(guān)閉此終端,否則可能導(dǎo)致已經(jīng)啟動的進程被關(guān)閉(按enter——如果程序持續(xù)輸出信息而沒有出現(xiàn) $ 或 #)
使用nohup命令:
nohup描述:Run COMMAND, ignoring hangup signals.(忽略任何中斷/掛起信號,使命令繼續(xù)執(zhí)行)
但是當(dāng)你嘗試使用命令:
1nohup command
時候卻會遇到不大不小的麻煩……
delectate@delectate:~$ nohup vlcnohup: ignoring input and appending output to `nohup.out’
是的,雖然它自動把debug信息記錄到nohup.out文件,但是你卻無法使用這個終端進行任何操作。
所以你需要和第一個方法混用,即
nohupcommand {option}
混用后,它會自動把你執(zhí)行的命令輸出結(jié)果記錄到權(quán)限為-rw——-,名為nohup.out的文件中。
但是你仍然需要
delectate@delectate:~$ nohup vlc [1] 9045delectate@delectate:~$ nohup: ignoring input and appending output to `nohup.out’ //在這里按一下回車或以ctrl+c以 //show a clean terminal delectate@delectate:~$
與使用 “” 性質(zhì)相同,當(dāng)前啟動程序的終端如果沒有被關(guān)閉,已經(jīng)啟動的程序附在pst上;如果終端被關(guān)閉,則自動附在tty。
如果當(dāng)前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out。默認狀態(tài)下,nohup默認輸出到nohup.out文件,你也可以利用重定向來指定輸出文件:
nohupcommand {option} myout.file 21
只有當(dāng)虛擬終端是 $ 或者 # 時候,才可以關(guān)閉此終端,否則可能導(dǎo)致已經(jīng)啟動的進程被關(guān)閉(按enter——如果程序持續(xù)輸出信息而沒有出現(xiàn) $ 或 #)
其他相關(guān)命令:
jobs:查看當(dāng)前有多少在后臺運行的命令
fg:將后臺中的命令調(diào)至前臺繼續(xù)運行。如果后臺中有多個命令,可以用 fg %jobnumber將選中的命令調(diào)出,%jobnumber是通過jobs命令查到的后臺正在執(zhí)行的命令的序號(不是pid)
bg:將一個在后臺暫停的命令,變成繼續(xù)執(zhí)行。如果后臺中有多個命令,可以用bg %jobnumber將選中的命令調(diào)出,%jobnumber是通過jobs命令查到的后臺正在執(zhí)行的命令的序號(不是pid)
殺死進程
殺死已經(jīng)啟動的程序和普通方式一樣:
pkill -9 name
killall name
kill pid
…
命令應(yīng)用:
linux服務(wù)器掛機下載;啟動相關(guān)服務(wù);linux服務(wù)器啟動進程(尤其是ssh登錄)
我就曾經(jīng)用 1nohup aria2c -i downloadlist -m 0 -j 1