【Linux主機+架站+維護教學+遠端協助】專案 網路開展事業或在網路賺錢第一步: 【架設24小時賺錢網站主機】比網頁設計更優先! 你還在租用虛擬主機嗎? (租用不如自有主機!自己當家作主才是:王道!) 因租用會:限制空間大小、流量、PHP.ini修改、特定語法使用... 綁手綁腳,你還能有多出眾的作為? 替你架設Linux主機伺服器+影片教你維護 (還有遠端技術協助)讓你自己當家作主! 為協助學員快速架站(隨心所欲展開網路事業)總教頭特別規劃: 替你架設Linux主機專案 並教如何成為網管高手! 聰明的網站經營者都選擇架設Linux主機伺服器做為網站運作平台,因功能完整又強大,免費架站程式超多! 參加了本專案,您無須再自我摸索曠日廢時→快速打通任都二脈 還有配套『加盟專案』,你可以現學現做,自然的實現:『事少、錢多、離家近!』的成功境界。

Linux主機指令大全

本節將介紹Linux下使用Shell處理文字時最常用的工具: find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk; 提供的例子和參數都是常用的。

我對shell腳本使用的原則是指令單行書寫,盡量不要超過2行; 如果有更為複雜的任務需求,還是考慮python吧。

1. find 檔案搜尋

搜尋txt和pdf檔案:

find . \( -name "*.txt" -o -name "*.pdf" \) -print

正則模式搜尋.txt和pdf:

find . -regex  ".*\(\.txt|\.pdf\)$"

-iregex: 忽略大小寫的正則

否定參數 ,搜尋所有非txt文字:

find . ! -name "*.txt" -print

指定搜尋深度,列印出現用的目錄的檔案(深度為1):

find . -maxdepth 1 -type f

定制搜尋

  • 按類型搜尋
find . -type d -print  //只列出所有目錄

-type f 檔案 / l 符號連結 / d 目錄

find支援的檔案檢索類型可以區分普通檔案和符號連結、目錄等,但是二進位檔案和文字檔案無法直接通過find的類型區分出來;

file指令可以檢查檔案具體類型(二進位或文字):

$file redis-cli  # 二進位檔案
redis-cli: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
$file redis.pid  # 文字檔案
redis.pid: ASCII text

所以,可以用以下指令組合來實現搜尋本地目錄下的所有二進位檔案:

ls -lrt | awk '{print $9}'|xargs file|grep  ELF| awk '{print $1}'|tr -d ':'
  • 按時間搜尋
    • -atime 訪問時間 (單位是天,分鐘單位則是-amin,以下類似)
    • -mtime 修改時間 (內容被修改)
    • -ctime 變化時間 (元資料或權限變化)

最近第7天被訪問過的所有檔案:

find . -atime 7 -type f -print

最近7天內被訪問過的所有檔案:

find . -atime -7 -type f -print

查詢7天前被訪問過的所有檔案:

find . -atime +7 type f -print
  • 按大小搜尋:

w字 k M G 尋找大於2k的檔案:

find . -type f -size +2k

按權限搜尋:

find . -type f -perm 644 -print //找具有可執行權限的所有檔案

按使用者搜尋:

find . -type f -user weber -print// 找使用者weber所擁有的檔案

找到後的後續動作

  • 刪除

刪除現用的目錄下所有的swp檔案:

find . -type f -name "*.swp" -delete

另一種語法:

find . type f -name "*.swp" | xargs rm
  • 執行動作(強大的exec)

將現用的目錄下的所有權變更為weber:

find . -type f -user root -exec chown weber {} \;

註:{}是一個特殊的字串,對於每一個符合的檔案,{}會被置換成相應的檔名;

將找到的檔案全都copy到另一個目錄:

find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;
  • 結合多個指令

如果需要後續執行多個指令,可以將多個指令寫成一個腳本。然後 -exec 呼叫時執行腳本即可:

-exec ./commands.sh {} \;

-print的定界符

預設使用’\n’作為檔案的定界符;

-print0 使用’\0’作為檔案的定界符,這樣就可以搜尋包括空格的檔案;

2. grep 文字搜尋

grep match_patten file // 預設訪問符合行

常用參數

  • -o 只輸出符合的文字行 VS -v 只輸出沒有符合的文字行
  • -c 統計檔案中包括文字的次數
    grep -c “text” filename
  • -n 列印符合的行號
  • -i 搜尋時忽略大小寫
  • -l 只列印檔名

在多級目錄中對文字遞歸搜尋(程式員搜代碼的最愛):

grep "class" . -R -n

符合多個模式:

grep -e "class" -e "vitural" file

grep輸出以0作為結尾符的檔名(-z):

grep "test" file* -lZ| xargs -0 rm

綜合應用:將日誌中的所有帶where條件的sql搜尋搜尋出來:

cat LOG.* | tr a-z A-Z | grep "FROM " | grep "WHERE" > b

搜尋中文示例:專案目錄中utf-8格式和gb2312格式兩種檔案,要搜尋字的是中文;

  1. 搜尋到它的utf-8編碼和gb2312編碼分別是E4B8ADE69687和D6D0CEC4

  2. 查詢:

    grep:grep -rnP "\xE4\xB8\xAD\xE6\x96\x87|\xD6\xD0\xCE\xC4" *即可
    

 

3. xargs 指令行參數轉換

xargs 能夠將輸入資料轉化為特定指令的指令行參數;這樣,可以配合很多指令來組合使用。比如grep,比如find; – 將多行輸出轉化為單行輸出

cat file.txt| xargs

n 是多行文字間的定界符

  • 將單行轉化為多行輸出
cat single.txt | xargs -n 3

-n:指定每行顯示的欄位數

xargs參數說明

  • -d 定義定界符 (預設為空格 多行的定界符為 n)
  • -n 指定輸出為多行
  • -I {} 指定置換字串,這個字串在xargs擴展時會被置換掉,用於待執行的指令需要多個參數時
  • -0:指定0為輸入定界符

示例:

cat file.txt | xargs -I {} ./command.sh -p {} -1

#統計程式行數
find source_dir/ -type f -name "*.cpp" -print0 |xargs -0 wc -l

#redis通過string存儲資料,通過set存儲索引,需要通過索引來查詢出所有的值:
./redis-cli smembers $1  | awk '{print $1}'|xargs -I {} ./redis-cli get {}

4. sort 排序

欄位說明

  • -n 按數字進行排序 VS -d 按字典序進行排序
  • -r 逆序排序
  • -k N 指定按第N列排序

示例:

sort -nrk 1 data.txt
sort -bd data // 忽略像空格之類的前導空白字元

5. uniq 消除重複行

  • 消除重複行
sort unsort.txt | uniq
  • 統計各行在檔案中出現的次數
sort unsort.txt | uniq -c
  • 找出重複行
sort unsort.txt | uniq -d

可指定每行中需要比較的重複內容:-s 開始位置 -w 比較字元數

6. 用tr進行轉換

  • 通用用法
echo 12345 | tr '0-9' '9876543210' //加解密轉換,置換對應字元
cat text| tr '\t' ' '  //製表符轉空格
  • tr刪除字元
cat file | tr -d '0-9' // 刪除所有數字

-c 求補集

cat file | tr -c '0-9' //取得檔案中所有數字
cat file | tr -d -c '0-9 \n'  //刪除非數字資料
  • tr壓縮字元

tr -s 壓縮文字中出現的重複字元;最常用於壓縮多餘的空格:

cat file | tr -s ' '
  • 字元類
tr中可用各種字元類:
  • alnum:字母和數字
  • alpha:字母
  • digit:數字
  • space:空白字元
  • lower:小寫
  • upper:大寫
  • cntrl:控制(非可列印)字元
  • print:可列印字元

使用方法:tr [:class:] [:class:]

tr '[:lower:]' '[:upper:]'

7. cut 按列切分文字

  • 截取檔案的第2列和第4列
cut -f2,4 filename
  • 去檔案除第3列的所有列
cut -f3 --complement filename
  • -d 指定定界符
cat -f2 -d";" filename
  • cut 取的範圍
    • N- 第N個欄位到結尾
    • -M 第1個欄位為M
    • N-M N到M個欄位
  • cut 取的單位
    • -b 以位元組為單位
    • -c 以字元為單位
    • -f 以欄位為單位(使用定界符)

示例:

cut -c1-5 file //列印第一到5個字元
cut -c-2 file  //列印前2個字元

截取文字的第5到第7列

$echo string | cut -c5-7

8. paste 按列拼接文字

將兩個文字按列拼接到一起;

cat file1
1
2

cat file2
colin
book

paste file1 file2
1 colin
2 book

預設的定界符是製表符,可以用-d指明定界符:

paste file1 file2 -d ","
1,colin
2,book

9. wc 統計行和字元的工具

$wc -l file // 統計行數

$wc -w file // 統計單詞數

$wc -c file // 統計字元數

10. sed 文字置換利器

  • 首處置換
sed 's/text/replace_text/' file   //置換每一行的第一處符合的text
  • 全局置換
sed 's/text/replace_text/g' file

預設置換後,輸出置換後的內容,如果需要直接置換原檔案,使用-i:

sed -i 's/text/repalce_text/g' file
  • 移除空白行
sed '/^$/d' file
  • 變量轉換

已符合的字串通過標示&來引用.

echo this is en example | sed 's/\w+/[&]/g'
$>[this]  [is] [en] [example]
  • 子串符合標示

第一個符合的括號內容使用標示 1 來引用

sed 's/hello\([0-9]\)/\1/'
  • 雙引號求值

sed通常用單引號來引用;也可使用雙引號,使用雙引號後,雙引號會對表達式求值:

sed 's/$var/HLLOE/'

當使用雙引號時,我們可以在sed樣式和置換字串中指定變量;

eg:
p=patten
r=replaced
echo "line con a patten" | sed "s/$p/$r/g"
$>line con a replaced
  • 其它示例

字串插入字元:將文字中每行內容(ABCDEF) 轉換為 ABC/DEF:

sed 's/^.\{3\}/&\//g' file

11. awk 資料流處理工具

  • awk腳本結構
awk ' BEGIN{ statements } statements2 END{ statements } '
  • 工作模式

1.執行begin中語句塊;

2.從檔案或stdin中讀入一行,然後執行statements2,重複這個過程,直到檔案全部被讀取完畢;

3.執行end語句塊;

print 列印現用的行

  • 使用不帶參數的print時,會列印現用的行
echo -e "line1\nline2" | awk 'BEGIN{print "start"} {print } END{ print "End" }'
  • print 以逗號分割時,參數以空格定界;
echo | awk ' {var1 = "v1" ; var2 = "V2"; var3="v3"; \
print var1, var2 , var3; }'
$>v1 V2 v3
  • 使用-拼接符的模式(”“作為拼接符);
echo | awk ' {var1 = "v1" ; var2 = "V2"; var3="v3"; \
print var1"-"var2"-"var3; }'
$>v1-V2-v3

特殊變量: NR NF $0 $1 $2

NR:表示記錄數量,在執行過程中對應現用的行號;

NF:表示欄位數量,在執行過程總對應現用的行的欄位數;

$0:這個變量包括執行過程中現用的行的文字內容;

$1:第一個欄位的文字內容;

$2:第二個欄位的文字內容;

echo -e "line1 f2 f3\n line2 \n line 3" | awk '{print NR":"$0"-"$1"-"$2}'
  • 列印每一行的第二和第三個欄位
awk '{print $2, $3}' file
  • 統計檔案的行數
awk ' END {print NR}' file
  • 累加每一行的第一個欄位
echo -e "1\n 2\n 3\n 4\n" | awk 'BEGIN{num = 0 ;
print "begin";} {sum += $1;} END {print "=="; print sum }'

傳遞外部變量

var=1000
echo | awk '{print vara}' vara=$var #  輸入來自stdin
awk '{print vara}' vara=$var file # 輸入來自檔案

用樣式對awk處理的行進行過濾

awk 'NR < 5' #行號小於5
awk 'NR==1,NR==4 {print}' file #行號等於1和4的列印出來
awk '/linux/' #包括linux文字的行(可以用正則表達式來指定,超級強大)
awk '!/linux/' #不包括linux文字的行

設定定界符

使用-F來設定定界符(預設為空格):

awk -F: '{print $NF}' /etc/passwd

讀取指令輸出

使用getline,將外部shell指令的輸出讀入到變量cmdout中:

echo | awk '{"grep root /etc/passwd" | getline cmdout; print cmdout }'

在awk中使用迴圈

for(i=0;i<10;i++){print $i;}
for(i in array){print array[i];}

eg:以下字串,列印出其中的時間串:

2015_04_02 20:20:08: mysqli connect failed, please check connect info
$echo '2015_04_02 20:20:08: mysqli connect failed, please check connect info'|awk -F ":" '{ for(i=1;i<=;i++) printf("%s:",$i)}'
>2015_04_02 20:20:08:  # 這種模式會將最後一個冒號列印出來
$echo '2015_04_02 20:20:08: mysqli connect failed, please check connect info'|awk -F':' '{print $1 ":" $2 ":" $3; }'
>2015_04_02 20:20:08   # 這種模式滿足需求

而如果需要將後面的部分也列印出來(時間部分和後文分開列印):

$echo '2015_04_02 20:20:08: mysqli connect failed, please check connect info'|awk -F':' '{print $1 ":" $2 ":" $3; print $4;}'
>2015_04_02 20:20:08
>mysqli connect failed, please check connect info

以逆序的形式列印行:(tac指令的實現):

seq 9| \
awk '{lifo[NR] = $0; lno=NR} \
END{ for(;lno>-1;lno--){print lifo[lno];}
} '

awk結合grep找到特殊的服務,然後將其kill掉

ps -fe| grep msv8 | grep -v MFORWARD | awk '{print $2}' | xargs kill -9;

awk實現head、tail指令

  • head
awk 'NR<=10{print}' filename
  • tail
awk '{buffer[NR%10] = $0;} END{for(i=0;i<11;i++){ \
print buffer[i %10]} } ' filename

列印指定列

  • awk模式實現
ls -lrt | awk '{print $6}'
  • cut模式實現
ls -lrt | cut -f6

列印指定文字區域

  • 確定行號
seq 100| awk 'NR==4,NR==6{print}'
  • 確定文字

列印處於start_pattern 和end_pattern之間的文字:

awk '/start_pattern/, /end_pattern/' filename

示例:

seq 100 | awk '/13/,/15/'
cat /etc/passwd| awk '/mai.*mail/,/news.*news/'

awk常用內建函數

index(string,search_string):返回search_string在string中出現的位置

sub(regex,replacement_str,string):將正則符合到的第一處內容置換為replacement_str;

match(regex,string):檢查正則表達式是否能夠符合字串;

length(string):返回字串長度

echo | awk '{"grep root /etc/passwd" | getline cmdout; print length(cmdout) }'

printf 類似c語系中的printf,對輸出進行格式化:

seq 10 | awk '{printf "->%4s\n", $1}'

12. 迭代檔案中的行、單詞和字元

1. 迭代檔案中的每一行

  • while 迴圈法
while read line;
do
echo $line;
done < file.txt

改成子shell:
cat file.txt | (while read line;do echo $line;done)
  • awk法
cat file.txt| awk '{print}'

2.迭代一行中的每一個單詞

for word in $line;
do
echo $word;
done

3. 迭代每一個字元

${string:start_pos:num_of_chars}:從字串中提取一個字元;(bash文字切片)

${#word}:返回變量word的長度

for((i=0;i<${#word};i++))
do
echo ${word:i:1);
done

以ASCII字元顯示檔案:

$od -c filename

vi 指令大全(Linux主機)

Vi指令大全
進入vi的指令
vi filename: 開啟或新增檔案,並將游標置於第一行首
vi +n filename: 開啟檔案,並將游標置於第n行首
vi + filename: 開啟檔案,並將游標置於最後一行首
vi +/pattern filename: 開啟檔案,並將游標置於第一個與pattern符合的串處
vi -r filename: 在上次正用vi編輯時發生系統崩潰,還原filename
vi filename….filename: 開啟多個檔案,依次進行編輯
搬移游標類指令
h: 游標左移一個字元
l: 游標右移一個字元
space: 游標右移一個字元
Backspace: 游標左移一個字元
k或Ctrl+p: 游標上移一行
j或Ctrl+n: 游標下移一行
Enter: 游標下移一行
w或W : 游標右移一個字至字首
b或B : 游標左移一個字至字首
e或E : 游標右移一個字至字尾
): 游標移至句尾
(: 游標移至句首
}: 游標移至段落開頭
{: 游標移至段落結尾
nG: 游標移至第n行首
n+: 游標下移n行
n-: 游標上移n行
n$: 游標移至第n行尾
H: 游標移至螢幕頂行
M: 游標移至螢幕中間行
L: 游標移至螢幕最後行
0: 游標移至現用的行首
$: 游標移至現用的行尾
螢幕翻滾類指令
Ctrl+u: 向檔案首翻半屏
Ctrl+d: 向檔案尾翻半屏
Ctrl+f: 向檔案尾翻一屏
Ctrl+b: 向檔案首翻一屏
nz: 將第n行滾至螢幕頂部,不指定n時將現用的行滾至螢幕頂部。
插入文字類指令
i: 在游標前
I: 在現用的行首
a: 游標後
A: 在現用的行尾
o: 在現用的行之下新開一行
O: 在現用的行之上新開一行
r: 取代現用的字元
R: 取代現用的字元及其後的字元,直至按ESC鍵
s: 從現用的游標位置處開始,以輸入的文字替代指定數目的字元
S: 刪除指定數目的行,並以所輸入文字代替之
ncw或nCW: 修改指定數目的字
nCC: 修改指定數目的行
[
編輯
]
刪除指令
ndw或ndW: 刪除游標處開始及其後的n-1個字
do: 刪至行首
d$: 刪至行尾
ndd: 刪除現用的行及其後n-1行
x或X: 刪除一個字元,x刪除游標後的,而X刪除游標前的
Ctrl+u: 刪除輸入模式下所輸入的文字
搜尋及取代指令/pattern: 從游標開始處向檔案尾搜尋pattern
?pattern: 從游標開始處向檔案首搜尋pattern
n: 在同一方向重複上一次搜尋指令
N: 在反方向上重複上一次搜尋指令
:s/p1/p2/g: 將現用的行中所有p1均用p2替代
:n1,n2s/p1/p2/g: 將第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g: 將檔案中所有p1均用p2取代
[
編輯
]
選項設定
all: 列出所有選項設定情況
term: 設定終端類型
ignorance: 在搜尋中忽略大小寫
list: 顯示定位點(Ctrl+I)和行尾標誌($)
number: 顯示行號
report: 顯示由面向行的指令修改過的數目
terse: 顯示簡短的警示訊息
warn: 在轉到別的檔案時若沒儲存現用的檔案則顯示NO write訊息
nomagic: 容許在搜尋模式中,使用前面不帶「」的特殊字元
nowrapscan: 禁止vi在搜尋到達檔案兩端時,又從另一端開始
mesg: 容許vi顯示其他使用者用write寫到自己終端上的訊息
最後行模式指令:n1,n2 co n3: 將n1行到n2行之間的內容複製到第n3行下
:n1,n2 m n3:將n1行到n2行之間的內容移至到第n3行下
:n1,n2 d: 將 n1行到n2行之間的內容刪除
:w: 儲存現用的檔案
:e filename: 開啟檔案filename進行編輯
:x: 儲存現用的檔案並離開
:q: 離開vi
:q!: 不儲存檔案並離開vi
:!command: 執行shell指令command
:n1,n2 w!command: 將檔案中n1行至n2行的內容作為command的輸入並執行之,
若不指定n1,n2,則表示將整個檔案內容作為command的輸入
:r!command: 將指令command的輸出結果放到現用的行
暫存器操作
"?nyy: 將現用的行及其下n行的內容儲存到暫存器?中,其中?為一個字母,n為一個數字
"?nyw: 將現用的行及其下n個字儲存到暫存器?中,其中?為一個字母,n為一個數字
"?nyl: 將現用的行及其下n個字元儲存到暫存器?中,其中?為一個字母,n為一個數字
"?p: 取出暫存器?中的內容並將其放到游標位置處。這裡?可以是一個字母,也可以是一個數字
ndd: 將現用的行及其下共n行文字刪除,並將所刪內容放到1號刪除暫存器中

解決安裝完 Linux 後修改各伺服器設定檔困擾的好工具:YHTools

YHTools工具集是為解決安裝完 Linux 之後,還要花長時間去修改各伺服器設定檔的困擾而出現。
所提供的功能,請見下方工具的簡介文。
工具的開發軟體有二,一是 python3.x 開發(副檔名為 pyw),需要圖形化介面暨 UTF-8 中文顯示的能力,因此請在具有 python3 環境下的 linux 套件執行。
另一種是 BASH ,副檔名為 .sh 可直接在終端機畫面執行。

版權暨免責聲明

* 本工具以 GPL v2 授權方式給大家使用
* 開發本工具的兩種程式皆是具純文字檔兼可執行的 SCRIPT ,因此下載後便可瀏覽/修改原始碼,您可自行修改成符合您自己需求的狀態再使用。
* 無論 BASH 或是 Python3 對筆者而言都是初學的程式語言,因此程式碼不儘完善,無法保證任何執行結果。

使用前注意

* 底下各工具使用說明均極簡化,請各位一定要配合本站各伺服套件相關文件說明來使用
* 基本上 YHTools 就只是把文件上要各位輸入的設定檔「快速製造」出來,以省去您打字的時間而已。

改版說明

* 2019-03-09 改版:fw4local.pyw 單機防火牆規則列勾選防禦 SSH Port 卻變成 FTP Port 之錯誤修定
* 2019-03-10 改版
o 新增 yhtools/chmodadv.sh 程式,使 chmod 777|755 時會自動判斷資料夾(777|755)或檔案(666|644)
o 修改 homechown.sh 為不必先複製到 /home 底下也可以執行
* 2019-03-11 小改 yhtools/chmodadv.sh 的提示字元
* 2019-03-12 修改
o yhtools/fw4nat.pyw 裡面有註解「#」符號之前誤 key 成全形字元
o yhtools/dhcpconf.pyw 修改成產生 dhcpd.conf 及 isc-dhcp-server 分別準備要放至 /etc/dhcp 及 /etc/default
這是 debian squeeze 及 ubuntu 11.04 版本,最新的做法,之前使用 ubuntu 10.10 沒注意到,現在修改。

工具使用系統要求

1. Debian Squeeze 或 Ubuntu 10.10 以上並必須安裝 X-Window 視窗
2. python3.1.x, python3-tk(8.5以上)
* apt-get update
* apt-get install python3 python3-tk

工具下載

* 下載
o root@dns:~# wget http://myip.tw/download/yhtools.tar.gz
* 解壓
o root@dns:~# tar xzvf yhtools.tar.gz
* 使用
執行每個工具前,在輸入程式名稱前一定要加「./」,例:
o root@dns:~# cd yhtools
o root@dns:~/yhtoosl# ./dnsconf.pyw

工具集程式列表

.
|– chmodadv.sh
|– dhcpconf
|   |– dhcp3-server
|   |– dhcpconf.pyw
|   `– dhcpd.conf
|– dnsconf
|– dnsconf.pyw
|– dnsconf.sample
|   |– db.0
|   |– db.127
|   |– db.255
|   |– db.local
|   |– db.root
|   |– named.conf
|   |– named.conf.default-zones
|   `– named.conf.options
|– firewall
|   |– fw4br.pyw
|   |– fw4local.pyw
|   |– fw4nat.pyw
|   |– fwtc4_l7filter.sh
|   `– fwtc.sh
|– homechown.sh
|– maccount
|   |– maccount.sh
|   |– passwd.txt
|   `– readme.txt
|– pubfolder.sh
|– README.TXT
|– rsync
|   |– rsync_c.pyw
|   `– rsync_s.pyw
`– test.py

各工具簡介
chmodadv.sh

* 使用時機:修改檔案權限
有時我們從網路下載,並用圖形化工具解壓縮出資料夾檔案權限為 700 ,但我們需要的卻是 777|755 (例:xoops 目錄要755才可被安裝)。可利用本工具把 700 的權限連同子目錄改成 777|755 ,而且它不限幾層子目錄,也具自動判斷功能,會把資料夾設為 777|755,檔案設為 666|644。
* 注意事項:若資料夾內含可執行權的檔案,也會一律被改成 644
* 使用方式:chmodadv.sh 777|755 資料夾名稱
o 可複製到 /usr/local/bin 以方便執行
root@dns:~# cp yhtools/chmodadv.sh /usr/local/bin
o 例一:root@dns:~/下載/xoops-2.5.0# chmodadv.sh 755 htdocs
o 例二:root@dns:~/下載/xoops-2.5.0/htdocs# chmodadv.sh 777 uploads

dhcpconf.pyw

* 使用時機:快速產生 DHCP3 Server 所需的設定檔,/etc/default/dhcp3-server 及 dhcpd.conf
* 注意事項:各版本的 dhcp3 主設定放置地點不一定一樣,可能在 /etc/dhcp3 ,也可能在 /etc/dhcp
* 使用方式:
o 執行本工具
root@dns:~/yhtools/dhcpconf# ./dhcpconf.pyw
o 把產出的 dhcp3-server 及 dhcpd.conf 複製到各自的位置

dnsconf.pyw

* 參考文件:http://myip.tw/itsmw/index.php/DNS
* dnsconf.pyw 為使用 python3 撰寫之圖形化 dns server 設定檔產生器
o 網域名稱與 IPv4 位址為必填項目
o 有 IPv6 者,請填 IPv6 網段及末碼 IP 值,例:2001:288:75a6 及 19 程式會自己組合成 2001:288:75a6::19 參數。

* OB2D sqz 使用者,一定要把視窗介面安裝起來
* 若已使用過 OB2D sqz 內建的 DNS 產生器(曾勾選這台要擔任DNS伺器),那麼:
1. 把 ./yhtools/dnsconf.sample/ 底下所有檔案先複製到 /etc/bind 底下
2. 執行 dnsconf.pyw後,再把產生在 ./yhtools/dnsconf 底下的另一批設定檔,也複製到 /etc/bind 去。
* 非 OB2D sqz 或新安裝 OB2D sqz 但未勾選過要「擔任DNS伺服器」時
o 只要把執行 ./yhtools/dnsconf.pyw 產生在 ./yhtools/dnsconf/ 底下的設定檔複製到 /etc/bind 底下即可。

fwtc.sh

* 參考文件: http://myip.tw/itsmw/index.php/Link_Control
* 程式 yhtools/firewall/fwtc.sh 為在 NAT 或 Bridge Route 防火牆下協助做流量管制的工具。
* 使用方式:請先直接編輯 fwtc.sh 內的設定值再啟用
o 啟動: ./firewall/fwtc.sh start
o 中止: ./firewall/fwtc.sh stop
o 顯示: ./firewall/fwtc.sh show

fw4local.pyw

* 參考文件: http://myip.tw/itsmw/index.php/OB2D_Iptables
* 程式: yhtools/firewall/fw4local.pyw 本機防火牆規則列設定
* 使用:
o cd firewall
o ./fw4local.pyw 填入各參數,點「確定」產生 ./rc.local
o 按「Escape」離開本工具
o 檢視內容若沒問題,覆蓋 /etc/rc.local 即可
o 套用新規則列: service rc.local start

fw4br.pyw

參考文件:http://myip.tw/itsmw/index.php/OB2D_Firewall

* 程式: yhtools/firewall/fw4br.pyw 透通式防火牆設定工具
* 說明:
o 請先確認 /etc/network/interfaces 內容只剩 lo 的設定,詳見 http://myip.tw/itsmw 文件
o cd ./yhtools/firewall
o ./fw4br.pyw
o 同前所述,依您需求填求,並點「確定」產生 rc.local
o 按「Escape」離開本工具
o 檢視內容若沒問題,覆蓋 /etc/rc.local 即可
o 套用新規則列: service rc.local start

fw4nat.pyw

* 參考文件: http://myip.tw/itsmw/index.php/OB2D_NAT
* 程式: yhtools/firewall/fw4nat.pyw 建立虛擬 IP 網段設定工具
* 說明:
o 請先確認已設妥 eth0 及 eh1 網卡一為公用 IP 一為私有 IP,詳見 http://myip.tw/itsmw 文件
o cd ./yhtools/firewall
o ./fw4nat.pyw
o 同前所述,依您需求填求,並點「確定」產生 rc.local
o 按「Escape」離開本工具
o 檢視內容若沒問題,覆蓋 /etc/rc.local 即可
o 套用新規則列: service rc.local start

homechown.sh

homechown.sh 快速恢復 /home 底下各家目錄為原使用者。

* 程式: yhtools/homechown.sh
* 參考文件:http://myip.tw/itsmw/index.php/LinuxDataTrans ,文件內第 4.3 節
* 要求:各家目錄的使用者必須先建立完畢
* 使用:直接執行 homechown.sh,若沒任何訊息,代表成功執行
o root@dns:~/yhtools# ./homechown.sh

maccount.sh

工具:maccount.sh 是以 BASH 寫成的大量建帳號工具,支援 samba 同步及 MySQL 同名資料庫建立。程式與使用方式,請切換至 yhtools/maccount 底下,詳讀 yhtools/maccount/readme.txt 裡面的說明。

* 程式: yhtools/maccount/maccount.sh
* 說明文件: yhtools/maccount/readme.txt ;請務必先讀本說明再使用

pubfolder.sh

pubfolder.sh 是 bash 寫成的共用資料夾設定工具,它為協助使用者建立 ftp 共用資料夾專用的小程式由於 vsftpd 基於安全性,會設定使用者登入後不得切換至其他資料夾(chroot_local_user=YES) ,因此,每個使用者都只能登入自己的資料夾,此時,若要建立起的一個共用資料夾供所有使用者皆可讀寫,那麼就可以採用本方案。
註:本方案,會把所輸入的「共用資料夾」建在 /home/ftp 底下

* 程式: yhtools/pubfolder.sh
* 參考文件:http://myip.tw/itsmw/index.php/Ob2d_Vsftp
* 使用方法:
o 共用時:pufolder.sh -m 共用資料夾名稱
o 解除共用: pubfolder.sh -u 共用資料夾名稱
o 下次開機也能自動掛載時,請在 rc.local 的底下, exit 0 之上,加上 「pubfolder.sh -m 共用資料夾名稱」

rsync_s.pyw

* 功能:建立 rsync server 快速產生器
* 參考文件: http://myip.tw/itsmw/index.php/RSync
* 程式: yhtools/rsync/rsync_s.pyw
* 說明:
o 請先手動修改 /etc/default/rsync 裡面的 ENABLE 為 true
o 再執行本工具
o 它將會產生 /etc/rsyncd.conf 及 /etc/rsyncd.secrets 設定檔
o 執行完本工具,仍得手動啟動 service rsync start

rsync_c.pyw

* 功能: 建立 rsync client 快速產生器
* 參考文件: http://myip.tw/itsmw/index.php/RSync
* 程式: yhtools/rsync/rysnc_c.pyw
* 說明:
o 它會產生 /root/rsncbk.sh 及 /root/rsyncd.secrets 設定檔
o 它會為 root 加定時排程,請以 root 身份 crontab -e 修改成自已偏好的備份時間

本文引用來至:http://myip.tw/itsmw/index.php/YHTools

Linux 系統管理篇(環境變量)

1. 顯示環境變量HOME
$ echo $HOME
/home/terry
2. 設定一個新的環境變量WELCOME
$ export WELCOME="Hello!"
$ echo $WELCOME
Hello!
3. 使用env指令顯示所有的環境變量
$ env
HOSTNAME=terry.mykms.org
PVM_RSH=/usr/bin/rsh
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
4. 使用set指令顯示所有本地定義的Shell變量
$ set
BASH=/bin/bash
BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=80
DIRSTACK=()
DISPLAY=:0.0
5. 使用unset指令來清除環境變量
set可以設定某個環境變量的值。清除環境變量的值用unset指令。如果未指定值,則該變量值將被設為NULL。示例如下:
$ export TEST="Test…" #增加一個環境變量TEST
$ env|grep TEST #此指令有輸入,證明環境變量TEST已經存在了
TEST=Test…
$ unset $TEST #刪除環境變量TEST
$ env|grep TEST #此指令沒有輸出,證明環境變量TEST已經存在了
6. 使用readonly指令設定唯讀變量
如果使用了readonly指令的話,變量就不可以被修改或清除了。示例如下:
$ export TEST="Test…" #增加一個環境變量TEST
$ readonly TEST #將環境變量TEST設為唯讀
$ unset TEST #會發現此變量不能被刪除
-bash: unset: TEST: cannot unset: readonly variable
$ TEST="New" #會發現此也變量不能被修改
-bash: TEST: readonly variable
7. 用C程式來訪問和設定環境變量
對於C程式的使用者來說,可以使用下列三個函數來設定或訪問一個環境變量。
◆ getenv()訪問一個環境變量。輸入參數是需要訪問的變量名字,返回值是一個字串。如果所訪問的環境變量不存在,則會返回NULL。
◆ setenv()在程式裡面設定某個環境變量的函數。
◆ unsetenv()清除某個特定的環境變量的函數。
另外,還有一個指標變量environ,它指向的是包括所有的環境變量的一個清單。下面的程式可以列印出現用的運行環境裡面的所有環境變量:
#i nclude
extern char**environ;
int main ()
{
char**var;
for (var =environ;*var !=NULL;++var)
printf ("%s ",*var);
return 0;
}

Linux下的環境變量設定
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
pathmunge () {
if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
fi
}
# Path manipulation
if [ `id -u` = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
pathmunge /usr/X11R6/bin after
unset pathmunge
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
HOSTNAME=`/bin/hostname`
HISTSIZE=1000
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
. $i
fi
done
unset i
JAVA_HOME="/opt/j2sdk1.4.2_01"
MYSQL_HOME="/var/mysql"
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$PATH:$JAVA_HOME/bin:$MYSQL_HOME/bin:/opt/apache-ant-1.5.4/bin
export JAVA_HOME CLASSPATH PATH
CVSROOT=/cvsroot;
export CVSROOT
LINUX系統環境變量
/etc/profile對整個系統有效.
確定你使用的是bash
修改~/.bash_profile
把你要設定的環境變量寫進去
例如
JAVA_HOME=/usr/local/jdk
export JAVA_HOME