linux bash shell 入門教程(轉載)__linux

來源:互聯網
上載者:User

Shell Script(bash)簡介

 

眾所皆知地,UNIX上以小工具著名,利用許多簡單的小工具,來完成原本需要大量軟體開發的工作,這一點特色,使得UNIX成為許多人心目中理想的系統平台。

在眾多的小工具中,Shell Script算得上是最基本、最強大、運用最廣泛的一個。它運用圍之廣,不但從系統啟動、程式編譯、定期作業、上網連線,甚至安裝整個Linux系統,都可以用它來完成。

 

因為Shell Script是利用您平日在使用的一些指令,將之組合起來,成為一個"程式"。如果您平日某些序列的指令下得特別頻繁,便可以將這些指令組合起來,成為另一個新的指令。這樣,不但可以簡化並加速操作速度,甚至還可以乾脆自動定期執行,大大簡化系統管理工作。

 

*************************

Bash(GNU Bourne-Again SHell)是許多Linux平台的內定Shell,事實上,還有許多傳統UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等,Shell Script大致都類同,當您學會一種Shell以後,其它的Shell會很快就上手,大多數的時候,一個Shell Script通常可以在很多種Shell上使用。

這裡我介紹您bash的使用方法。事實上,當您"man bash"時,就可以看到bash的說明書,不過對許多人來說,這份說明書猶如"無字天書"一樣難懂。這份檔案,主要資料來源為"man bash",我加上一些實際日常的應用例來說明。希望這樣能讓那些始終不得其門而入的人們,多多少少能有點概念。

 

 

教學例子

 

"Hello world" Shell Script

照傳統程式教學例,這一節介紹Shell Script的"Hello World"如何撰寫。

 

*************************

 

#!/bin/sh

# Filename : hello

echo "Hello world!"

 

 

*************************

 

大家應該會注意到第一行的"#!/bin/sh"。在UNIX下,所有的可執行Script,不管是那一種語言,其開頭都是"#!",例如Perl是"#!/usr/bin/perl",tcl/tk是"#!/usr/bin/wish",看您要執行的Script程式位置在那裡。您也可以用"#!/bin/bash"、"#!/bin/tcsh"等等,來指定使用特定的Shell。

echo是個bash的內建指令。

 

*************************

 

接下來,執行hello這個script:

要執行一個Script的方式有很多種。

 

*************************

 

第一種 : 將hello這個檔案的許可權設定為可執行。

[foxman@foxman bash]# chmod 755 hello

執行

[foxman@foxman bash]# ./hello

hello world

 

*************************

 

第二種 : 使用bash內建指令"source"或"."。

[foxman@foxman bash]# source hello

hello world

[foxman@foxman bash]# . hello

hello world

 

*************************

 

第三種 : 直接使用sh/bash/tcsh指令來執行。

[foxman@foxman bash]# sh hello

hello world

[foxman@foxman bash]# bash hello

hello world

 

*************************

 

Bash執行選項

 

*************************

 

-c string : 讀取string來當命令。

-i : 互動介面。

-s : 由stdin讀取命令。

- : 取消往後選項的讀取。

-norc : 不要讀~/.bashrc來執行。

-noprofile : 不要讀/etc/profile、~/.bash_profile、~/.bash_login、~/.profile等等來執行。

-rcfile filename : 執行filename,而非~/.bashrc

-version : 顯示版本。

-quiet : 啟動時不要哩唆。

-login : 確保bash是個login shell。

-nobraceexpansion : 不要用curly brace expansion({}符號展開)。

-nolineediting : 不用readline來讀取命令列。

-posix : 改采Posix 1003.2標準。

 

 

用於自動備份的Shell Script

 

 

一個用於自動備份的Shell Script

我們先前提到,可利用Shell Script搭配crond來作週期性工作。要作定期性的工作,在UNIX上,就是與crond的搭配運用。

 

*************************

 

首先我們先來研究如何對系統進行備份。

要對系統進行備份,不外乎便是利用一些壓縮公用程式。在許多UNIX系統上,tar及gzip是de facto的資料交換標準。我們經常可以看見一些tar.gz或tgz檔,這些檔案,被稱為tarball。當然了,您也可以用bzip2、zip等等壓縮公用程式來進行壓縮,不必限定於gzip。但tar配合gzip是最普遍的,也是最方便的方式。

 

要將我們想要的資料壓縮起來,進行備份,可以結合tar及gzip一起進行。方式有很多種,最常用的指令是以下這一種:

tar -c file/dir ... | gzip -9 > xxxx.tar.gz

 

您也可以分開來做:

 

tar -r file/dir ... -f xxxx.tar

gzip -9 xxxx.tar

 

 

tar -r file/dir ... -f xxxx.tar

gzip -9 xxxx.tar.gz

 

*************************

 

在解過Linux下檔案備份的基本知識後,我們來寫一個將檔案備份的Script。

#!/bin/sh

# Filename : backup

 

DIRS="/etc /var /your_directories_or_files"

BACKUP="/tmp/backup.tgz"

 

tar -c $DIRS | gzip -9 > $BACKUP

 

其中DIRS放的是您要備份的檔案及目錄,BACKUP是您的備份檔。可不要將/tmp放進DIRS中,那樣做,您是在做備份的備份,可能將您的硬碟塞爆。

 

 

*************************

 

接下來測試

[foxman@foxman bash]# chmod 755 backup

[foxman@foxman bash]# ./backup

 

執行完成後在/tmp就會有一個backup.tgz,裡面儲存了您重要的資料。您可用

 

gzip -dc /tmp/backup.tgz | tar -vt

tar vtfz /tmp/backup.tgz

來看看裡面的檔案列表。

 

要解開時,可用以下指令來完成複原:

 

gzip -dc /tmp/backup.tgz | tar -xv

tar xvfz /tmp/backup.tgz

 

備份通常是僅備份系統通常最重要的部份,/etc可說是不可缺少的一部份。另外,看您系統中有那些重要的資料需要備份。通常來說,您沒有必要備份/bin、/sbin、/usr/bin、/usr/sbin、/usr/X11R6/bin等等這些執行檔目錄。只要備份您重要的檔案即可,別把整個硬碟備份,那是蠻呆的動作。

 

*************************

 

如果您有許多台機器,可利用其中一台任務較輕的內部網路主機,做為主要備份主機。將所有機器都自動執行備份,然後利用NFS/Coda/Samba等網路檔案系統,將備份的資料放到該備份機器中,該機器則定時收取備份資料,然後您再由該機器中進行一次備份。

這裡是整個系統備份方案的圖示。

 

在您進行之前,先解一下,系統中那些是要備份的,那些是不需要的。

 

*************************

 

新的backup

#!/bin/sh

HOSTNAME=`hostname`

DIRS="/etc /var /your_important_directory"

BACKUP="/tmp/$HOSTNAME.tgz"

NFS="/mnt/nfs"

 

tar -c $DIRS | gzip -9 > $BACKUP

mv -f $BACKUP $NFS

 

 

*************************

 

備份主機內的Script : collect_backup

#!/bin/sh

NFS="/mnt/nfs"

BACKUP="/backup"

 

mv -f $NFS/*.tgz $BACKUP

 

 

在此,您不能夠將所有備份都直接放在/mnt/nfs,這是危險的。萬一任一台機器不小心將/mnt/nfs所有內容刪除,那麼備份就會消失。因此,您需要將/mnt/nfs移到一個只有該備份主機可存取的目錄中。

 

 

*************************

 

當這些個別的Script都測試好以後,接下來我們將他們放到crontab裡面。找到您的crontab,它的位置可能在/var/spool/cron/crontabs/root、/etc/crontab、/var/cron/tabs/root。

在crontab中選擇以下之一加入(看您週期性時間):

 

Slackware : /var/spool/cron/crontabs/root

01 * * * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每小時(太過火一點)

30 16 * * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每日16:30,下班前備份

30 16 * * 0 /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每周一16:30

0 5 1 * * /full_backup_script_path/backup 1> /dev/null 2> /dev/null # 每月一號5:0

RedHat/Debian : /etc/crontab

RedHat可直接將backup放入/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly。或採用如上加入/etc/crontab的方式:

有關crontab的用法,可查"man 5 crontab",在此不詳述。

 

備份主機的設定類同。

 

注意: 所有機器不要同時進行備份,否則網路會大塞車。備份主機收取備份的時間要設為最後,否則會收不到備份資料。您可以在實作後,將時間間隔調整一下。

 

 

*************************

 

看看,兩個小小不到三行的Shell Script,配合cron這個定時工具。可以讓原本需要耗時多個小時的人工備份工作,簡化到不到十分鐘。善用您的想像力,多加一點變化,可你讓您的生活變得輕鬆異常,快樂悠哉。

檔案系統檢查

 

系統安全一向是大多數電腦使用者關心的事,在UNIX系統中,最重視的事,即系統中有沒有"木馬"(Trojan horse)。不管Trojan horse如何放進來的,有一點始終會不變,即被放置木馬的檔案,其檔案日期一定會被改變,甚至會有其它的狀態改變。此外,許多狀況下,系統會多出一些不知名的檔案。因此,平日檢查整個檔案系統的狀態是否有被改變,將所有狀態有改變的檔案,以及目前有

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.