Ⅰ 如何備份redhat linux系統
備份linux系統,不像Windows,Linux不限制根用戶存孝頌唯取任何東西,因此,你完全可以把一個分區上每一個的文件放入一個TAR文件中。來實施這一方法,用這個成為根用戶:
sudo su
接著去你的文件系統的根目錄(在我們的例子中,我們使用它,不過你可以去你希望備份的任何地方,包括遠程或可移動驅動器。)
cd /
然後,下面就是我用來備份我的系統的完整的命令:
tar cvpzf backup.tgz / --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys
接著,讓我們稍微解釋一下:
很明顯,'tar'部分就是我們將要使用的軟體。
'cvpfz'是我們給tar加的選項,像「創建一個壓縮文檔」(這是顯然的),「保存許可權」(以便使每一個相同的文件有相同的許可權),以及「gzip」(縮減大小)。
接下來巧培,是壓縮文檔將獲得的名稱,在我們的例子中是backup.tgz。
緊隨其後的是我們想要備份的根目錄。既然我們想備份所有東西:/
接著就是我們要剔除的目錄了。我們不想備份每一樣東西,因為包括有些目錄不是非常有用。同時確保你沒有把備份文件本身也加進去了,否則,你會得到怪異的結果的。你也許同樣不打算把/mnt文件夾包括進來——如果你在那兒掛載了其他分區——否則最終你會把那些也備份的。同時確保你沒有任何東西掛載在 /media(即沒有掛載任何cd或可移動介質)。否則,剔除/media。
如果你想排除所有的其他分區,你可以使用 'l' 參數代替 --exclude, 上面的命令看起來象這樣:
tar cvpzlf backup.tgz / --exclude=/lost+found --exclude=/backup.tgz
按:kvidell在論壇主題里建議也剔除/dev目錄。不過,我有其他證據表明這樣做是不明智的。
好了,如果命令適合你的話,敲擊確定鍵(或者回車鍵,管它叫什麼名字),然後什麼都不用干,放鬆一下。備份也許會花上一段時間。
完了以後,在你的文件系統的根目錄會有一個叫作backup.tgz的文件——很可能相當巨大。現在你可以把燒錄到DVD上,或者移動到另一台機器,你可以做任何你想做的事情。
按2:在進程的最後,你也許會得到一條信息,寫著「tar:由於先前錯誤的耽擱而存在錯誤」或者其他什麼,不過大多數情況下你可以僅僅忽略它。
作為選擇,你可以使用Bzip來壓縮你的備份。這意味著較高的壓縮比但是也意味著較低的速度。如果壓縮比對你很重要,只需用「j」替換命令中的「z」, 同時給備份命一個相應的擴展名。這些會使命令變成這樣:
tar cvpjf backup.tar.bz2 / --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys
2.1. 通過網路備份如果空白的文件系統太少了並且你又不能掛載其它的文件系統來保存備份文件,你有可能使用 netcat 來完成備份.
在接受端你必須設置 netcat 用於寫備份文件,象這樣:
nc -l -p 1024 > backup.tar.bz2
然後你傳送 tar 命令,不帶 'f' 參數通過 netcat 在發送端,象這樣:
tar cvpj / | nc -q 0 1024
在上面的命令中 1024 僅僅是一個隨機的埠號, 任何從 1024 或以上的都可以工作.
如果安全的通過網路備份不依賴文件系統完成備份. 事櫻搏實上一個真正快的網路比寫備份文件到磁碟要快.
在上面的講述中 (由於我剛剛發呆,因此我不能證實它是可靠的) 是這個命令:
tar cvpj / | ssh "cat > backup.tar.bz2"
3. 恢復警告:看在上帝的份上,在這一部分請小心謹慎。如果你不理解你在這里幹了什麼,你可能最終毀壞了對你而言很重要的東西,所以請小心謹慎。 那麼,我們將緊接著上一章的例子:在分區的根目錄下的backup.tgz文件
再一次確保你是根用戶以及備份文件在文件系統的根目錄。
Linux美妙的地方之一就是這一項工作甚至可以在一個正在運行的系統上進行;沒必要被引導cd或者任何東西搞得暈頭轉向。當然,如果你使你的系統無法被引導了。你也許別無選擇,只能使用一張live-cd了,但是結果是一樣的。你甚至可以在Linux系統正在運行的時候,移除它裡面所有文件。可是我不告訴你那個命令!
好了,言歸正傳。這是我要用的命令:
tar xvpfz backup.tgz -C /
如果你使用 bz2
tar xvpfj backup.tar.bz2 -C /
警告:這會把你分區里所有文件替換成壓縮文檔里的文件!
只要敲一下確定/回車/你的兄弟/隨便什麼,然後去看焰火吧。同樣,這會花一段時間。等它完成了,你就有了一個完全恢復的Ubuntu系統!只需確保在你做其他任何事情之前,重新創建你剔除的目錄:
mkdir proc mkdir lost+found mkdir mnt mkdir sys etc...
當你重啟以後,所以的事情都會和你備份的時候一模一樣。
3.1. 恢復 GRUB那麼,如果你想把你的系統移動到一塊新硬碟上,或者,你想對你的GRUB做一些糟糕的事情(比方說,安裝Windows),你也將需要重裝GRUB。在這個論壇里,有不少如何做這個的非常好的指導,所以我不會從頭重新做起。相反,看一下這里(論壇) 或者這兒:
在這個論壇主題中,提出了一些方法。我個人建議第二個,remmelt貼出來的,因為我發現它每次都管用。
對,就是那個!我希望它有幫助!
4. 其他方法也許你也想看一下這些能幫助你自動備份系統的程序
Partimage
Mondo Rescue
Ⅱ shell awk命令詳解
awk命令
awk是一種編程語言,用於在linux/unix下對文本和數據進行處理。數據可以來自標准輸入(stdin)、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更多是作為腳本來使用。awk有很多內建的功能,比如數組、函數等,這是它和C語言的相同之處,靈活性是awk最大的優勢。
awk命令格式和選項
語法格式
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
常用命令選項
-F fs fs 指定輸入分隔符,fs可以時字元串或正則表達式
-v var=value 賦值一個用戶定義變數,將外部變數傳遞給awk
-f scriptfile 從腳本文件中讀取awk命令
awk腳本
awk腳本是由模式和操作組成的。
模式與操作
模式
模式可以是以下任意一種:
正則表達式:使用通配符的擴展集
關系表達式:使用運算符進行操作,可以是字元串或數字的比較測試
模式匹配表達式:用運算符~(匹配)和~!不匹配
BEGIN 語句塊, pattern語句塊, END語句塊
操作
操作由一個或多個命令、函數、表達式組成,之間由換行符或分號隔開,並位於大刮號內,主要部分是:變數或數組賦值、輸出命令、內置函數、控制流語句。
awk腳本基本格式
awk 'BEGIN{ commands } pattern{ commands } END{ commands }' file
一個awk腳本通常由BEGIN, 通用語句塊,END語句塊組成,三部分都是可選的。 腳本通常是被單引號或雙引號包住。
awk 'BEGIN{ i=0 } { i++ } END{ print i }' filename
awk "BEGIN{ i=0 } { i++ } END{ print i }" filename
awk執行過程分析
第一步: 執行BEGIN { commands } pattern 語句塊中的語句
BEGIN語句塊:在awk開始從輸入輸出流中讀取行之前執行,在BEGIN語句塊中執行如變數初始化,列印輸出表頭等操作。
第二步:從文件或標准輸入中讀取一行,然後執行pattern{ commands }語句塊。它逐行掃描文件,從第一行到最後一行重復這個過程,直到全部文件都被讀取完畢。
pattern語句塊:pattern語句塊中的通用命令是最重要的部分,它也是可選的。如果沒有提供pattern語句塊,則默認執行{ print },即列印每一個讀取到的行。{ }類似一個循環體,會對文件中的每一行進行迭代,通常將變數初始化語句放在BEGIN語句塊中,將列印結果等語句放在END語句塊中。
第三步:當讀至輸入流末尾時,執行END { command }語句塊
END語句塊:在awk從輸入流中讀取完所有的行之後即被執行,比如列印所有行的分析結果這類信息匯總都是在END語句塊中完成,它也是一個可選語句塊。
AWK內置變數
$n : 當前記錄的第n個欄位,比如n為1表示第一個欄位,n為2表示第二個欄位。
$0 : 這個變數包含執行過程中當前行的文本內容。
ARGC : 命令行參數的數目。
ARGIND : 命令行中當前文件的位置(從0開始算)。
ARGV : 包含命令行參數的數組。
CONVFMT : 數字轉換格式(默認值為%.6g)。
ENVIRON : 環境變數關聯數組。
ERRNO : 最後一個系統錯誤的描述。
FIELDWIDTHS : 欄位寬度列表(用空格鍵分隔)。
FILENAME : 當前輸入文件的名。
NR : 表示記錄數,在執行過程中對應於當前的行號
FNR : 同NR :,但相對於當前文件。
FS : 欄位分隔符(默認是任何空格)。
IGNORECASE : 如果為真,則進行忽略大小寫的匹配。
NF : 表示欄位數,在執行過程中對應於當前的欄位數。 print $NF答應一行中最後一個欄位
OFMT : 數字的輸出格式(默認值是%.6g)。
OFS : 輸出欄位分隔符(默認值是一個空格)。
ORS : 輸出記錄分隔符(默認值是一個換行符)。
RS : 記錄分隔符(默認是一個換行符)。
RSTART : 由match函數所匹配的字元串的第一個位置。
RLENGTH : 由match函數所匹配的字元串的長度。
SUBSEP : 數組下標分隔符(默認值是34)。
將外部變數值傳遞給awk
藉助 -v 選項,可以將來自外部值(非stdin)傳遞給awk
VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
定義內部變數接收外部變數
var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
當輸入來自文件時
awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename
awk運算
算術運算:(+,-,*,/,&,!,……,++,--)
所有用作算術運算符進行操作時,操作數自動轉為數值,所有非數值都變為0
賦值運算:(=, +=, -=,*=,/=,%=,……=,**=)
邏輯運算符: (||, &&)
關系運算符:(<, <=, >,>=,!=, ==)
正則運算符:(~,~!)(匹配正則表達式,與不匹配正則表達式)
awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'
ok
awk高級輸入輸出
讀取下一條記錄:next 語句
awk中next語句使用:在循環逐行匹配,如果遇到next,就會跳過當前行,直接忽略下面語句。而進行下一行匹配。net語句一般用於多行合並:
awk 'NR%2==1{next}{print NR,$0;}' text.txt
說明: 當記錄行號除以2餘1,就跳過當前行。下面的print NR,$0也不會執行。下一行開始,程序有開始判斷NR%2值。這個時候記錄行號是:2 ,就會執行下面語句塊:print NR,$0
讀取一行記錄:getline 語句
awk getline用法:輸出重定向需用到getline函數。getline從標准輸入、管道或者當前正在處理的文件之外的其他輸入文件獲得輸入。它負責從輸入獲得下一行的內容,並給NF,NR和FNR等內建變數賦值。如果得到一條記錄,getline函數返回1,如果到達文件的末尾就返回0,如果出現錯誤,例如打開文件失敗,就返回-1。
語法格式:getline var 變數var包含了特定行的內容
用法說明:
當其左右無重定向符時|,<時:getline作用於當前文件,讀入當前文件的第一行給其後跟的變數var或$0(無變數),應該注意到,由於awk在處理getline之前已經讀入了一行,所以getline得到的返回結果是隔行的。
當其左右有重定向符時|,<時:getline則作用於定向輸入文件,由於該文件是剛打開,並沒有被awk讀入一行,只是getline讀入,那麼getline返回的是該文件的第一行,而不是隔行。
文件操作
打開文件 open("filename")
關閉文件 close("filename")
輸出到文件 重定向到文件,如echo | awk '{printf("hello word!n") > "datafile"}'
循環結構
for循環
for(變數 in 數組)
{語句}
for(變數;條件;表達式)
{語句}
while循環
while(表達式)
{語句}
do...while循環
do
{語句} while(條件)
其他相關語句
break:退出程序循環
continue: 進入下一次循環
next:讀取下一個輸入行
exit:退出主輸入循環,進入END,若沒有END或END中有exit語句,則退出腳本。
數組
在awk中數組叫做關聯數組(associative arrays)。awk 中的數組不必提前聲明,也不必聲明大小。數組元素用0或空字元串來初始化,這根據上下文而定。
awk 'BEGIN{
Array[1]="sun"
Array[2]="kai"
Array["first"]="www"
Array["last"]="name"
Array["birth"]="1987"
info = "it is a test";
lens = split(info,tA," ");
for(item in tA)
{print tA[item];}
for(i=1;i<=lens;i++)
{print tA[i];}
print length(tA[lens]);
} {
print "item in array";
for(item in Array) {print Array[item]};
print "print in i++";
for(i=1;i<=length(Array);i++) {print Array[i]};
}'
獲取數組長度
awk 'BEGIN{
info="it is a test";
lens=split(info,tA," "); #使用split函數獲取數組長度
print length(tA),lens; #使用length函數獲取數組長度(版本有要求)
}'
**說明:** **版本夠高**的awk當中,支持直接得到數組長度的方法length(),如果awk的版本過低,則不支持。另外,如果傳給length的變數是一個字元串,那麼length返回的則字元串的長度。
輸出數組內容
有序輸出 for...in
因為數組時關聯數組,默認是無序的
無序輸出 for(i=1;i<l=ens;i++)
數組下標從1開始
判斷鍵值是否存在
#錯誤的判斷方法,awk數組是關聯數組,只要通過數組引用它的KEY,就會自動創建。
awk 'BEGIN{
tB["a"]="a1";
tB["b"]="b1";
if(tB["c"]!="1"){ #tB["c"]沒有定義,但是循環的時候會輸出
print "no found";
};
for(k in tB){
print k,tB[k];
}}'
#正確的判定方法:使用 if ( key in array) 判斷數組中是否包含 鍵值
awk 'BEGIN{
tB["a"]="a1";
tB["b"]="b1";
if( "c" in tB){
print "ok";
};
for(k in tB){
print k,tB[k];
}}'
刪除鍵值
delete array[key]可以刪除,對應數組key的,序列值。
awk 'BEGIN{
tB["a"]="a1";
tB["b"]="b1";
delete tB["a"];
for(k in tB){
print k,tB[k];
}}'
二維,多維數組
awk的多維數組在本質上是一維數組,更確切一點,awk在存儲上並不支持多維數組。awk提供了邏輯上模擬二維數組的訪問方式。例如,array[2,4]=1這樣的訪問是允許的。awk使用一個特殊的字元串SUBSEP作為分割欄位。 類似一維數組的成員測試,多維數組可以使用if ( (i,j) in array)這樣的語法,但是下標必須放置在圓括弧中。類似一維數組的循環訪問,多維數組使用for ( item in array )這樣的語法遍歷數組。與一維數組不同的是,多維數組必須使用split()函數來訪問單獨的下標分量。
awk 'BEGIN{
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
tarr[i,j]=i*j;
print i,"*",j,"=",tarr[i,j];
}
}
}'
awk 'BEGIN{
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
tarr[i,j]=i*j; } }
for(m in tarr){
split(m,tarr2,SUBSEP);
print tarr2[1],"*",tarr2[2],"=",tarr[m]; } }'
內置函數
算術函數
格式 描述
atan2( y, x ) 返回 y/x 的反正切。
cos( x ) 返回 x 的餘弦;x 是弧度。
sin( x ) 返回 x 的正弦;x 是弧度。
exp( x ) 返回 x 冪函數。
log( x ) 返回 x 的自然對數。
sqrt( x ) 返回 x 平方根。
int( x ) 返回 x 的截斷至整數的值。
rand( ) 返回任意數字 n,其中 0 <= n < 1。
srand( [expr] ) 將 rand 函數的種子值設置為 Expr 參數的值,或如果省略 Expr 參數則使用某天的時間。返回先前的種子值。
awk 'BEGIN{
OFMT="%.3f"; #OFMT 設置輸出數據格式是保留3位小數。
fs=sin(1);
fe=exp(10);
fl=log(10);
fi=int(3.1415);
print fs,fe,fl,fi;
}'
輸出結果為:0.841 22026.466 2.303 3
awk 'BEGIN{
srand();
fr=int(100*rand());
print fr;
}'
輸出:78
字元串函數
格式 描述
gsub( Ere, Repl, [ In ] ) 除了正則表達式所有具體值被替代這點,它和 sub 函數完全一樣地執行。
sub( Ere, Repl, [ In ] ) 用 Repl 參數指定的字元串替換 In 參數指定的字元串中的由 Ere 參數指定的擴展正則表達式的第一個具體值。sub 函數返回替換的數量。出現在 Repl 參數指定的字元串中的 &(和符號)由 In 參數指定的與 Ere 參數的指定的擴展正則表達式匹配的字元串替換。如果未指定 In 參數,預設值是整個記錄($0 記錄變數)。
index( String1, String2 ) 在由 String1 參數指定的字元串(其中有出現 String2 指定的參數)中,返回位置,從 1 開始編號。如果 String2 參數不在 String1 參數中出現,則返回 0(零)。
length [(String)] 返回 String 參數指定的字元串的長度(字元形式)。如果未給出 String 參數,則返回整個記錄的長度($0 記錄變數)。
blength [(String)] 返回 String 參數指定的字元串的長度(以位元組為單位)。如果未給出 String 參數,則返回整個記錄的長度($0 記錄變數)。
substr( String, M, [ N ] ) 返回具有 N 參數指定的字元數量子串。子串從 String 參數指定的字元串取得,其字元以 M 參數指定的位置開始。M 參數指定為將 String 參數中的第一個字元作為編號 1。如果未指定 N 參數,則子串的長度將是 M 參數指定的位置到 String 參數的末尾 的長度。
match( String, Ere ) 在 String 參數指定的字元串(Ere 參數指定的擴展正則表達式出現在其中)中返回位置(字元形式),從 1 開始編號,或如果 Ere 參數不出現,則返回 0(零)。RSTART 特殊變數設置為返回值。RLENGTH 特殊變數設置為匹配的字元串的長度,或如果未找到任何匹配,則設置為 -1(負一)。
tolower( String ) 返回 String 參數指定的字元串,字元串中每個大寫字元將更改為小寫。大寫和小寫的映射由當前語言環境的 LC_CTYPE 范疇定義。
toupper( String ) 返回 String 參數指定的字元串,字元串中每個小寫字元將更改為大寫。大寫和小寫的映射由當前語言環境的 LC_CTYPE 范疇定義。
sprintf(Format, Expr, Expr, . . . ) 根據 Format 參數指定的 printf 子常式格式字元串來格式化 Expr 參數指定的表達式並返回最後生成的字元串。
說明: Ere都可以是正則表達式。
時間函數
格式 描述
mktime( YYYY MM dd HH MM ss[ DST]) 生成時間格式
strftime([format [, timestamp]]) 格式化時間輸出,將時間戳轉為時間字元串 具體格式,見下表.
systime() 得到時間戳,返回從1970年1月1日開始到當前時間(不計閏年)的整秒數
strftime日期和時間格式說明符 :
格式 描述
%a 星期幾的縮寫(Sun)
%A 星期幾的完整寫法(Sunday)
%b 月名的縮寫(Oct)
%B 月名的完整寫法(October)
%c 本地日期和時間
%d 十進制日期
%D 日期 08/20/99
%e 日期,如果只有一位會補上一個空格
%H 用十進製表示24小時格式的小時
%I 用十進製表示12小時格式的小時
%j 從1月1日起一年中的第幾天
%m 十進製表示的月份
%M 十進製表示的分鍾
%p 12小時表示法(AM/PM)
%S 十進製表示的秒
%U 十進製表示的一年中的第幾個星期(星期天作為一個星期的開始)
%w 十進製表示的星期幾(星期天是0)
%W 十進製表示的一年中的第幾個星期(星期一作為一個星期的開始)
%x 重新設置本地日期(08/20/99)
%X 重新設置本地時間(12:00:00)
%y 兩位數字表示的年(99)
%Y 當前月份
%Z 時區(PDT)
%% 百分號(%)
#mktime使用
awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}'
輸出:2001年01月01日 星期一 12時12分12秒
awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}'
輸出:2634468
#求2個時間段中間時間差,介紹了strftime使用方法
awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}'
輸出:308201392
其他一般函數
格式 描述
close( Expression ) 用同一個帶字元串值的 Expression 參數來關閉由 print 或 printf 語句打開的或調用getline 函數打開的文件或管道。如果文件或管道成功關閉,則返回 0;其它情況下返回非零值。如果打算寫一個文件,並稍後在同一個程序中讀取文件,則 close 語句是必需的。
system(command ) 執行 Command 參數指定的命令,並返回退出狀態。等同於 system 子常式。
Expression | getline [ Variable ] 從來自 Expression 參數指定的命令的輸出中通過管道傳送的流中讀取一個輸入記錄,並將該記錄的值指定給 Variable 參數指定的變數。如果當前未打開將 Expression 參數的值作為其命令名稱的流,則創建流。創建的流等同於調用 popen 子常式,此時 Command 參數取 Expression 參數的值且 Mode 參數設置為一個是 r 的值。只要流保留打開且 Expression 參數求得同一個字元串,則對 getline 函數的每次後續調用讀取另一個記錄。如果未指定 Variable 參數,則 $0 記錄變數和 NF 特殊變數設置為從流讀取的記錄。
getline [ Variable ] < Expression 從 Expression 參數指定的文件讀取輸入的下一個記錄,並將 Variable 參數指定的變數設置為該記錄的值。只要流保留打開且 Expression 參數對同一個字元串求值,則對 getline 函數的每次後續調用讀取另一個記錄。如果未指定 Variable 參數,則 $0 記錄變數和 NF 特殊變數設置為從流讀取的記錄。
getline [ Variable ] 將 Variable 參數指定的變數設置為從當前輸入文件讀取的下一個輸入記錄。如果未指定 Variable 參數,則 $0 記錄變數設置為該記錄的值,還將設置 NF、NR 和 FNR 特殊變數。
#打開外部文件(close用法)
awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}'
輸出: root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
#逐行讀取外部文件(getline使用方法)
awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}'
輸出:root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
awk 'BEGIN{print "Enter your name:";getline name;print name;}'
Enter your name:
chengmo
chengmo
#調用外部應用程序(system使用方法) b返回值,是執行結果。
awk 'BEGIN{b=system("ls -al");print b;}'
輸出: total 42092 drwxr-xr-x 14 chengmo chengmo 4096 09-30 17:47 . drwxr-xr-x 95 root root 4096 10-08 14:01 ..
Ⅲ Linux怎麼設置系統環境變數之export命令詳解
1. Linux export命令簡介
Linux export命令用於設置或顯示環境變數。
在shell中執行程序時,shell會提供一組環境變數。export可新增,修改或刪除環境變數,供後續執行的程序使用。export的效力僅及於該次登陸操作。
export命令用於將shell變數輸出為環境變數,或者將shell函數輸出為環境變數。
一個變數創建時,它不會自動地為在它之後創建的shell進程所知。而命令export可以向後面的shell傳遞變數的值。當一個shell腳本調用並執 行時,它不會自動得到原為腳本(調用者)里定義的變數的訪問權,除非這些變數已經被顯式地設置為可用。export命令可以用於傳遞一個或多個變數的值到任何後繼腳本。
Linux export命令簡介
2. export參數
-f 代表[變數名稱]中為函數名稱。
-n 刪除指定的變數。變數實際上並未刪除,只是不會輸出到後續指令的執行環境中。
-p 列出所有的shell賦予程序的環境變數。
一個變數創建時,它不會自動地為在它之後創建的shell進程所知。而命令export可以向後面的shell傳遞變數的值。當一個shell腳本調用並執行時,它不會自動得到原為腳本(調用者)里定義的變數的訪問權,除非這些變數已經被顯式地設置為可用。export命令可以用於傳遞一個或多個變數的值到任何後繼腳本。
Linux怎麼設置變數環境
3. 在linux里設置環境變數的方法
一般來說,配置交叉編譯工具鏈的時候需要指定編譯工具的路徑,此時就需要設置環境變數。例如我的mips-linux-gcc編譯器在「/opt/abc/123/bin」目錄下,有如下三種方法來設置環境變數:
3.1 直接用export命令,臨時生效
查看是否已經設好,可用命令export查看:
檢查:
輸出結果:
declare -x HISTCONTROL="ignoreps"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="zcwyou"
declare -x LANG="en_US.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32: .tar=01;31: .tgz=01;31: .arc=01;31: .arj=01;31: .taz=01;31: .lha=01;31: .lz4=01;31: .lzh=01;31: .lzma=01;31: .tlz=01;31: .txz=01;31: .tzo=01;31: .t7z=01;31: .zip=01;31: .z=01;31: .Z=01;31: .dz=01;31: .gz=01;31: .lrz=01;31: .lz=01;31: .lzo=01;31: .xz=01;31: .bz2=01;31: .bz=01;31: .tbz=01;31: .tbz2=01;31: .tz=01;31: .deb=01;31: .rpm=01;31: .jar=01;31: .war=01;31: .ear=01;31: .sar=01;31: .rar=01;31: .alz=01;31: .ace=01;31: .zoo=01;31: .cpio=01;31: .7z=01;31: .rz=01;31: .cab=01;31: .jpg=01;35: .jpeg=01;35: .gif=01;35: .bmp=01;35: .pbm=01;35: .pgm=01;35: .ppm=01;35: .tga=01;35: .xbm=01;35: .xpm=01;35: .tif=01;35: .tiff=01;35: .png=01;35: .svg=01;35: .svgz=01;35: .mng=01;35: .pcx=01;35: .mov=01;35: .mpg=01;35: .mpeg=01;35: .m2v=01;35: .mkv=01;35: .webm=01;35: .ogm=01;35: .mp4=01;35: .m4v=01;35: .mp4v=01;35: .vob=01;35: .qt=01;35: .nuv=01;35: .wmv=01;35: .asf=01;35: .rm=01;35: .rmvb=01;35: .flc=01;35: .avi=01;35: .fli=01;35: .flv=01;35: .gl=01;35: .dl=01;35: .xcf=01;35: .xwd=01;35: .yuv=01;35: .cgm=01;35: .emf=01;35: .axv=01;35: .anx=01;35: .ogv=01;35: .ogx=01;35: .aac=01;36: .au=01;36: .flac=01;36: .mid=01;36: .midi=01;36: .mka=01;36: .mp3=01;36: .mpc=01;36: .ogg=01;36: .ra=01;36: .wav=01;36: .axa=01;36: .oga=01;36: .spx=01;36:*.xspf=01;36:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/abc/123/bin"
declare -x PWD="/root"
declare -x SELINUX_LEVEL_REQUESTED=""
declare -x SELINUX_ROLE_REQUESTED=""
declare -x SELINUX_USE_CURRENT_RANGE=""
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="113.105.164.145 6668 22"
declare -x SSH_CONNECTION="113.105.164.145 6668 113.105.164.151 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="root"
declare -x XDG_RUNTIME_DIR="/run/user/0"
declare -x XDG_SESSION_ID="2185"
留意一下輸出的這部分:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/abc/123/bin"
可以看到已經包括了剛剛設置的變數路徑。
變數路徑和環境Linux
3.2 修改profile文件,永久生效
把目錄/opt/abc/123/bin在裡面加入:
export PATH="
3.3 修改.bashrc文件,永久生效
在裡面加入:
export PATH="PATH:/opt/abc/123/bin"¨K14K¨G3G在裡面加入:exportPATH="PATH:/opt/abc/123/bin"
檢查結果:
3.4 修改/etc/re.local文件,永久生效
在裡面加入:
export PATH="
「/bin」、「/sbin」、「 /usr/bin」、「/usr/sbin」、「/usr/local/bin」等路徑已經在系統環境變數中了,如果可執行文件在這幾個標准位置,在終端命令行輸入該軟體可執行文件的文件名和參數(如果需要參數),回車即可。
如果不在標准位置,文件名前面需要加上完整的路徑。不過每次都這樣跑就太麻煩了,一個「一勞永逸」的辦法是把這個路徑加入環境變數。命令 export PATH:/opt/abc/123/bin"「/bin」、「/sbin」、「/usr/bin」、「/usr/sbin」、「/usr/local/bin」等路徑已經在系統環境變數中了,如果可執行文件在這幾個標准位置,在終端命令行輸入該軟體可執行文件的文件名和參數(如果需要參數),回車即可。如果不在標准位置,文件名前面需要加上完整的路徑。不過每次都這樣跑就太麻煩了,一個「一勞永逸」的辦法是把這個路徑加入環境變數。命令exportPATH="路徑」(或「PATH=
PATH為環境變數名,如DVSDK;調用時用
export DVSDK)可以把這個路徑加入環境變數,但是退出這個命令行就失效了。要想永久生效,需要把這行添加到環境變數文件里。有兩個文件可選:「/etc/profile」和用戶主目錄下的「.bashprofile」,「/etc/profile」對系統里所有用戶都有效,用戶主目錄下的「.bashprofile」只對這個用戶有效。exportPATH="
PATH:路徑1:路徑2:…:路徑n"),意思是可執行文件的路徑包括原先設定的路徑,也包括從「路徑1」到「路徑n」的所有路徑。當用戶輸入一個一串字元並按回車後,shell會依次在這些路徑里找對應的可執行文件並交給系統核心執行。那個「
」。
注意,與DOS/Window不同,UNIX類系統環境變數中路徑名用冒號分隔,不是分號。另外,軟體越裝越多,環境變數越添越多,為了避免造成混亂,建議所有語句都添加在文件結尾,按軟體的安裝順序添加。
本文已同步至博客站:
https://www.linuxrumen.com/cyml/859.html
Ⅳ linux文件壓縮
tar[-j|-z][cv][-f建立的檔案名]filename...《==打包與壓縮
tar[-j|-z][tv][-f建立的檔案名]《==查看檔案
tar[-j|-z][xv][-f建立的檔案名][-C目錄]《==解壓縮
選項與參數:
-c:建立打包檔案,可搭配-v來觀察過程中被打包的檔案名(filename)
-t:查看打包檔案的內容含有那些檔案
-x:解壓縮的功能,可以搭配-C在特定的目錄解開;-c、-t、-x不能同時出現在一串指令列中。
-j:透過bzip2的支持進行壓縮/解壓縮:此時檔案名最好為*.tar.bz2
-z:透過gzip的支持進行壓縮/解壓縮:此時檔案名最好為*.tar.gz
-v:在壓縮/解壓縮的過程中,將正在處理文件名顯示出來
-ffilename:-f後面要立刻接被處理的檔案名!建議-f單獨寫一個選項
-C目錄:這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項
tar命令是Unix/Linux系統中非常常用的備份文件方法,它的使用許可權是所有用戶。
tar命令語法:
tar[主選項+輔選項]文件名或目錄。使用該命令時,主選項是必須要有的,它告訴tar命令要做什麼,輔選項是輔助使用的,可以選用。
主選項:
-c創建新的檔案文件。如果用戶想備份一個目錄或是一些文件,就要選擇這個選項。相當於打包。
-x從檔案文件中釋放文件。相當於拆包。
-t列出檔案文件的內容,查看已經備份了哪些文件。
-r把要存檔的文件追加到檔案文件的末尾。例如用戶已經做好備份文件,又發現還有一個目錄或是一些文件忘記備份了,這時可以使用該選項,將忘記的目錄或文件追加到備份文件中
特別注意,主選項只能存在一個,c/x/t/r僅能存在一個!不可同時存在!因為不可能同時壓縮與解壓縮。
輔助選項:
-z:用gzip程序來壓縮或解壓縮文件,加上該選項後可以將檔案文件進行壓縮,但還原時也一定要使用該選項進行解壓縮。文件格式一般為xx.tar.gz或xx.tgz
-j:使用bzip2程序進行文件的壓縮或解壓,文件格式一般為xx.tar.bz2
-v:壓縮的過程中顯示文件!這個常用
-f:使用檔名,請留意,在f之後要立即接檔名!不要再加其他參數!
-p:使用原文件的原來屬性(屬性不會依據使用者而變)
-w每一步都要求確認。
--excludeFILE:在壓縮的過程中,不要將FILE打包!
範例:
範例一:將整個/etc目錄下的文件全部打包成/tmp/etc.tar
[root@ubuntu~]#tar-cvf/tmp/etc.tar/etc<==僅打包,不壓縮!
[root@ubuntu~]#tar-zcvf/tmp/etc.tar.gz/etc<==打包後,以gzip壓縮
[root@ubuntu~]#tar-jcvf/tmp/etc.tar.bz2/etc<==打包後,以bzip2壓縮
#特別注意,在參數f之後的文件檔名是自己取的,我們習慣上都用.tar來作為辨識。
#如果加z參數,則以.tar.gz或.tgz來代表gzip壓縮過的tarfile
#如果加j參數,則以.tar.bz2來代表bzip2壓縮過的tarfile
#上述指令在執行的時候,會顯示一個警告訊息:
#『tar:Removingleading`/"frommembernames』那是關於絕對路徑的特殊設定。
範例二:查看上述/tmp/etc.tar.gz文件內有那些被壓縮的文件
[root@ubuntu~]#tar-ztvf/tmp/etc.tar.gz
#由於我們使用gzip壓縮,所以要查閱該tarfile內的文件時,
#就得要加上z這個參數了!這很重要的!
範例三:將/tmp/etc.tar.gz文件解壓縮在/usr/local/src底下
[root@linux~]#cd/usr/local/src
[root@linuxsrc]#tar-zxvf/tmp/etc.tar.gz
#在預設的情況下,我們可以將壓縮檔在任何地方解開的!以這個範例來說
#我先將工作目錄變換到/usr/local/src底下,並且解開/tmp/etc.tar.gz
#則解開的目錄會在/usr/local/src/etc,另外,如果您進入/usr/local/src/etc
#則會發現,該目錄下的文件屬性與/etc/可能會有所不同喔!
範例四:在/tmp底下,我只想要將/tmp/etc.tar.gz內的etc/passwd解開而已
[root@linux~]#cd/tmp
[root@linuxtmp]#tar-zxvf/tmp/etc.tar.gzetc/passwd
#我可以透過tar-ztvf來查閱tarfile內的文件名稱,如果單只要一個文件,
#就可以透過這個方式來下達!注意到!etc.tar.gz內的根目錄/是被拿掉了!
範例五:我要備份/home,/etc,但不要/home/dmtsai
[root@linux~]#tar--exclude/home/dmtsai-zcvfmyfile.tar.gz/home/*/etc
另外:tar命令的C參數
$tar-cvffile2.tar/home/usr2/file2
tar:Removingleading'/'frommembersnames
home/usr2/file2
該命令可以將/home/usr2/file2文件打包到當前目錄下的file2.tar中,需要注意的是:使用絕對路徑標識的源文件,在用tar命令壓縮後,文件名連同絕對路徑(這里是home/usr2/,根目錄'/'被自動去掉了)一並被壓縮進來。使用tar命令解壓縮後會出現以下情況:
$tar-xvffile2.tar
$ls
………home…………
解壓縮後的文件名不是想像中的file2,而是home/usr2/file2。
$tar-cvffile2.tar-C/home/usr2file2
該命令中的-Cdir參數,將tar的工作目錄從當前目錄改為/home/usr2,將file2文件(不帶絕對路徑)壓縮到file2.tar中。注意:-Cdir參數的作用在於改變工作目錄,其有效期為該命令中下一次-Cdir參數之前。
使用tar的-Cdir參數,同樣可以做到在當前目錄/home/usr1下將文件解壓縮到其他目錄,例如:
$tar-xvffile2.tar-C/home/usr2
而tar不用-Cdir參數時是無法做到的:
$tar-xvffile2.tar/home/usr2
tar:/tmp/file:Notfoundinarchive
tar:
Ⅳ 如何備份linux系統
使用dd命令
找一個linux
live
cd的
u盤,然後U盤啟動,進入U盤上的Linux系統,打開命令行,執行:
sudo
fdisk
-u
-l
來查看硬體的分區情況。
然後執行dd
if=/dev/你的linux分區
of=你要保存的地址/img.iso
要想恢復只需要執行
dd
if=你保存的鏡像地址/img.iso
of=你要恢復的分區
同樣,此命令也適用於非linux的系統,你可以把你的windows分區備份下來
dd命令詳解:
dd命令是非常強大的命令,簡介如下:
dd
是
Linux/UNIX
下的一個非常有用的命令,作用是用指定大小的塊拷貝一個文件,並在拷貝的同時進行指定的轉換。
dd
的主要選項:
指定數字的地方若以下列字元結尾乘以相應的數字:
b=512,
c=1,
k=1024,
w=2,
xm=number
m
if=file
輸入文件名,預設為標准輸入。
of=file
輸出文件名,預設為標准輸出。
ibs=bytes
一次讀入
bytes
個位元組(即一個塊大小為
bytes
個位元組)。
obs=bytes
一次寫
bytes
個位元組(即一個塊大小為
bytes
個位元組)。
bs=bytes
同時設置讀寫塊的大小為
bytes
,可代替
ibs
和
obs
。
cbs=bytes
一次轉換
bytes
個位元組,即轉換緩沖區大小。
skip=blocks
從輸入文件開頭跳過
blocks
個塊後再開始復制。
seek=blocks
從輸出文件開頭跳過
blocks
個塊後再開始復制。(通常只有當輸出文件是磁碟或磁帶時才有效)
count=blocks
僅拷貝
blocks
個塊,塊大小等於
ibs
指定的位元組數。
conv=conversion[,conversion...]
用指定的參數轉換文件。
轉換參數:
ascii
轉換
EBCDIC
為
ASCII。
ebcdic
轉換
ASCII
為
EBCDIC。
ibm
轉換
ASCII
為
alternate
EBCDIC.
block
把每一行轉換為長度為
cbs
的記錄,不足部分用空格填充。
unblock
使每一行的長度都為
cbs
,不足部分用空格填充。
lcase
把大寫字元轉換為小寫字元。
ucase
把小寫字元轉換為大寫字元。
swab
交換輸入的每對位元組。
Unlike
the
Unix
dd,
this
works
when
an
odd
number
of
bytes
are
read.
If
the
input
file
contains
an
odd
number
of
bytes,
the
last
byte
is
simply
copied
(since
there
is
nothing
to
swap
it
with).
noerror
出錯時不停止。
notrunc
不截短輸出文件。
sync
把每個輸入塊填充到ibs個位元組,不足部分用空(NUL)字元補齊。
由於
dd
命令允許二進制方式讀寫,所以特別適合在原始物理設備上進行輸入/輸出。例如可以用下面的命令為軟盤建立鏡像文件:
dd
if=/dev/fd0
of=disk.img
bs=1440k
有趣的是,這個鏡像文件能被
HD-Copy
,Winimage
等工具軟體讀出。再如把第一個硬碟的前
512
個位元組存為一個文件:
dd
if=/dev/hda
of=disk.mbr
bs=512
count=1
來自http://www.cnblogs.com/redsty/p/4746091.html