Linux學習筆記

2021-08-02 04:48:22 字數 3818 閱讀 8554

*** 本文為學習筆記,文中內容均出自[鳥哥的私房菜](

假設我們想要打包 /etc/ /root 這幾個重要的目錄,但卻不想要打包 /root/etc* 開頭的檔案,因為該檔案都是剛剛我們才建立的備份檔嘛! 而且假設這個新的打包檔案要放置成為 /root/system.tar.bz2 ,當然這個檔案自己不要打包自己 (因為這個檔案放置在 /root 底下啊!),此時我們可以透過 –exclude 的幫忙! 那個 exclude 就是不包含的意思!所以你可以這樣做:

[root@study ~]# tar -jcv -f /root/system.tar.bz2 –exclude=/root/etc* \

>–exclude=/root/system.tar.bz2/etc /root

範例:找出 /boot 底下的所有檔案,然後將他備份到 /tmp/boot.cpio 去!

[root@study ~]#cd /

[root@study /]# find boot -print

boot

boot/grub

boot/grub/splash.xpm.gz

….(以下省略)….

# 透過 find 我們可以找到 boot 底下應該要存在的檔名!包括檔案與目錄!但請千萬不要是絕對路徑!

[root@study /]#find boot | cpio -ocvb > /tmp/boot.cpio

[root@study /]# ll -h /tmp/boot.cpio

-rw-r–r–. 1 root root 108m jul 3 00:05 /tmp/boot.cpio

[root@study ~]# file /tmp/boot.cpio

/tmp/boot.cpio: ascii cpio archive (svr4 with no crc)

我們使用 find boot 可以找出檔名,然後透過那條管線 (|, 亦即鍵盤上的 shift+\ 的組合), 就能將檔名傳給 cpio 來進行處理!最終會得到 /tmp/boot.cpio 那個檔案喔!你可能會覺得奇怪,為啥鳥哥要先轉換目錄到 / 再去找 boot 呢? 為何不能直接找 /boot 呢?這是因為 cpio 很笨!它不會理會你給的是絕對路徑還是相對路徑的檔名,所以如果你加上絕對路徑的 / 開頭, 那麼未來解開的時候,它就一定會覆蓋掉原本的 /boot 耶!那就太危險了!這個我們在 tar 也稍微講過那個 -p 的選項!!

這是個好問題:『我又幹嘛一定要學shell script ?我又不是資訊人,沒有寫程式的概念, 那我幹嘛還要學shell script 呢?不要學可不可以啊?』呵呵~如果linux 對你而言, 你只是想要『會用』而已,那麼,不需要學shell script 也還無所謂,這部分先給他跳過去, 等到有空的時候,再來好好的瞧一瞧。但是,如果你是真的想要玩清楚linux 的來龍去脈, 那麼shell script 就不可不知,為什麼呢?因為:

不用鳥哥說你也知道,管理一部主機真不是件簡單的事情,每天要進行的任務就有:查詢登入檔、追蹤流量、監控使用者使用主機狀態、主機各項硬體裝置狀態、 主機軟體更新查詢、更不要說得應付其他使用者的突然要求了。而這些工作的進行可以分為: (1)自行手動處理,或是(2)寫個簡單的程式來幫你每日『自動處理分析』這兩種方式,你覺得哪種方式比較好?當然是讓系統自動工作比較好,對吧!呵呵~這就得要良好的shell script 來幫忙的啦!

雖然我們還沒有提到服務啟動的方法,不過,這裡可以先提一下,我們centos 6.x 以前的版本中,系統的服務(services) 啟動的介面是在/etc/init.d/ 這個目錄下,目錄下的所有檔案都是scripts ; 另外,包括開機(booting) 過程也都是利用shell script 來幫忙搜尋系統的相關設定資料, 然後再代入各個服務的設定引數啊!舉例來說,如果我們想要重新啟動系統登入檔, 可以使用:『/etc/init.d/rsyslogd restart』,那個rsyslogd 檔案就是script 啦!

另外,鳥哥曾經在某一代的fedora 上面發現,啟動mysql 這個資料庫服務時,確實是可以啟動的, 但是螢幕上卻老是出現『failure』!後來才發現,原來是啟動mysql 那個script 會主動的以『空的密碼』去嘗試登入mysql ,但為了安全性鳥哥修改過mysql 的密碼囉~當然就登入失敗~ 後來改了改script ,就略去這個問題啦!如此說來, script 確實是需要學習的啊!

時至今日,雖然/etc/init.d/* 這個指令碼啟動的方式(systemv) 已經被新一代的systemd 所取代(從centos 7 開始), 但是很多的個別服務在管理他們的服務啟動方面,還是使用shell script 的機制喔!所以,最好還是能夠熟悉啦!

當我們的系統有異狀時,大多會將這些異狀記錄在系統記錄器,也就是我們常提到的『系統登入檔』,那麼我們可以在固定的幾分鐘內主動的去分析系統登入檔,若察覺有問題,就立刻通報管理員,或者是立刻加強防火牆的設定規則,如此一來,你的主機可就能夠達到『自我保護』的聰明學習功能啦~舉例來說,我們可以通過shell script去分析『當該封包嘗試幾次還是連線失敗之後,就予以抵擋住該ip』之類的舉動,例如鳥哥寫過乙個關於抵擋砍站軟體的shell script,就是用這個想法去達成的呢!

其實,對於新手而言, script最簡單的功能就是:『彙整一些在command line下達的連續指令,將他寫入scripts當中,而由直接執行scripts來啟動一連串的command line指令輸入!』例如:防火牆連續規則(iptables),開機引導程式的專案(就是在/etc/rc.d/rc.local裡頭的資料) ,等等都是相似的功能啦!其實,說穿了,如果不考慮program的部分,那麼scripts也可以想成『僅是幫我們把一大串的指令彙整在乙個檔案裡面,而直接執行該檔案就可以執行那一串又臭又長的指令段!』就是這麼簡單啦!

由前一章正規表示法的awk程式說明中,你可以發現, awk可以用來處理簡單的資料資料呢!例如薪資單的處理啊等等的。shell script的功能更強大,例如鳥哥曾經用shell script直接處理資料資料的比對啊,文字資料的處理啊等等的,撰寫方便,速度又快(因為在linux效能較佳),真的是很不錯用的啦!

舉例來說,鳥哥每學期都得要以學生的學號來建立他們能夠操作linux 的系統帳號,然後每個帳號還得要能夠有磁碟容量的限制(quota) 以及相關的設定等等, 那因為學校的校務系統提供的資料都是一整串學生資訊,並沒有單純的學號字段,所以鳥哥就得要透過前幾章的方法搭配shell script 來自動處理相關設定流程, 這樣才不會每學期都頭疼一次啊!

上面這些都是你考慮學習shell script 的特點~此外, shell script 還可以簡單的以vim 來直接編寫,實在是很方便的好東西!所以,還是建議你學習一下啦。

不過,雖然shell script號稱是程式(program) ,但實際上, shell script處理資料的速度上是不太夠的。因為shell script用的是外部的指令與bash shell的一些預設工具,所以,他常常會去呼叫外部的函式庫,因此,運算速度上面當然比不上傳統的程式語言。所以囉,shell script用在系統管理上面是很好的一項工具,但是用在處理大量數值運算上,就不夠好了,因為shell scripts的速度較慢,且使用的cpu資源較多,造成主機資源的分配不良。還好,我們通常利用shell script來處理伺服器的偵測,倒是沒有進行大量運算的需求啊!所以不必擔心的啦!

學習筆記 Linux學習

echo i am whoami 反引號裡的內容會被當做命令執行 echo the cpu in my pc has cat proc cpuinfo grep c processor cores 等價於反引號 a 10 定義乙個變數,等號兩邊不能有空格 echo a的值為 a a的值為10 ech...

linux學習筆記

開機流程簡介 1 載入 bios 的硬體資訊,並取得第乙個開機裝置的代號 2 讀取第乙個開機裝置的 mbr 的 boot loader 亦即是 lilo,grub,spfdisk 等等 的開機資訊 3 載入 kernel 作業系統核心資訊,kernel 開始解壓縮,並且嘗試驅動所有硬體裝置 4 ke...

Linux 學習筆記

配置 telnet 服務 vi etc hosts.deny 在all all 行前加 號注釋,登出該行。新增一行all all 用 登出disable yes,或者修改為 disble no vi etc pam.d login 在auth required lib security pam se...