Lecture 6
12月29號整理
bash shell 快捷鍵 提供命令編輯功能
Ctrl a 將游標快速移到命令行首部
Ctrl e 將游標快速移到命令行行尾
Ctrl —> (<—)一次移動一個單詞
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重定向:
>輸出重定向 set –C (?---->set C)拒絕別人信息的覆蓋
如果一定要覆蓋:> | 強行覆蓋
<輸入重定向
>>追加重定向 不會覆蓋原有文件
<< here document 可以在腳本中生成文件
2>&1 === &> 標準錯誤輸出重定向
管道
管道的最后一個命令是在一個子shell 中運行的
例子: echo ‘abcd’ | tr ‘a-z’ ‘A-Z’
tee
echo ‘abcd’ | tee /tmp/tee.out |tr ‘a-z’ ‘A-Z’
自定義文件描述符 exec 3> /tmp/custom.out
取消文件描述符 exec 3>&-
多次往一個文件中寫入內容,可以提高腳本輸出地效率,只需打開一次,關閉一次
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<=
| 或者
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 &> /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>$B))
> >=
字元串測試
= != > < -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
輸入——>命令 ESC
命令——>末行 輸入冒號
末行——>命令 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
句間跳轉: )(
段落間跳轉: }{
命令模式——>輸入模式: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次圍觀