《鳥哥私房菜》基礎篇凌亂的筆記

一、man 和 infonode

二、關機:who查看誰在線上;nestat -a 查看網絡的聯機狀態;ps -aux查看背景執行的程序;sync 將數據同步寫入硬盤中;mysql

三、文檔linux

十元組,如drwxrwxr--ios

第一個爲文檔類型:正則表達式

- 正規文檔:純文字、二進制、數據文件。前面兩者能夠用cat讀取文件內容,後者只能使用last查看文件內容sql

d 目錄shell

l 相似window下的快捷方式數據庫

b 設備檔,即硬盤vim

c 串行設備,如鍵盤、鼠標等數組

s 資料接口文檔,一般被用在網絡上的數據承接。更多請查閱 man socket

p 數據傳輸文件,目的在於解決多個程序同時存取一個檔案所形成的錯誤問題。更多請查閱man fifo

後面九個分別爲擁有者、所屬羣組、其餘人的權限

權限分爲r(讀取)w(寫入,對於目錄來講爲可控制)x(可執行,對於目錄來講爲可進入)

四、檔案和目錄

搜尋:

which 查找執行檔案,且參數爲完整檔名

whereis 搜索數據庫 可能找到已經被殺掉的檔案,找不到剛剛新建的檔案

locate 搜索數據庫 參數爲檔案的部分名稱。可能找到已經被殺掉的檔案,找不到剛剛新建的檔案

find 搜索硬盤

五、檔案的壓縮與打包

壓縮

compress -d uncompress

gzip -d 

bzip2 -z -d  bunzip2

打包

tar

tar -cvf 打包,不壓縮

tar -zcvf 打包後,以gzip壓縮

tar -jcvf 打包後,以bzip2壓縮

tar -ztvf 查看tar file內的檔案

tar -zxvf 解壓縮

備份

dd

dd if="input_file" of="output_file" bs="block_size" count="number"

if:就是input_file,能夠是裝置

of:就是output_file,能夠是裝置

bs:規劃的一個block大小,默認爲512bytes

count:多少個bs的意思

cpio

六、文字處理器vi

七、shell,bash

一、type 查看命令是否爲bash內建的命令

二、環境變量

三、查看環境變量 echo $PATH 、echo ${PATH}

四、設定變量 name="$PATH"111

五、變量在其子程序中仍然有效 export name

六、引用其餘命令行結果`command`,eg:myname="$MAIL"`ll /tmp`asjdljsk  echo $myname

七、取消變量內容 unset name

八、特殊字符須要用雙引號或者單引號,雙引號中可使用已經存在的變量,單引號中變量爲通常字符,eg:"$PATH" 和 '$PATH'

九、特殊字符也能夠用轉義字符\進行轉義

十、環境變量 env 或者 export

十一、shell變量,即和當前的PID相關聯 set

PS1,後面是數字1,提示字符的設定

\d 日期

\H 主機全稱

\h 主機名稱的第一個名字

\t 時間,24小時制,HH.MM.SS

\T 時間,12小時制

\A 時間,24小時制,HH:MM

\u 當前用戶

\v BASH版本

\w 完整的工做目錄

\W basename,最後一個目錄名

\# 下達的第幾個命令

\$ 提示字符,root爲#,其餘$

$ 本shell的PID

? 上個指令的回傳碼,上個指令執行成功,則回傳碼爲0

OSTYPE,HOSTTYPE,MACHTYPE 主機硬件與核心的等級

自定變量轉爲環境變量 export

語系命令 locale

修訂編碼 LANG 或者 LC_ALL

十二、read 讀取來自鍵盤的輸入,一般放在shell scripts中,以跟使用者進行交談

declare/typeset 他們是同樣的功能,聲明變量的屬性。

declare -a 數組

-i 整數

-x 將後面的變量變成環境變量

-r 將變量設定爲readonly,不能被更改內容,也不能夠unset

1三、與檔案系統及程序的限制關係:ulimit

若是linux主機同時登陸10我的,同時開啓100個文檔,每一個檔案100MBytes,那麼內容得10*100*100MBytes,爲了預防這種狀況

能夠限制使用者的某些資源,包括能夠開啓的檔案數、可使用的CPU時間,可使用的內存等。

ulimit

-H hard limit,嚴格的設定,一定不能夠超過的設定值

-S soft limit,警告的設定,能夠超過,可是會有警告,並且一定不能夠超過hard limit

-a 列出全部的額度

-c 能夠創建的最大核心檔案容量

-d 程序數據可使用的最大容量

-f 此shell能夠創建的最大檔案容量(通常爲2GB),單位爲Kb

-l 可用於鎖定(lock)的內容存量

-p 可用於管線(pipe)處理的數量

-t 可使用的最大CPU時間,單位爲秒

-u 單一使用者可使用的最大程序(process)數量

1四、額外的變量設定功能

取變量的用法,echo $HOME 和 echo ${HOME}

${變量}的方法,咱們能夠對變量進行一些修訂,eg:name="/home/vbird/testing/testing.x.sh"

echo ${name}

echo ${name##/*/}

echo ${name#/*/}

echo ${name%%/*}

echo ${name%/*}

echo ${name/testing/TEST}

echo ${name//testing/TEST}

##後面/*/表示從前面開始匹配的字符串中,取最長的那段,#爲取最短的那段

%%後面/*表示從後面開始匹配的字符串中,區最長的那段,#爲取最短的那段

//後面testing從前開始被替換爲TEST,替換全部,/替換第一個

1五、變量內容能夠進行判斷,var和str,要針對str是否被設置爲一個字符串,即"expr",來決定var的內容

var=${str-expr}

var=${str:-expr}

var=${str+expr}

var=${str:+expr}

var=${str=expr}

var=${str:=expr}

var=${str?expr}

var=${str:?expr}

1六、變量別名和歷史

alias ls='ls -al | more'

unalias ls

history 

-n 列出最近n個命令列表

-c 將目前shell中的全部history內容所有清除

-a histfiles 將目前新增的history指令新增入histfiles中,若沒有加histfiles,則預設寫入~/.bash_history

-r histfiles 將histfiles的內容讀到當前shell的history中

-r histfiles 將目前的history記憶內容寫入到histfiles中

!n 執行第幾筆命令

!command 由最近的指令向前搜尋指令串開頭爲command的那個指令,並執行

!!執行上一個命令

1七、登陸提示信息,設置在/etc/issue, /etc/motd爲想要讓你們都知道的信息 /etc/issue.net爲talnet遠程登陸用的

1八、環境設定檔: bashrc, ~/.bashrc, ~/.profile, profile...,/etc/inputrc, source

系統設定值

/etc/sysconfig/i18n

/etc/profile 檔案設定了幾個重要的變量,例如:『PATH、USER、MAIL、 HOSTNAME、HISTSIZE、umask』等等

全部的使用者皆會使用到這個檔案的信息

/etc/bashrc 規劃 umask 的功能,也同時規劃出提示字符的內容 (就是裏頭那個 PS1 啦!)

/etc/profile.d/*.sh 顏色、語系、vim 及 which 等指令進行一些額外的設定

/etc/man.config  規範了使用 man 的時候, man page 的路徑到哪裏去尋找! MANPATH 這個變量設定

設定完了這幾個檔案以後,都須要先 logout 在 login 以後纔會將設定整個啓動起來!

我的設定值

~/.bash_profile, ~/.bash_login, ~/.profile 這三個檔案一般只要一個就夠了,通常預設是以 ~/.bash_profile

的檔名存在。bash 啓動時,會先去讀取 ~/.bash_profile,找不到時,就去讀取 ~/.bash_login ,而後纔是 ~/.profile

~/.bashrc  檔案在您每次執行 shell script 的時候都會被從新使用一遍

~/.bash_history 

~/.bash_logout 當我註銷 bash 後,系統再幫我作完什麼動做後才離開

讀取前後  

1.  先讀取 /etc/profile ,再根據 /etc/profile 的內容去讀取其它額外的設定檔, 例如 

/etc/profile.d 與 /etc/inputrc 等等設定檔;  

2.  根據不一樣的使用者,到使用者家目錄去讀取 ~/.bash_profile 或 ~/.bash_login 或 ~/.profile 

等設定檔;  

3.  根據不一樣使用者,到他家目錄去讀取 ~/.bashrc 

source 或小數點 (.) 均可以將設定檔的內容讀進來目前的 shell 環境中!eg: source ~/.bashrc or . ~/.bashrc

login 與 non-login shell

當登入Linux ,亦便是取得 login shell 時,會讀取 ~/.bash_profile, ~/.bash_login, ~/.profile

non-login shell ,讀取的就是僅有 ~/.bashrc 

終端機的環境設定: stty, set

stty -a

^ 表明Ctrl

stty erase ^h 設定[ctrl+h]刪除字符

set 也能夠進行環境的設定

其它的按鍵設定功能就在 /etc/inputrc 

1九、數據流重導向

將某個指令執行後應該要出如今屏幕上的數據, 給他傳輸到其它的地方

> >> 1> 2>

>和1>一個意思

1> 正確信息的流向

2> 錯誤信息的流向

>>寫在文檔的後面

find /home -name testing > list_right 1> list_error

find /home -name testing > list 2>&1 正確消息和錯誤消息寫在同一個檔案中

dev/null 垃圾桶

< 將本來須要由鍵盤輸入的數據,經由檔案來讀入

cat > catfile 經過鍵盤輸入數據到 catfile中 (Ctrl + d)結束

使用其它檔案來取代鍵盤輸入,cat > catfile < somefile

<<結束的輸入字符

eg:cat > catfile <<eof

行首輸入eof則表明結束,和(Ctrl + d) 效果同樣

20、管線命令 (pipe)

數據必須要通過幾道手續以後才能獲得咱們所想要的格式,管線命令『 | 』僅能處理經由前面一個指令傳來的正確信息

擷取命令: cut, grep 

將一段數據通過分析後,取出咱們所想要的,擷取訊息一般是針對『一行一行』來分析的

echo $PATH | cut -d ':' -f 5 

export | cut -c 12- 將 export 輸出的訊息,取得第 12 字符之後的全部字符串

grep

參數: 

-a :將 binary 檔案以 text 檔案的方式搜尋數據 

-c :計算找到 '搜尋字符串' 的次數 

-i :忽略大小寫的不一樣,因此大小寫視爲相同 

-n :順便輸出行號 

-v :反向選擇,亦即顯示出沒有 '搜尋字符串' 內容的那一行!

排序命令: sort, wc, uniq

[root@linux ~]# sort [-fbMnrtuk] [file or stdin] 

參數: 

-f  :忽略大小寫的差別,例如 A 與 a 視爲編碼相同; 

-b  :忽略最前面的空格符部分; 

-M  :以月份的名字來排序,例如 JAN, DEC 等等的排序方法; 

-n  :使用『純數字』進行排序(預設是以文字型態來排序的); 

-r  :反向排序; 

-u  :就是 uniq ,相同的數據中,僅出現一行表明; 

-t  :分隔符,預設是 tab 鍵; 

-k  :以那個區間 (field) 來進行排序的意思, 

eg:cat /etc/passwd | sort -t ':' -k 3 /etc/passwd 內容是以 : 來分隔的,我想以第三欄來排序

排序完成了,想要將重複的資料僅列出一個顯示

[root@linux ~]# uniq [-ic] 相似數據庫的group by

參數: 

-i  :忽略大小寫字符的不一樣; 

-c  :進行計數 

[root@linux ~]# wc [-lwm] 

參數: 

-l  :僅列出行; 

-w  :僅列出多少字(英文單字); 

-m  :多少字符; 

tee

同時將數據流分送到檔案去與屏幕 (screen);而輸出到屏幕的,其實就是 stdout ,可讓下個指令繼續處理

[root@linux ~]# tee [-a] file 

參數: 

-a  :以累加 (append) 的方式,將數據加入 file 當中! 

eg:last | tee last.list | cut -d " " -f1 

字符轉換命令: tr, col, join, paste, expand

tr 能夠用來刪除一段訊息當中的文字,或者是進行文字訊息的替換

[root@linux ~]# tr [-ds] SET1 ... 

參數: 

-d  :刪除訊息當中的 SET1 這個字符串; 

-s  :取代掉重複的字符! 

範例一:將 last 輸出的訊息中,全部的小寫變成大寫字符: 

[root@linux ~]# last | tr '[a-z]' '[A-Z]' 

col  

[root@linux ~]# col [-x] 

參數: 

-x  :將 tab 鍵轉換成對等的空格鍵 

join:兩個檔案當中,有 "相同數據" 的那一行,將他加在一塊兒

[root@linux ~]# join [-ti12] file1 file2 

參數: 

-t  :join 預設以空格符分隔數據,而且比對『第一個字段』的數據, 

 若是兩個檔案相同,則將兩筆數據聯成一行,且第一個字段放在第一個!

-i  :忽略大小寫的差別; 

-1  :這個是數字的 1 ,表明『第一個檔案要用那個字段來分析』的意思; 

-2  :表明『第二個檔案要用那個字段來分析』的意思。 

paste 將兩行貼在一塊兒,且中間以 [tab] 鍵隔開

[root@linux ~]# paste [-d] file1 file2 

參數: 

-d  :後面能夠接分隔字符。預設是以 [tab] 來分隔的! 

-   :若是 file 部分寫成 - ,表示來自 standard input 的資料的意思。 

expand

[root@linux ~]# expand [-t] file 

參數: 

-t  :後面能夠接數字。通常來講,一個 tab 按鍵能夠用 8 個空格鍵取代。 

 咱們也能夠自行定義一個 [tab] 按鍵表明多少個字符呢! 

分割命令: split

[root@linux ~]# split [-bl] file PREFIX 

參數: 

-b  :後面可接欲分割成的檔案大小,可加單位,例如 b, k, m 等; 

-l  :以行數來進行分割。 

參數代換: xargs

[root@linux ~]# xargs [-0epn] command 

參數: 

-0  :若是輸入的 stdin 含有特殊字符,例如 `, \, 空格鍵等等字符時,這個 -0 參數 

 能夠將他還原成通常字符。這個參數能夠用於特殊狀態喔! 

-e  :這個是 EOF (end of file) 的意思。後面能夠接一個字符串,當 xargs 分析到這個字符串時,

就會中止繼續工做! 

-p  :在執行每一個指令的 argument 時,都會詢問使用者的意思; 

-n  :後面接次數,每次 command 指令執行時,要使用幾個參數的意思。看範例三。 

當 xargs 後面沒有接任何的指令時,預設是以 echo 來進行輸出喔! 

減號 - 的用途 

管線命令當中,經常會使用到前一個指令的 stdout 做爲此次的 stdin 

某些指令須要用到文件名稱 (例如 tar) 來進行處理時,該 stdin 與 stdout 能夠利用減號 "-" 來替代

eg:tar -cvf - /home | tar -xvf -

2一、正則表達式

2二、擴展的正則表達式

2三、格式化打印: printf

[root@linux ~]# printf '打印格式' 實際內容

參數: 

關於格式方面的幾個特殊樣式: 

  \a    警告聲音輸出 

  \b    退格鍵(backspace) 

  \f    清除屏幕 (form feed) 

  \n    輸出新的一行 

  \r    亦即 Enter 按鍵 

  \t    水平的 [tab] 按鍵 

  \v    垂直的 [tabl] 按鍵 

  \xNN  NN 爲兩位數的數字,能夠轉換數字成爲字符。 

關於 C 程序語言內,常見的變數格式 

  %ns   那個 n 是數字, s 表明 string ,亦即多少個字符; 

  %ni   那個 n 是數字, i 表明 integer ,亦即多少整數字數; 

  %N.nf 那個 n 與 N 都是數字, f 表明 floating (浮點),若是有小數字數, 

假設我共要十個位數,但小數點有兩位,即爲 %10.2f 囉! 

2四、sed

能夠分析  Standard Input (STDIN)  的數據,  而後將數據通過處理後,再將他輸出到  standrad out (STDOUT)  的一個工具

[root@linux ~]# sed [-nefr] [動做]

參數: 

-n  :使用安靜(silent)模式。在通常 sed 的用法中,全部來自 STDIN  

 的數據通常都會被列出到屏幕上。但若是加上 -n 參數後,則只有通過 

 sed 特殊處理的那一行(或者動做)纔會被列出來。 

-e  :直接在指令列模式上進行 sed 的動做編輯; 

-f  :直接將 sed 的動做寫在一個檔案內, -f filename 則能夠執行 filename 內的  

 sed 動做; 

-r  :sed 的動做支持的是延伸型正規表示法的語法。(預設是基礎正規表示法語法) 

 

動做說明:  [n1[,n2]]function 

n1, n2 :不見得會存在,通常表明『選擇進行動做的行數』,舉例來講,若是個人動做 

是須要在 10 到 20 行之間進行的,則『 10,20[動做行爲] 』 

 

function 有底下這些咚咚: 

a   :新增, a 的後面能夠接字符串,而這些字符串會在新的一行出現(目前的下一行)~ 

c   :取代, c 的後面能夠接字符串,這些字符串能夠取代 n1,n2 之間的行! 

d   :刪除,由於是刪除啊,因此 d 後面一般不接任何咚咚; 

i   :插入, i 的後面能夠接字符串,而這些字符串會在新的一行出現(目前的上一行); 

p   :打印,亦即將某個選擇的數據印出。一般 p 會與參數 sed -n 一塊兒運做~ 

s   :取代,能夠直接進行取代的工做哩!一般這個 s 的動做能夠搭配 

 正規表示法!例如 1,20s/old/new/g 就是啦!  

 

範例一:將 /etc/passwd 的內容列出,而且我須要打印行號,同時,請將第 2~5 行刪除!

[root@linux ~]# nl /etc/passwd | sed '2,5d'

2五、awk :傾向於一行當中分紅數個『字段』來處理

[root@linux ~]# awk '條件類型 1{動做 1} 條件類型 2{動做 2} ...' filename

[root@linux ~]# last | awk '{print $1 "\t" $3}'

dmtsai  192.168.1.12 

root    Mon 

reboot  boot 

dmtsai  192.168.1.12 

整個 awk  的處理流程是

1.   讀入第一行,並將第一行的資料填入  $0, $1, $2....  等變數當中;  

2.   依據 " 條件類型"  的限制,判斷是否須要進行後面的 " 動做";  

3.   作完全部的動做與條件類型;  

4.   若還有後續的『行』的數據,則重複上面 1~3  的步驟,直到全部的數據都讀完爲止。 

awk 內建變量

變量名稱   表明意義 

NF   每一行 ($0)  擁有的字段總數 

NR   目前 awk  所處理的是『第幾行』數據 

FS   目前的分隔字符,預設是空格鍵 

2六、檔案比對 diff cmp patch

diff:iff 主要是以『行』爲單位比對

[root@linux ~]# diff [-bBi] from-file to-file

參數: 

from-file :一個檔名,做爲原始比對檔案的檔名; 

to-file   :一個檔名,做爲目的比對檔案的檔名; 

注意,from-file 或 to-file 能夠 - 取代,那個 - 表明『Standard input』之意。 

 

-b  :忽略一行當中,僅有多個空白的差別(例如 "about me" 與 "about     me" 視爲相同 

-B  :忽略空白行的差別。 

-i  :忽略大小寫的不一樣。 

範例:

 

範例一:比對 /tmp/test/passwd 與 /etc/passwd 的差別:

[root@linux ~]# diff /etc/passwd /tmp/test/passwd

4d3    <==這裏是說,左邊檔案(/etc/passwd)第四行被刪除 (d)

cmp :以『位』爲單位去比對

[root@linux ~]# cmp [-s] file1 file2

參數: 

-s  :將全部的不一樣點的位處都列出來。由於 cmp 預設僅會輸出第一個發現的不一樣點。 

範例:

 

範例一:用 cmp 比較一下 /etc/passwd 與 /tmp/test/passwd 

[root@linux ~]# cmp /etc/passwd /tmp/test/passwd

patch:將舊的檔案升級成爲新的檔案

[root@linux ~]# patch -pN < patch_file

參數: 

-p  :後面能夠接『取消幾層目錄』的意思。 

2七、檔案打印準備: pr

八、學習 Shell Scripts

利用 shell 的功能所寫的一個『程序 (program)』,這個程序是使用純文字文件,將一些 shell 的語法與指令寫在裏面,

搭配正規表示法、管線命令與數據流重導向等功能,以達到咱們所想要的處理目的

第一行 #!/bin/bash 在宣告這個 script 使用的 shell 名稱:

在每一個 script 的文件頭處記錄好

•   script 的功能;  

•   script 的版本信息;  

•   script 的做者與聯絡方式;  

•   script 的版權宣告方式;  

•   script 的 History (歷史紀錄);  

•   script 內較特殊的指令,使用絕對路徑的方式來下達;  

•   script 運做時須要的環境變量預先宣告與設定。 

read - p "sdkjajfs" var

var=$((運算內容)) 數值運算

test 參數 filename 判斷filename類型、權限、比較、整數的判斷、字符串、多重條件判斷等

[] 判斷符號 eg [ -z "$HOME" ]  $HOME 是否爲空

•   在中括號 [] 內的每一個組件都須要有空格鍵來分隔;  

•   在中括號內的變量,最好都以雙引號來設定;  

•   在中括號內的常數,最好都以單或雙引號來設定。 

shell script 幫咱們設定好一些指定的變量了

/path/to/scriptname  opt1  opt2  opt3  opt4  ... 

  $0             $1    $2    $3    $4   ... 

條件判斷

if [ 條件判斷式一 ]; then 

 當條件判斷式一成立時,能夠進行的指令工做內容; 

elif [ 條件判斷式二 ]; then 

 當條件判斷式二成立時,能夠進行的指令工做內容; 

else 

 當條件判斷式一與二均不成立時,能夠進行的指令工做內容; 

fi 

case $變量名稱 in 

 "第一個變量內容") 

 程序段 

 ;; 

 "第二個變量內容") 

 程序段 

 ;; 

 *) 

 不包含第一個變量內容與第二個變量內容的其它程序執行段 

 exit 1 

 ;; 

esac 

函數

function fname() { 

 程序段 

function 也是擁有內建變量的~他的內建變量與 shell script 很相似, 函數名稱表明示 $0 ,

然後續接的變量也是以 $1, $2... 來取代的

循環

while [ condition ] 

do 

 程序段落 

done 

until [ condition ] 

do 

 程序段落 

done 

for (( 初始值; 限制值; 執行步階 )) 

do 

 程序段 

done 

debug

[root@linux ~]# sh [-nvx] scripts.sh 

參數: 

-n  :不要執行 script,僅查詢語法的問題; 

-v  :再執行 sccript 前,先將 scripts 的內容輸出到屏幕上; 

-x  :將使用到的 script 內容顯示到屏幕上,這是頗有用的參數! 

九、Linux 帳號與身份管理

/etc/passwd

帳號名稱:密碼:UID::GID:使用者信息說明欄:家目錄:Shell

/etc/shadow

帳號名稱:密碼(纔是真正的密碼,並且是 通過編碼過的密碼啦):最近更動密碼的日期:

密碼不可被更動的天數:密碼須要從新變動的天數:密碼須要變動期限前的警告期限:

密碼過時的恕限時間:帳號失效日期:保留字段

UID 與 GID 

使用者ID User ID 

羣組ID Group ID

羣組

/etc/group

羣組名稱:羣組密碼:GID:支持的帳號名稱

GID 就是所謂的『初始羣組

/etc/gshadow

羣組名稱:密碼欄:羣組管理員的帳號:該羣組的所屬帳號

groups 支持羣組,第一個就是有效羣組

newgrp 羣組 更改有效羣組

十、Linux 磁盤配額 (Quota)

quota 實際在運做的時候,是針對『整個 partition』進行限制的

核心必須支持 quota 

只對通常身份使用者有效

•   soft: 

這是最低限制容量的意思,使用者在寬限期間以內,他的容量能夠超過 soft ,但必須要寬限時

間以內將磁盤容量下降到 soft 的容量限制之下! 

•   hard: 

這是『絕對不能超過』的容量!跟 soft 相比的意思爲什麼呢?一般 hard limit 會比 soft limit爲高,例如網絡磁盤空間爲 30 MB ,

那麼 hard limit 就設定爲 30MB ,可是爲了讓使用者有必定的警惕心,因此當使用空間超過 25 MB 時,例如使用者使用了 27 MB 的空間時,那麼系統就

會警告使用者, 讓使用者能夠在『寬限時間內』將他的檔案量下降至 25 MB ( 亦便是 soft limit )以內!也就是說, soft 到 hard 之間的容量其實就是

寬限的容量啦!能夠達到針對使用者的『警示』做用! 

•   寬限時間: 

那麼寬限時間就能夠很清楚的知道含意是什麼了!也就是當您的使用者使用的空間超過了 soft limit ,卻尚未到達 hard limit 時,那麼在這個

『寬限時間』以內, 就必須要請使用者將使用的磁盤容量下降到 soft limit 之下!而當使用者將磁盤容量使用狀況超過 soft limit 時,『寬限時間』

就會自動被啓動,而在使用者將容量下降到 soft limit 之下,那麼寬限時間就會自動的取消囉! 

/etc/mtab 

當咱們要使用 quota 的功能時,咱們的 filesystem 必需要已經支持 quota 的旗標,般來講,咱們是以編輯 /etc/fstab 後,再從新掛載 filesystem 

的方法來讓系統的 filesystem 支持 quota 的

=============================================================================================

[root@linux ~]# quota [-uvsl] [username] 

[root@linux ~]# quota [-gvsl] [groupname] 

參數: 

-u  :後面能夠接 username ,表示顯示出該使用者的 quota 限制值。若不接 username  

 ,表示顯示出執行者的 quota 限制值。 

-g  :後面可接 groupname ,表示顯示出該羣組的 quota 限制值。 

-v  :顯示每一個 filesystem 的 quota 值; 

-s  :可選擇以 inode 或磁盤容量的限制值來顯示; 

-l  :僅顯示出目前本機上面的 filesystem 的 quota 值。 

=============================================================================================

[root@linux ~]# quotacheck [-avug] [/mount_point] 

參數: 

-a  :掃瞄全部在 /etc/mtab 內,含有 quota 支持的 filesystem,加上此參數後,  

 /mount_point 可沒必要寫,由於掃瞄全部的 filesystem 了嘛! 

-u  :針對使用者掃瞄檔案與目錄的使用狀況,會創建 aquota.user 

-g  :針對羣組掃瞄檔案與目錄的使用狀況,會創建 aquota.group 

-v  :顯示掃瞄過程的信息; 

-M  :『強制』進行 quotacheck 的掃瞄。 

=============================================================================================

Linux 也特別強調 quota 在使用的時候,須要特別注意在 reboot 時,得先將 quota 關閉纔好

=============================================================================================

[root@linux ~]# edquota [-u username] [-g groupname] 

[root@linux ~]# edquota -t  <==修改恕限時間 

[root@linux ~]# edquota -p username_demo -u username 

參數: 

-u  :後面接帳號名稱。能夠進入 quota 的編輯畫面 (vi) 去設定 username 的限制值; 

-g  :後面接羣組名稱。能夠進入 quota 的編輯畫面 (vi) 去設定 groupname 的限制值; 

-t  :能夠修改恕限時間 (就是超過 quota 的 soft limit 值後,還能使用硬盤的寬限期限) 

-p  :複製範本。那個 username_demo 爲已經存在而且已設定好 quota 的使用者,意義爲『將 username_demo 這我的的 quota 限制值複製給 username 』! 

=============================================================================================

[root@linux ~]# quotaon [-avug] 

[root@linux ~]# quotaon [-vug] [/mount_point] 

參數: 

-u  :針對使用者啓動 quota (aquota.user) 

-g  :針對羣組啓動 quota (aquota.group) 

-v  :顯示啓動過程的相關訊息; 

-a  :根據 /etc/mtab 內的 filesystem 設定啓動有關的 quota ,若不加 -a 的話,則後面就須要加上特定的那個 filesystem 喔! 

=============================================================================================

[root@linux ~]# quotaoff [-a] 

[root@linux ~]# quotaoff [-ug] [/mount_point] 

參數: 

-a  :所有的 filesystem 的 quota 都關閉 (根據 /etc/mtab) 

-u  :僅針對後面接的那個 /mount_point 關閉 user quota 

-g  :僅針對後面接的那個 /mount_point 關閉 group quota 

十一、例行性命令的創建

一次性的使用at,atq,atrm,batch

循環性的使用crontab,cron 

系統的例行性任務 編輯 /etc/crontab  持兩種下達指令的方式,一種是直接下達指令, 一種則是以目錄來規劃

•   指令型態 

01 * * * * dmtsai mail -s "testing" kiki < /home/dmtsai/test.txt 

以 dmtsai 這個使用者的身份,在每小時執行一次 mail 指令。 

•   目錄規劃 

*/5 * * * * root run-parts /root/runcron 

創建一個 /root/runcron 的目錄,將要每隔五分鐘執行的『可執行檔』都寫到該目錄下, 就可

以讓系統每五分鐘執行一次該目錄下的全部可執行檔。  

十二、程序與資源管理

工做管理 (job control): &, [ctrl]-z, jobs, fg, bg, kill 

指令後面 加上 & 就是表示,指令在後臺執行

將『目前』的工做丟到背景中『暫停』:[ctrl]-z  

若是我正在使用 vi ,卻發現我有個檔案不知道放在哪裏,須要到 bash 環境下去搜尋,此時只要暫時將 vi 給他丟到背景當中等待便可

觀察目前的背景工做狀態: jobs 

將背景工做拿到前景來處理:fg  

讓工做在背景下進行: bg  

管理背景當中的工做: kill  

程序的觀察

ps

top

pstree

•   USER:該 process 屬於那個使用者帳號的?  

•   PID :該 process 的號碼。  

•   %CPU:該 process 使用掉的 CPU 資源百分比;  

•   %MEM:該 process 所佔用的物理內存百分比;  

•   VSZ :該 process 使用掉的虛擬內存量 (Kbytes)  

•   RSS :該 process 佔用的固定的內存量 (Kbytes)  

•   TTY :該 process 是在那個終端機上面運做,若與終端機無關,則顯示 ?,另外, tty1-tty6  是

本機上面的登入者程序,若爲 pts/0 等等的,則表示爲由網絡鏈接進主機的程序。  

•   STAT:該程序目前的狀態,主要的狀態有:  

o  R :該程序目前正在運做,或者是可被運做;  

o  S :該程序目前正在睡眠當中 (可說是 idle 狀態啦!),但可被某些訊號 (signal) 喚

醒。  

o  T :該程序目前正在偵測或者是中止了;  

o  Z :該程序應該已經終止,可是其父程序卻沒法正常的終止他,形成 zombie (疆屍) 程

序的狀態 

•   START:該 process 被觸發啓動的時間;  

•   TIME :該 process 實際使用 CPU 運做的時間。  

•   COMMAND:該程序的實際指令爲什麼? 

系統資源觀察

free

uname

uptime

netstat

dmesg

sar

nice 調整程序優先級

renice 調整的是已經存在的某個 process 

查詢已開啓檔案或已執行程序開啓之檔案

fuser

lsof  

pidof

1三、開機關機流程與 Loader

開機流程

1.  加載 BIOS 的硬件信息,並取得第一個開機裝置的代號;  

2.  讀取第一個開機裝置的 MBR 的 boot Loader (亦便是 lilo, grub, spfdisk 等等) 的開機信息;  

3.  加載 Kernel 操做系統核心信息, Kernel 開始解壓縮,而且嘗試驅動全部硬件裝置;  

4.  Kernel 執行 init 程序並取得 run-level 信息;  

5.  init 執行 /etc/rc.d/rc.sysinit 檔案;  

6.  啓動核心的外掛模塊 (/etc/modprobe.conf);  

7.  init 執行 run-level 的各個批次檔( Scripts );  

8.  init 執行 /etc/rc.d/rc.local 檔案;  

9.  執行 /bin/login 程序,並等待使用者登入;  

10.  登入以後開始以 Shell 控管主機。  

第一支程序 init 及設定文件 /etc/inittab 與 runlevel 

Run level 之變換: init 3

init 處理系統初始化流程 (/etc/rc.d/rc.sysinit) 

/etc/sysconfig 

啓動系統服務與相關啓動設定檔 (/etc/rc.d/rc.n & /etc/sysconfig) 

S 爲開頭的檔案,爲開機時,須要『啓動, start』的服務

K 爲開頭的檔案,爲『關機時須要關閉的服務, stop』的檔案連結

使用者自訂開機啓動程序 (/etc/rc.d/rc.local) 

關於模塊: /etc/modprobe.conf  

/etc/sysconfig/*  

核心與核心模塊

•   核心: /boot/vmlinuz 或 /boot/vmlinuz-version;  

•   核心解壓縮所需 RAM Disk: /boot/initrd (/boot/initrd-version);  

•   核心模塊: /lib/modules/version/kernel 或 /lib/modules/`uname -r`/kernel;  

•   核心原始碼: /usr/src/linux (要安裝纔會有!不然預設不安裝的!) 

若是我有個新的硬件,恰恰個人操做系統不支持,該怎麼辦?

•   從新編譯核心,並加入最新的硬件驅動程序原始碼;  

•   將該硬件的驅動程序編譯成爲模塊,在開機時加載該模塊 

核心模塊與相依性

核心的放置處是在 /lib/modules/`uname -r`/kernel 

depmod

核心模塊的觀察: lsmod, modinfo 

modinfo 查閱每一個模塊的信息

核心模塊的加載與移除: insmod, modprobe, rmmod

核心模塊的額外參數設定: /etc/modprobe.conf 

MBR / Super block / boot loader 之間的相關性,怎麼切換均可能啊

/boot/grub/menu.lst 設定檔

利用 chroot 切換到另外一顆硬盤工做

1四、原始碼與 Tarball 套件管理員

原始碼就是一般的源代碼

原始碼經過編譯、鏈接則生成可執行文件,也就是linux的運行文件

tarball就是將原始碼打包(未壓縮)而獲得的

通常程序升級有兩種方式,

第一種就是下載原始碼,經過編譯鏈接獲得可執行文件,而後替換掉低版本的可執行文件,好比 make 

第二種就是下載程序廠商在和你本機環境同樣的狀況下生成的可執行文件,而後直接替換掉便可,好比一般使用的rpm、apt等 

=============================================================================================

因爲咱們的原始碼檔案有時並不是僅只有一個檔案, 因此咱們沒法直接進行編譯。這個時候就須要先產生目標文件,而後再以連結制做成爲 binary 可執行檔

=============================================================================================

庫函數

gcc sin.c -lm -L/lib -L/usr/lib

# -l :是『加入某個函式庫(library)』的意思,而 

# m  :則是 libm.so 這個函式庫,其中, lib 與附檔名(.a 或 .so)不須要寫 

# 因此 -lm 表示使用 libm.so (或 libm.a) 這個函式庫的意思~ 

# 至於那個 -L 後面接的路徑呢?這表示: 

#『我要的函式庫 libm.so 請到 /lib 或 /usr/lib 裏面搜尋!』 

#-I/path 後面接的路徑( Path )就是設定要去搜尋相關的 include 檔案的目錄啦

=============================================================================================

爲何要用 make 

假設個人執行檔裏面包含了四個原始碼檔案,分別是 main.c haha.c sin_value.c cos_value.c 這四個檔案

那麼咱們須要gcc4次,生成*.o文件,最後進行鏈接,比較繁瑣,下面使用make,建立makefile 

main: main.o haha.o sin_value.o cos_value.o 

gcc -o main main.o haha.o sin_value.o cos_value.o -lm 

# 注意:第二行的 gcc 以前是 <tab> 按鍵產生的空格喔! 

而後直接調用make便可,並且若是某些.c文件修改了,make會只更新修改的文件

=============================================================================================

一般的安裝步驟

./configure

make clean 

make 

make install 

=============================================================================================

動態連接庫和靜態連接庫

=============================================================================================

1五、RPM 與 SRPM 套件管理員

rp-pppoe -        3.1    -     5        .i386        .rpm 

套件名稱   套件的版本信息 釋出的次數 適合的硬件平臺 附文件名 

=============================================================================================

rpm命令

=============================================================================================

srpm就是帶有源碼的rpm,和rpm相比較,就是要多一步編譯的過程,及編譯以後變成rpm檔案,而後安裝

=============================================================================================

1六、認識系統服務 daemons

daemons:在背景當中執行的程序

service:主機提供的功能

=============================================================================================

daemon 的主要分類

stand_alone:獨立的啓動。常駐在內存當中。放置在 /etc/init.d/ 這個目錄裏面

super daemon: 這一種服務的啓動方式則是藉由統一的一個 daemon 來負責喚起該服務。在 /etc/init.d/xinetd 這個 scripts 裏面

針對這種 super daemon 的處理模式有兩種,

multi-threaded: 

single-threaded:

=============================================================================================

與服務有關的端口口對應資料: /etc/services  

=============================================================================================

chkconfig  

ntsysv  

=============================================================================================

1七、認識與分析登陸檔

登陸檔

•   /var/log/secure: 

記錄登入系統存取數據的檔案,例如 pop3, ssh, telnet, ftp 等都會記錄在此檔案中; 

•   /var/log/wtmp: 

記錄登入者的訊息數據,因爲本檔案已經被編碼過,因此必須使用 last 這個指令來取出檔案的內容; 

•   /var/log/messages: 

這個檔案至關的重要,幾乎系統發生的錯誤訊息(或者是重要的信息)都會記錄在這個檔案中;

•   /var/log/boot.log: 

記錄開機或者是一些服務啓動的時候,所顯示的啓動或關閉訊息; 

•   /var/log/maillog 或 /var/log/mail/*: 

紀錄郵件存取或往來( sendmail 與 pop3 )的使用者記錄; 

•   /var/log/cron: 

這個是用來記錄 crontab 這個例行性服務的內容的! 

•   /var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log:

分別是幾個不一樣的網絡服務的記錄文件啦!

基本上,檢查 /var/log/messages、/var/log/secure 這些個檔案也就至關夠了

=============================================================================================

log檔案的服務

•   syslogd: 

進行系統或者是網絡服務的登陸文件記錄工做; 

•   logrotate: 

將舊的數據改名,而且創建新的登陸檔, 以保持登陸檔的『新鮮』,並視設定將最舊的登陸檔刪除。 

=============================================================================================

登陸檔的設定檔:/etc/syslog.conf 

=============================================================================================

lsattr 與 chattr 爲日誌檔保駕護航

=============================================================================================

logrotate 登陸檔的輪詢,其設定檔爲/etc/logrotate.conf  /etc/logrotate.d/ 

=============================================================================================

1八、X server

=============================================================================================

1九、Linux 硬件偵測與維護

•   hdparm:觀察硬盤的種種信息;  

•   lspci:檢查整個系統 PCI 接口的各項裝置!頗有用的指令;  

•   dmesg:觀察覈心運做過程中所顯示的各項訊息記錄;  

•   iostat:檢查整個 CPU 與接口設備的 Input/Output 狀態。  

使用 lm_sensors 取得溫度、電壓等信息 

=============================================================================================

特殊的 filesystem: LVM 

什麼是 LVM: PV, PE, VG, LV 

•   Physical Volume, 簡稱 PV: 

這個就是實體磁盤啦!咱們必需要將本來的磁盤,例如 /dev/hda5, /dev/hda6 等等的 

partition ,利用 fdisk 等軟件,將他們的 ID 改成 LVM (8e) ,而且修改磁盤的相關信息, 讓

他成爲 LVM 可使用的磁盤才行。什麼是 ID 啊?還記得使用 fdisk -l 看到的數據吧? ID 83 

是 Linux 的 partition , 82 則是 Swap 的代號!這樣瞭了吧? 一塊磁盤變成 PV 後, LVM 才

可以利用該 partition 喔!重要重要! 

•   Volume Group, 簡稱 VG: 

其實咱們 LVM 主要的目的就是要創建這個 VG 啦!他主要就是將剛剛的一個或多個 PV 組合成爲

一個大磁盤~這個大磁盤能夠做爲後續的分割之用喔! 那麼這個大磁盤的容量最大可到多大呢?

最大容量的值與底下的 PE 有關, 若是徹底使用 LVM 的預設參數時,那麼一個最大的 LVM 磁盤

可達到 256 GBytes。 

•   Physical Extend, 簡稱 PE: 

在創建 VG 的時候,咱們同時須要指定 PE 這個數值!若是不指定的話,他預設是 4MB 的大小。 

當 PE 爲 4MB 時, VG 最大的容量就是 256 GBytes 啦!那麼這個 PE 是什麼玩意兒?? 咱們

在 磁盤檔案系統 那個章節當中提到的 inode, block 與 filesystem 大小的相關性當中, 有提

到在 ext2/ext3 檔案系統的格式化過程當中,不一樣的 block 大小將會影響到整個 filesystem 大

小的支持度。那這個 PE 其實就有點像是 VG 的 block 啦! 因此他的大小將會影響到 VG 的最

大值喔!若是你想要讓你的 VG 大於預設的 256 GB 時, 記得要修改這個數值!(其實,一個 VG 

最大能夠允許 65534 個 PE , 因此,修改 PE 值,固然就會影響到最大的 VG 容量啦! ) 

•   Logical Volume, 簡稱 LV: 

這個 LV 就是最後被掛載到檔案系統的 partition 囉~這個 LV 是由 VG 分割來的啦~ 他會建

立一個裝置代號,例如 /dev/vgname/lvname 在您的系統當中啊!  

=============================================================================================

PV指令

•   pvcreate :將實體 partition 創建成爲 PV ;  

•   pvscan :搜尋目前系統裏面任何具備 PV 的磁盤;  

•   pvdisplay :顯示出目前系統上面的 PV 狀態;  

•   pvremove :將 PV 屬性移除,讓該 partition 不具備 PV 屬性。  

•   partprobe :這個指令可讓核心馬上讀入最新的 partition table 而沒必要 reboot。 

=============================================================================================

VG指令

•   vgcreate :就是主要創建 VG 的指令啦!他的參數比較多,等一下介紹。  

•   vgscan :搜尋系統上面是否有 VG 存在?  

•   vgdisplay :顯示目前系統上面的 VG 狀態;  

•   vgextend :在 VG 內增長額外的 PV ;  

•   vgreduce :在 VG 內移除 PV;  

•   vgchange :設定 VG 是否啓動 (active);  

•   vgremove :刪除一個 VG 啊!  

=============================================================================================

LV指令

•   lvcreate :創建 LV 啦!  

•   lvscan :查詢系統上面的 LV ;  

•   lvdisplay :顯示系統上面的 LV 狀態啊!  

•   lvextend :在 LV 裏面增長容量!  

•   lvreduce :在 LV 裏面減小容量;  

•   lvremove :刪除一個 LV !  

•   lvresize :對 LV 進行容量大小的調整!  

=============================================================================================

讓原有的 LVM 磁盤加大的方法: resize2fs 

=============================================================================================

20、

核心的版本: uname -r 

[主版本].[次版本].[釋出版本(release)]-[修改版本] 

[次版本]是奇數:測試性質功能的核心版本 

[次版本]是偶數: 穩定核心版本


=============================================================================================

下載原始碼

設定Makefile

•   make menuconfig: 

利用相似選單模式的方式來進行核心參數的挑選,好處是,他是純文字模式的! 不須要啓動 X 

Window ,還能夠遠程登入進行核心參數的挑選!真方便! 

•   make xconfig: 

利用 X Window 的功能來進行挑選,是圖形接口的,很華麗~不過,固然就比較耗系統資源。 如

果你的服務器沒有安裝 X Window ,那就別提了! 

•   make gconfig: 

利用 GDK 函式庫的圖形接口來選擇,也是須要 X Window 的支持才行! 

編譯核心

[root@linux linux-2.6.14.2]# make clean 

# 將之前曾經進行過的 *.o 檔案刪除掉,這樣比較不會產生新舊版本的偏差! 

 

[root@linux linux-2.6.14.2]# make bzImage 

# 製做出核心檔案!這個重要!過程很長啊!並且那個是大寫的 I 喔! 

 

[root@linux linux-2.6.14.2]# make modules 

# 製做出模塊相關的檔案! 

同一版本的核心編譯兩次,請將 /lib/modules 裏面的該版核心先移動掉

安裝

[root@linux linux-2.6.14.2]# make modules_install 

1. 移動新核心到 /boot 裏面去: 

[root@linux ~]# cp /usr/src/linux-2.6.14.2/arch/i386/boot/bzImage \ 

> /boot/vmlinuz-2.6.14-2 

# 就通常的習慣而言,鳥哥建議您將核心檔名設定成以 vmlinuz 爲首的名稱, 

# 比較容易管理啦! 

[root@linux ~]# cp /usr/src/linux-2.6.14.2/System.map \ 

> /boot/System.map-2.6.14-2 

2. 修改 grub 設定檔 

[root@linux ~]# vi /boot/grub/menu.lst 

default=0 

=============================================================================================

核心模塊管理

核心模塊管理: lsmod, modinfo, modprobe, insmod, rmmod... 

==================================================================

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息