歡迎您光臨本站 註冊首頁

Linux基礎知識總結(二)

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

Lecture 6

12月29號整理

bash shell 快捷鍵 提供命令編輯功能

Ctrl a 將游標快速移到命令行首部

Ctrl e 將游標快速移到命令行行尾

Ctrl —&gt; (<—)一次移動一個單詞

Ctrl k 刪除當前游標至命令行尾部的內容

Ctrl u 刪除當前游標至命令行首部的內容

Ctrl l 或者clear都是用來清屏的

(emacs風格) set –o vi 轉換為vi風格

文件名通配

* 匹配零到任意個、任意長度的字元

?匹配任意單個字元 eg:ab?d.mp3 匹配abcd.mp3

[]指定一個取值範圍的單個字元,匹配只能從中括弧中的字元選取

[0-9] [a-z] [:alpha:] 大小寫字母 本身就是一個集 要想使用的話再加上一個中括弧eg [[:alpha:]]b.mp3

[:lower:]小寫字母 [:upper:]大寫字母 [;digit;]數字 [:punct:]標點符號

[;alnum;]字母和數字 [:space:]空白字元 文件名通配

rm –f *.doc

file 查看文件

命令行展開 ~,{},

ls ~redhat

touch {a b}_{c d}

shell 應用程序,提供用戶作為系統介面

命令

編程功能

軟體編程:編譯類:源代碼——》目標代碼(編譯) C C java

腳本類:源代碼 (解釋器 bash) 一般來說 面嚮應用層

腳本語言:perl(redhat 5.8)面向過程

python面向對象 更適合於構建大型應用

ruby (on rail)日本

shell

shell, bsh(sh) 標準shell 開發者bourn 1979年 貝爾實驗室

Bill joy 伯克利大學 csh——>tcsh(改進版) FreeBSD 默認cshell

korn,ksh,GNU ksh(跟原來的ksh不是一回事)

bourn again shell bash shell 遵循GPL Linux目前使用最廣泛的

zsh 功能強大 體積龐大 最年輕的

cat –n 顯示行號

-A --show-all 顯示非列印字元

-T 顯示製表符

不帶參數 默認從鍵盤讀取內容

cat /etc/shells

顯示可用的shell的種類

切換shell 輸入名字即可 eg:ksh

其他shell返回bash shell 的時候一般先exit

不然會在當前進程下再創建一個子進程,會浪費資源

變數:(容器) 命名的內存空間

變數就是以一組文字或者符號等,來取代一些設定或者是一串保留的數據.

在腳本語言里,任何一種類型都會被識別為字元型

bash:本地變數 只對當前程序有效(類似於局部變數)

環境變數 shell中其他進程可以使用 共享型變數

export CLASS=3 導出變數值 可以被一個進程和子進程共用

unset NAME 撤銷變數值

只有在引用(取變數的值)的時候加$

位置參數變數

特殊變數 $?

本地變數的聲明:NAME=linna

或者 set CLASS=3

unset 取消變數值

引用:取變數值 “ ”,’ ’, ``

“ ” 弱引用 會做變數替換

‘ ’ 強引用 不會做變數替換

``(反引號) 命令引用 反引號內的命令會先執行,執行完的信息在傳回到外部命令來處理.

通配符與特殊符號:

printf 不會自動在後面加”n” 不會自動換行

{} 告訴變數名的範圍 echo ${NAME}s 在name變數後邊再加上s輸出

命令引用:

FILE=`ls /root`

FILE=$(ls /var)

把命令的執行結果當做變數的值賦給FILE

聲明的變數不想被人撤銷或者改變 使用readonly命令聲明

eg :readonly NAME

幾點規則:——《鳥哥的linux私房菜》

1.變數與變數內容以等號來連接;

2.等號兩邊不能直接接空格符;

3.變數名稱只能是英文字母和數字,但是數字不能是開頭字元;

4.若有空格符可以用雙引號或者單引號將變數內容結合起來,但要注意,雙引號內的特殊字元可以保有變數特性,但是單引號內的特殊字元僅為一般字元;

5.必要時需要以轉義字元“”將特殊符號變為一般符號;

6.在一串命令中,還需要用到其他命令提供的信息,可以使用 `command` 注意是反引號

env 顯示本地環境變數 通常用來保證運行一個命令的時候只在定製的路徑下的命令

eg:env PATH=/bin/ls

不帶任何參數也可以顯示環境變數.

幾個常用變數

PS1 export PS1=‘[u@h W]$’

PS2

PS3

PS4

LANG 定義語言

locale 查看定義的語言區

LOGNAME

OLDPWD 記錄上一個工作目錄

SHELL

RANDOM 隨機數,使用echo RANDOM時會產生一個隨機數,介於0——32767之間.

如果想輸出一個0——9之間的隨機數,可以這樣:

echo $? 返回上一個命令的執行狀態值 eg 0 2 127

declare 聲明變數類型

-a 將變數聲明為數組(array)

-i 將變數聲明為整數數字(integer)

-x =export 將變數聲明為環境變數

-r 將變數聲明為只讀(readonly)

alias 定義命令別名

alias cdnet=’cd etc/sysconfig/network-scripts’

不想使用別名,在別名前加”” .

unalias 撤銷 僅對當前shell生效

登錄信息顯示數據 /etc/issue

/etc/motd 用戶登錄后顯示信息

永久使用 編輯環境配置文件

#!/bin/bash

腳本中調試功能 set –x

set x

之間的命令

bash –x 腳本名稱 調試整個腳本

系統級別:全局/etc/profile , /etc/profile.d/* , /etc/bashrc

用戶定義:~/.bash_profile , ~/.bashrc , ~/.bash_history , ~/.bash_logout

互動式 profile 通常用於放置環境變數的設置定義等

/etc/profile---à /etc/profile.d/*---à~/.bash_profile---à~/,bashrc---à/etc/bashrc

後面的會覆蓋前邊的

非互動式 bashrc別名等的定義

~/.bashrc---à/etc/bashrc----à/etc/profile..d/*

退出之前需要做些清理工作 ~/.bash_logout

使設置的別名生效 source 或者. 別名

lecture 7 標準I/O及管道

程序 <代碼 數據>

匯流排 BUS ,PCI, ISA,EISA,AGP,USB

文件句柄 handle ,文件描述符

標準輸入 keyboard 0

標準輸出 monitor 1

標準錯誤輸出 monitor 2 跟正常輸出不是同一個數據流

I/O重定向:

&gt;輸出重定向 set –C (?----&gt;set C)拒絕別人信息的覆蓋

如果一定要覆蓋:&gt; | 強行覆蓋

<輸入重定向

>&gt;追加重定向 不會覆蓋原有文件

<&lt; here document 可以在腳本中生成文件

2>&1 === &&gt; 標準錯誤輸出重定向

管道

管道的最后一個命令是在一個子shell 中運行的

例子: echo ‘abcd’ | tr ‘a-z’ ‘A-Z’

tee

echo ‘abcd’ | tee /tmp/tee.out |tr ‘a-z’ ‘A-Z’

自定義文件描述符 exec 3&gt; /tmp/custom.out

取消文件描述符 exec 3&gt;&-

多次往一個文件中寫入內容,可以提高腳本輸出地效率,只需打開一次,關閉一次

lecture 8

less

more

tail -f 一直查看,命令不會退出

less

grep 全面搜索正則表達式 並列印出來

pattern 模式,從文件中匹配整個模式 而後顯示包含了匹配到的內容的行

正則表達式 基本表達 擴展正則表達

* 次數匹配 匹配前邊字元0次或任意次

.匹配任意單個字元

.*匹配任意字元0次或者任意次(任意長度任意字元)

?零次或一次

一到任意次

默認處於貪婪模式,越長越好

r.{2} 只能出現兩次

r.{0,2}出現0到2次

r.{2, } 至少兩次

[a-z] [A-Z] 匹配任一個字元

[^a-z]除了a到z

錨定符:

^root 以root開始

root$ 以root結尾

<錨定單詞詞首

>錨定單詞詞尾

b 匹配詞首詞尾 brootb

<root> 只尋找含有root的字元

[abc] 匹配中括弧中單個字元,

(..) love your lover (love).*1r

^[[:alpha:]]*[^.][0-9]*

尋找精度為2的小數

<[0-9]{1,}.[0-9]{2}>

總結:

* 0<=

? 0 ,1

1&lt;=

| 或者

grep 全面搜索正則表達式 並列印出來

–v 反向顯示 匹配到的不顯示 而不匹配到的顯示

-i 忽略大小寫

-n 在匹配到的結果里只挑取有限範圍行

-An 每一個匹配的行下邊再顯示N行

-Cn 每一個匹配的行上下邊再顯示N行

-E 使用擴展正則表達式

--color=auto 自動添加默認顏色

export GREP_COLOR=’01;32’ 改變顯示顏色

grep –v “^$” ($以空白開頭 以空白結束)把空白行去掉

egrep 使用擴展正則表達式

fgrep 快速搜索正則表達式 = grep –f 不做任何正則表達式的匹配,不把任何字元當做元字元

如何從一個文檔中找出正確的ip地址

1[0-9]{0,2}|2[0-5]{2}.[0-1]{1}[0-9]{0,2}|2[0-5]{0,2}.[0-1]{1}[0-9]{0,2}|2[0-5] {0,2}.[0-1]{1}[0-9]{0,2}|2[0-5] {0,2}

sort –o 指定保存在什麼文件裡邊

-r 逆序

-n 以數值來排序

-u 把相同的行給去了

-t 指定以列排序

-k 指定第幾段

-f 忽略大小寫的差異

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

uniq 去除重複的行 假設兩行一摸一樣且連續

-c 顯示每一行重複的次數

-u 只顯示不重複的行

-d 只顯示重複的

-i 忽略大小寫

示重複的行er

cut –d: 後面接分隔符.與-f 一起使用

-f 依據-d 的分隔字元將一段信息分割成數段,用-f 取出第幾段

-c 以字元(character)的單位取出固定字元區間

ifconfig | grep “inet addr” | cut –d: –f2

wc word count 計算字元

-l 僅列出行

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

-m 多少字元

who | grep“^root”|wc –l

寫一個腳本顯示某用戶登錄了多少次 以及登錄時間

/dev/null 垃圾桶 把命令丟棄

條件測試 test express

0真 1假

&& 前麵條件為真,後面一定會執行

前麵條件為假,後面一定不執行

|| 前麵條件為假,後面一定會執行

前麵條件為真,後面一定不執行

grep “^root” /etc/passwd || (who | grep “^root” |wc -l)

grep “^roooot” /etc/passwd &&(who | grep “^root” |wc -l)

grep “^roooot” /etc/passwd &> /dev/null && (who | grep “^root” |wc -l)

grep “^roooot” /etc/passwd &&gt; /dev/null || echo “Hello,world”

條件判斷三種表達方式:

test expression #test 1 –gt 2

[expression] #[ 1 –gt 2]

[[expression]] #[[ 1 –gt 2]]

-a 與

-o 或

! 非

短路操作符

&&

[]&&[]只要前面為假,後邊就不再運行

[]||[]

[2 –gt 3] || echo “3 is max”

cut -d: -f1 /etc/passwd | grep “^student$” && echo “Student exists” || echo “student is exists”

比較兩個數大小

#!/bin/bash

[ $1 –gt $2 ]&& echo $1 || echo $2

條件測試分為三種:

整數測試

-gt -lt -ge -le -eq -ne

(($A&gt;$B))

&gt; &gt;=

字元串測試

= != &gt; < -z -n

文件測試

-e FILE

-f FILE

-d FILE

-r FILE

-w FILE

-x FILE

-L/-h FILE 測試一個文件是否為符號鏈接文件(軟鏈接)

-O FILE 測試此文件屬主是否是你自己

-G FILE

測試文件存在否 不存在就創建

diff/patch 比較兩個文件的不同不同之處

diff vimrc virmc2 > vimrc.patch 生成一個補丁

patch vimrc <virmrc.patch 打補丁

diff virmc virmc2 比較

-u 用統一格式輸出兩個文件的不同

diff dir1 dir2 目錄下同名的文件逐一比較

-p2

aspell 詞法檢查

tr ‘a-z’ ‘A-Z’ 字元轉換

sed stream editor 行編輯器 一次只處理一行

非交互編輯器

沒有破壞性 不修改源文件 除非使用shell的重定向

sed (stream editor) 流編輯器

sed是一個行編輯器,它逐行處理要被處理對象文件的內容,並會把結果輸送至屏幕

sed [options] ‘patitern/operation’ File

‘/root(模式)/p(操作結果)’/etc/passswd

-n 不顯示模式空間的內容,只顯示匹配並處理的內容

sed s/(模式)/ROOT(模式/

默認只替換每行中第一個 全部替換使用選項-g

i 忽略大小寫

分隔符可以使用任意你想要的符號 :s@@@

指定地址範圍 add1,add2s/// /root/,/student/ s/root/ROOT/第一個出現root的行,第一個出現student的行

10,$(最后一行)s/root/ROOT/g

-i對原文件進行直接替換 默認不會改變原文件

-e 同時實現多項修改

-f 可以從文件中讀取條件的選項

sed.txt的內容

-s 查找並替換

-a 在某行的後面進行追加

後面的“g”表示全局替換 global

1,5表示指定地址範圍

operation p 顯示

d 列印

vi 模式化編輯器

命令模式(編輯模式)

輸入模式

末行模式

命令——>輸入 i,a

輸入——&gt;命令 ESC

命令——&gt;末行 輸入冒號

末行——&gt;命令 Esc (敲兩下)

vi vi improved, vim

退出:

:wq 保存退出

:q 退出

:q!修改後不保存直接退出

:w!強制寫入

shift z 連輸兩次,保存退出

打開后游標處於第N行上 vim n file

直接匹配到有redhat的哪一行 vim /redhat file

游標移動:h 左 j下 k上 l右

行內移動:^第一個非空白字元的行首 0絕對行首 $絕對行尾

以單詞為單位:w 一次移動一個單詞(word)到下一個單詞的詞首 b (backward)上一個單詞的詞首,或當前單詞的詞首 e (end )跳到當前或下一個單詞詞尾

行間移動:nG 1G 跳到第一行

G 跳到最后一行

末行模式下實現行間跳轉 :n

句間跳轉: )(

段落間跳轉: }{

命令模式——&gt;輸入模式:i:insert在當前游標所在處插入

I:在當前游標的行首

a:append 追加 在當前游標的後邊插入 A在當前游標的行尾

o:在當前游標所在行上方插入新行

O:在當前游標所在行下方插入新行

cw 先刪除一些東西,在轉換到插入狀態

c$

C

r (replace)字元替換

R (替換模式)所有操作都會替換原來的內容

刪除 x 刪除當前游標所在處(往後)的字元

X 刪除游標往前的內容

d 連敲兩次,用於刪除 游標當前所在行

nd 用於刪除游標下n行

複製操作

yy 複製一行 p粘貼

Y=yy

3yy 複製三行

p當前游標所在行的下方粘貼

P當前游標所在行的上方粘貼

移動內容

:,. 100

可視模式

v

V

查詢:

/pattern

?pattern

$[A-Z]{1,}

查找並替換:

:addr1,addr2s///gi

%全文搜索

:%s/red/RED/gi

:%s/^#//g

%s/^[[:space:]]{0,}#[[:space:]]*//g

%s/^[[:space:]]{0,}#[[:space:]]*.*$//g

ctrl r 撤銷上一次操作

redo 重做 不能重做撤銷 ,一般是撤銷之前的命令

一次打開多個文件

vim a b c d

:next 下一個

:prev 前一個

:first 第一個

:last 最后一個

-o 水平分割當前窗口

-O 用於垂直分割窗口

末行模式下 vsplit

set 定製vi編輯器

number:行號

autoindent 自動縮進

ignorecase忽略大小寫

vimtutor vim練習器

shell算術運算:

$((expression))

$[expression]

let

面向對象:順序 選擇 循環

本文出自 「諸葛草廬」 博客,請務必保留此出處http://lyp0909.blog.51cto.com/508999/469285


[火星人 ] Linux基礎知識總結(二)已經有613次圍觀

http://coctec.com/docs/linux/show-post-48042.html