起始位置 cmd 終止位置
Cmd:
y複製
d刪除
Gu變大寫
gu變小寫
例如:0y$命令意味着:
0 先到行頭
Y 從這裏開始拷貝
$ 拷貝到本行行尾最後一個字符
Ye 從當前位置拷貝到本單詞的最後一個字符php
# 具體第#行,
#1,#2 從開頭數第#1行到第#2行
#1,+#2 從開頭數的第#1行到從第#1行開始數的第#2行
例:2,+3 表示第2行到第五行
. 當前行
$ 最後一行
. ,$-1 當前行到倒數第二行
% 全文,至關於1,$
/pat1/,/pat2/ 從第一次被pat1 模式匹配的行開始,一直到第一次被pat2匹配的行結束
#,/pat/ 從第#行到第一次匹配到pat結束
/pat/,$ 從第一次匹配到pat到最後一行
使 用方式:後跟一個編輯命令
d 剪切
y 複製
w file 將範圍內的行另存至指定文件中
r file 在指定位置插入指定文件中的全部內容node
s: 在擴展模式下完成替換操做
地址定界s/要查找的內容/替換爲的內容/修飾符
要查找的內容:可使用正則表達式
替換爲的內容:不可使用正則,但可使用\1,\2調用前面表達式裏的分組,還可使用&引用前面查找時查找到的整個內容
修飾符:
i:忽略大小寫
g:全局替換,(默認狀況下,每一行只替換第一次出現)
gc :全局替換,每次替換前詢問
查找替換中的分隔符/可替換爲其它字符,例如:
%s@dog@cat@g 把全文中的dog都替換成cat
%s#dog#cat#i 把每行第一次出現的dog替換成cat,忽略大小寫python
有26個命名寄存器和1個無命名寄存器,常存放不一樣的剪貼版 內容,能夠不一樣會話間共享
寄存器名稱a,b,…,z,格式:「寄存器 放在數字和命令之間
如:3"tyy 表示複製3行到t寄存器中
"tp 表示將t寄存器內容粘貼
未指定,將使用無命名寄存器
有10個數字寄存器,用0,1,…,9表示,0存放最近複製內容
,1存放最近刪除內容。當新的文本變動和刪除時,1轉存到2
,2轉存到3,以此類推。數字寄存器不能在不一樣會話間共享正則表達式
1.以二進制方式打開文件
Vim -b 文件路徑
2.擴展命令模式下,利用xxd命令轉換爲可讀的十六進制
:%!xxd
編輯二進制文件
3.擴展命令模式下,利用xxd命令轉換回二進制
:%!xxd -r
保存退出shell
容許選擇的文本塊
v :面向字符
V :面向行
Ctrl-v 面向塊
可視化鍵可用於與移動鍵結合使用:
w 選中一個單詞
) } 選中從當前到文本尾部
箭頭鍵
突出顯示的文字可被刪除,複製,變動,過濾,搜索,替換等數據庫
Vim file1 file2 file3
:next 下一個
:prev 前一個
:first 第一個
:last 最後一個
:wall 保存全部
:qall 退出全部
:wqall 保存全部並退出express
1.多文件分隔
Vim -o|-O file1 file2
-o:水平分割
-O:垂直分割
在窗口間切換:Ctrl+w
2.單文件窗口分割
Ctrl+w,s:水平分割
Ctrl+w,v:垂直分割
Ctrl+w,q:取消相鄰窗口
Ctrl+w,o:取消所有窗口
:wqall 保存退出
編程
配置文件:永久有效
全局:/etc/vimrc
我的: ~/.vimrc
擴展模式:當前你vim進程有效vim
Set number 顯示行號,簡寫 set nu
Set nonumber 取消顯示行號 簡寫 set nonuc#
Set showmatch 匹配 簡寫 set sm
Set nosm 取消
啓用:set ai
禁用:set noai
啓用:set hlsearch
禁用:set nohlsearch
啓用:syntax on
禁用:syntax off
啓用:set ic
不忽略:set noic
啓用windows格式:set fileformat=dos
啓用unix格式:set fileformat=unix
:set textwidth=65 (vim only)
:set wrapmargin=15
:help
程序:指令+數據
程序編程風格:
過程式:以指令爲中心,數據服務於指令
對象式:以數據爲中心,指令服務於數據
shell程序:提供了編程能力,解釋執行
計算機:運行二進制指令
編程語言:
低級:彙編
高級:
編譯:高級語言-->編譯器-->目標代碼
Java,c#
解釋:高級語言-->解釋器-->機器代碼
Shell,perl,python
順序執行
循環執行
選擇執行
各類系統命令的組合 數據存儲:變量、數組 表達式: a + b 語句:if
shell腳本:
包含一些命令或聲明,並符合必定格式的文本文件
格式要求:
首行shebang機制(就是首行要寫執行的shell,不然就會使用默認shell來運行該腳本,容易出錯,致使腳本執行錯誤執行)
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
shell腳本的用途有:
自動化經常使用命令
執行系統管理和故障排除
建立簡單的應用程序
處理文本或文件
第一步:使用文本編輯器來建立文本文件
第一行必須包括shell聲明序列:#! #!/bin/bash
添加註釋 註釋以#開頭
第二步:運行腳本
給予執行權限,在命令行上指定腳本的絕對或相對路徑
直接運行解釋器,將腳本做爲解釋器程序的參數運行
腳本代碼開頭約定
1.第一行通常爲調用使用的語言
2.程序名,避免更改文件名爲沒法找到正確的文件
3.版本號
4.更改後的時間
5.做者相關信息
6.該程序的做用,及注意事項
7.最後是各版本的更新簡要說明
#!SHEBANG
CONFIGURATION_VARIABLES
FUNCTION_DEFINITIONS
MAIN_CODE
檢測腳本中的語法錯誤
bash -n /path/to/some_script
調試執行
bash -x /path/to/some_script
數據存儲方式:
字符:
數值:整型,浮點型
做用:
一、 數據存儲格式
二、 參與的運算
三、 表示的數據範圍
類型:
字符
數值:整數、浮點型
容許隱式的類型轉換。通常定義變量時必須指定類型、參與
運算必須符合類型要求;調用未聲明變量會產生錯誤
如Java,c# 弱類型:語言的運行時會隱式作數據類型轉換。無須指定類型,默認均爲字符型;參與運算會自動進行隱式類型轉換;
變量無須事先定義可直接調用
如bash 不支持浮點數,php
一、不能使程序中的保留字:例如if, for
二、只能使用數字、字母及下劃線,且不能以數字開頭
三、見名知義
四、統一命名規則:駝峯命名法
本地變量:生效範圍爲當前shell進程;對當前shell以外 的其它shell進程,包括當前shell的子shell進程均無效
環境變量:生效範圍爲當前shell進程及其子進程
局部變量:生效範圍爲當前shell進程中某代碼片段(一般 指函數)
位置變量:$1, $2, ...來表示,用於讓腳本在腳本代碼 中調用經過命令行傳遞給它的參數
特殊變量:$?, $0, $*, $@, $#,$$
變量賦值:name=‘value‘
能夠直接引用value:
一、 能夠是直接字符串。Name=「root」
二、 變量引用:name=「$user」
三、 命令引用:name=·cmd· 或name=$(cmd)
變量引用:${name} $name
「」:弱引用,其中的變量引用會被替換爲變量值
‘’:強引用其中的變量引用不會被替換爲變量值,而保持原字符串
顯示已定義的全部變量:set
刪除變量:unset name
變量聲明、賦值:
export name=VALUE
declare -x name=VALUE
變量引用:$name,${name}
顯示全部環境變量:
Env
Printenv
Export
Declare
刪除變量
Unset name
bash內建的環境變量
PATH
SHELL
USER
UID
HOME
PWD
SHLVL
LANG
MAIL
HOSTNAME
HISTSIZE
只讀變量:只能聲明,但不能修改和刪除
聲明只讀變量:
readonly name
declare -r name
查看只讀變量:
readonly –p
位置變量:在腳本代碼中調用經過命令行傳遞給腳本的參數
$1, $2, ...:對應第一、第2等參數,shift [n]換位置
$0: 命令自己
$: 傳遞給腳本的全部參數,所有參數合爲一個字符串
$@: 傳遞給腳本的全部參數,每一個參數爲獨立字符串
$#: 傳遞給腳本的參數的個數
$@ $ 只在被雙引號包起來的時候纔會有差別
set -- 清空全部位置變量
進程使用退出狀態來報告成功或失敗
0 表明成功,1-255表明失敗
$? 變量保存最近的命令退出狀態
例如:
Ping 172.28.250.1
Echo $?
Bash自定義退出狀態碼
exit [n]:自定義退出狀態碼
注意:腳本中一旦遇到exit命令,腳本會當即終止;終止退出 狀態取決於exit命令後面的數字
注意:若是未給腳本指定退出狀態碼,整個腳本的退出狀態碼 取決於腳本中執行的最後一條命令的狀態碼
Bash中的算術運算:help let
+ ,-,*,/,%取模(取餘),**(乘方)
實現算術運算:
(1) let var=算術表達式
(2) var=$[算術表達式]
(3) var=$((算術表達式))
(4) var=$(expr arg1 arg2 arg3 ...)
(5) declare –i var = 數值
(6) echo ‘算術表達式’ | bc
乘法符號有些場景中須要轉義,如*
Bash有內建的隨機數生成器:$RSNDOM(0-32767)
echo $[$RANDOM%50] :0-49之間隨機數
加強型賦值
+=, -=, *=, /=, %=
let varOPERvalue
例如:let count+=3
自加 3後自賦值
自增,自減:
let var+=1
let var++
let var -=1
et var--
true, false
1 ,0
與:
1 與 1 = 1
1 與 0 = 0
0 與 1 = 0
0 與 0 = 0
或:
1 或 1 = 1
1 或 0 = 1
0 或 1 = 1
0 或 0 = 0
非:!
! 1 = 0
! 0 = 1
短路運算:
短路與
第一個爲0,結果一定爲0
第一個爲1,第二個必需要參與運算
短路或
第一個爲1,結果一定爲1
第一個爲0,第二個必需要參與運算
異或:^
異或的兩個值,相同爲假,不一樣爲真
判斷某需求是否知足,須要由測試機制來實現
專用的測試表達式須要由測試命令輔助完成測試過程
評估布爾聲明,以便用在條件性執行中
若真,則返回0
若假,則返回1
測試命令:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
注意:表達式先後與中括號之間必定要有一個空格expression的意思是表達式
根據退出狀態而定,命令能夠有條件地運行
&& 表明條件性的AND THEN(與)
|| 表明條件性的OR ELSE(或)
例如:
Grep -q dog /app/cc && echo 成功
Ping -c1 -W2 172.18.0.1 &> /dev/null && echo ping通了
長格式的例子:
test "$A" == "$B" && echo "Strings are equal"
若A=B ,則輸出strings are equal
test 「$A」 -eq 「$B」 && echo "Integers are equal"
若A不等於B,則輸出integers are equal
簡寫格式的例子:
[ "$A" == "$B" ] && echo "Strings are equal"
[ "$A" -eq "$B" ] && echo "Integers are equal"
-v VAR
變量VAR 是否存在
數值測試:
-gt 是否大於
-ge 是否大於等於
-eq 是否等於
-ne 是否不等於
-lt 是否小於
-le 是否小於等於
字符串測試:
== 是否等於
> ascii碼是否大於ascii碼
< 是否小於
!= 是否不等於
=~ 左側字符串是否可以被右側的PATTERN所匹配
注意: 此表達式通常用於[[ ]]中;擴展的正則表達式
-z "STRING「 字符串是否爲空,空爲真,不空爲假
-n "STRING「 字符串是否不空,不空爲真,空爲假
(注意:用於字符串比較時的用到的操做數都應該使用引號)
存在性測試
-a FILE:同-e
-e FILE: 文件存在性測試,存在爲真,不然爲假
存在性及類別測試
-b FILE:是否存在且爲塊設備文件
-c FILE:是否存在且爲字符設備文件
-d FILE:是否存在且爲目錄文件
-f FILE:是否存在且爲普通文件
-h FILE 或 -L FILE:存在且爲符號連接文件
-p FILE:是否存在且爲命名管道文件
-S FILE:是否存在且爲套接字文件
文件權限測試
-r FILE:是否存在且可讀
-w FILE: 是否存在且可寫
-x FILE: 是否存在且可執行
文件特殊權限測試:
-u FILE:是否存在且擁有suid權限
-g FILE:是否存在且擁有sgid權限
-k FILE:是否存在且擁有sticky權限
文件大小測試:
-s FILE:是否存在且非空
文件是否打開:
-t fd: fd表示文件描述符是否已經打開且與某終端相關
-N FILE:文件自動上一次被讀取以後是否被修改過
-O FILE:當前有效用戶是否爲文件屬主
-G FILE:當前有效用戶是否爲文件屬組
雙目測試:
FILE1 -ef FILE2: FILE1與FILE2是否指向同一個設 備上的相同inode
FILE1 -nt FILE2: FILE1是否新於FILE2(mtime)
FILE1 -ot FILE2: FILE1是否舊於FILE2
第一種方式:
COMMAND1 && COMMAND2 而且
COMMAND1 || COMMAND2 或者
! COMMAND 非
如:[[ -r FILE ]] && [[ -w FILE ]]
第二種方式:
EXPRESSION1 -a EXPRESSION2 而且
EXPRESSION1 -o EXPRESSION2 或者
! EXPRESSION
必須使用測試命令進行
示例:
[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab
使用read來把輸入值分配給一個或多個shell變量
-p 指定要顯示的提示
-s 靜默輸入,通常用於密碼
-n N 指定輸入的字符長度N
-d ‘字符’ 輸入結束符
-t N TIMEOUT爲N秒
read 從標準輸入中讀取值,給每一個單詞分配一個變量
全部剩餘單詞都被分配給最後一個變量
read -p 「Enter a filename: 「 FILE
把命令行分紅單個命令詞
展開別名
展開大括號的聲明({})
展開波浪符聲明(~)
命令替換$() 和 ``)
再次把命令行分紅命令詞
展開文件通配(* 、?、[abc]等等)
準備I/0重導向()
運行命令
1.反斜線(\)會使後面的特殊符號字符依然以字符串的形式輸出,而不是輸出特殊的含義,例如$能夠用來調用變量的值,在前面加\則只輸出$,而不會調用後面字符的變量值,可是一個\只能轉義一個字符
$ echo Your cost: \$5.00
Your cost: $5.00
2.加引號來防止擴展
單引號(’’)防止單引號內的全部字符的擴展
雙引號(」」)也防止全部擴展,但如下狀況例外:
$(美圓符號) - 變量擴展
`(反引號) - 命令替換
\(反斜線) - 禁止單個字符擴展
!(歎號) - 歷史命令替換
Bash的配置文件會在每次用戶登陸時被系統讀取,全局配置下的文件,全部用戶通用,我的家目錄下的配置文件則是用戶本身的一些個性化配置
按生效範圍劃分,存在兩類:
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
我的配置:
~/.bash_profile
~/.bashrc
(1) 直接經過終端輸入帳號密碼登陸
(2) 使用「su - UserName」 切換的用戶
交互式登陸讀取配置文件的順序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
(1)su UserName
(2)圖形界面下打開的終端
(3)執行腳本
(4)任何其它的bash實例
執行順序:~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
Profile類和bashrc類
Profile類:爲交互式登陸的shell提供配置
全局:/etc/profile, /etc/profile.d/*.sh
我的:~/.bash_profile
功用:
(1) 用於定義環境變量
(2) 運行命令或腳本
Bashrc類:爲非交互式和交互式登陸的shell提供配置
全局:/etc/bashrc
我的:~/.bashrc
功用:
(1) 定義命令別名和函數
(2) 定義本地變量
修改profile和bashrc文件後需生效
兩種方法:
1.從新啓動shell進程
2 . 或source
Source與 . 在當前shell下執行腳本,用來設置環境變量及別名,函數等
/bin/bash或路徑方式執行腳本使子shell在執行,子shell能夠繼承父shell的環境變量,但在腳本中設置的變量,均不會影響父shell
保存在~/.bash_logout文件中(用戶)
在退出登陸shell時運行
用於
建立自動備份
清除臨時文件
h:hashall,打開這個選項後,Shell 會將命令所在的路徑 hash下來,避免每次都要查詢。經過set +h將h選項關閉
i:interactive-comments,包含這個選項說明當前的 shell 是一個交互式的 shell。所謂的交互式shell,在腳本中,i選項 是關閉的。
m:monitor,打開監控模式,就能夠經過Job control來控制 進程的中止、繼續,後臺或者前臺執行等。
B:braceexpand,大括號擴展
H:history,H選項打開,能夠展開歷史列表中的命令,能夠 經過!感嘆號來完成,例如「!!」返回上最近的一個歷史命令, 「!n」返回第 n 個歷史命令
語法格式:
if 條件 ;then
命令塊1(能夠是多個命令)
else
命令塊2(能夠是多個命令)
Fi
若是符合該條件,則執行命令塊1處的命令不執行命令塊2處的命令,若是條件不符合,則跳過命令塊1處的命令不執行,直接執行命令塊2處的命令,條件多爲一個判斷命令,返回值爲0(true)執行命令塊1,返回值爲1(false)執行命令塊2
例如:
if $(id $1 &> /dev/null);then
echo "$1 alread exist"
exit 1
else
useradd $1
fi
語法格式:
If 條件1 ;then
命令塊1
Elif 條件2 ;then
命令塊2
Elif 條件3;then
命令塊3
……
Elif 條件n;then
命令塊n
Else
命令塊n+1
If
執行順序是,先判斷條件1,返回值爲true則執行命令塊1,而後退出if語句
若是條件1,返回值爲false,則繼續判斷條件2,返回值爲true,則執行命令塊2,而後退出if語句,若條件2 返回值爲false,則繼續判斷條件3……,若是全部條件返回 值都爲false,則執行else後面的命令塊n+1,而後退出if語句
例如:
#!/bin/bash
if [ $1 -lt 3 ];then
echo redhat
elif [ $1 -eq 3 ];then
echo green
elif [ $1 -gt 3 -a $1 -lt 5 ];then
echo yellow
else
echo white
fi
Case 變量 in
變量值1)命令塊1;;
變量值2)命令塊2;;
變量值4)命令塊3;;
變量值n)命令塊n;;
Esac
執行順序是,先調用一個變量,而後判斷變量值是否符合變量值1,若是相等,則執行命令塊1,若是不符合則判斷變量值2,……一直到變量值n,若是都不符合則 一條命令都不執行
例如:
case $1 in
1)echo redhat;;
2)echo yellow;;
3)echo green;;
*)echo blue;;
Esac
在文件系統上查找符合條件的文件
文件查找:locate 和find
非實時查找(數據庫查找):locate
實時查找:find
/var/lib/mlocate/mlocate.db
索引的構建是在系統較爲空閒時自動進行(週期性任務),管理 員手動更新數據庫(updatedb)
查找速度快
模糊查找
非實時查找
搜索的是文件的全路徑,不只僅是文件名
可能只搜索用戶具有讀取和執行權限的目錄
Locate 選項word
-i 不區分大小寫的搜索
-n N 只列舉前N個匹配項目
-r 正則 使用正則表達式來進行模糊查找
例:
Locate conf:搜索名稱或路徑中帶有conf的文件
Locate -r ‘\.conf$’ :使用正則表達式來搜索以「.conf」結尾的文件
查找速度略慢
精確查找
實時查找
可能只搜索用戶具有讀取和執行權限的目錄
Find [選項] 參數 [查找路徑] [查找條件] [處理動做]
查找路徑:指定具體目標路徑;默認爲當前目錄
查找條件:指定的查找標準,能夠文件名、大小、類型、 權限等標準進行;默認爲找出指定路徑下的全部文件
處理動做:對符合條件的文件作操做,默認輸出至屏幕
-maxdepth level 最大搜索目錄深度,指定目錄爲第1級
-mindepth level 最大搜索目錄深度
-name 「文件名稱」:支持使用glob
*, ?, [], [^]
-iname "文件名稱":不區分字母大小寫
-inum n 按inode號查找
-samefile name 相同inode號的文件
-links n 連接數爲n的文件
-regex "PATTERN":以PATTERN匹配整個文件路徑字 符串,而不只僅是文件名稱
例:
find -name snow.png 搜索名爲snow.png的文件
find -iname snow.png 不分大小寫地搜索名爲snow.png、Snow.png、 SNOW.PNG等等的文件
find / -name 「.txt」 搜索/下文件名以.txt結尾的文件
find /var –name 「log*」 在/var目錄下搜索名字裏包含log的文件
-user USERNAME:查找屬主爲指定用戶(UID)的文件
-group GRPNAME: 查找屬組爲指定組(GID)的文件
-uid UserID:查找屬主爲指定的UID號的文件
-gid GroupID:查找屬組爲指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
例:
find -user joe -group joe 搜索被用戶joe 以及組羣joe所擁有的文件
find / -user joe -o -uid 500 在/目錄下搜索屬主爲joe或屬主的uid爲500的文件
-type type(對應如下類型):
f: 普通文件
d: 目錄文件
l: 符號連接文件
s:套接字文件
b: 塊設備文件
c: 字符設備文件
p: 管道文件
例:
find / -name shell -type f 搜索/目錄下全部文件名爲shell的普通文件
與:-a
或:-o
非:-not, !
德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)
例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
示例:
find -user joe -not -group joe 在當前目錄下搜索屬主是Joe但屬組不是joe的全部文件及目錄
find -user joe -o -user jane 在當前目錄下搜索屬主是joe或jane的全部文件及目錄
find -not \( -user joe -o -user jane \) 搜索當前目錄下屬主既不是joe也不是Jane的全部文件及目錄
找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件
find /tmp \( -not -user root -a -not -name 'f*' \) -ls
find /tmp -not \( -user root -o -name 'f*' \) –ls
示例:查找/etc/下,除/etc/sane.d目錄的其它全部.conf後 綴的文件
find /etc -path ‘/etc/sane.d’ -a -prune -o -name 「*.conf」
find /etc (–path ‘/etc/sane.d’ –o –path ’/etc/fonts’ \) -a prune –o name 「*.conf」
-size [+|-]#UNIT
經常使用單位:K,M,G c(byte)
#UNIT: (#-1, #] (#:數字;unit:單位)
如:6k 表示(5k,6k]
-#UNIT:[0,#-1]
如:-6k 表示[0,5k]
+#UNIT:(#,∞)
如:+6k 表示(6k,∞)
以「天」爲單位
-atime e [+|-]#,
#: [#,#+1)
+#: [#+1, ∞ ]
-#: [0,#)
-mtime
-ctime
以「分鐘」爲單位
-amin
-mmin
-cmin
-perm [/|-]MODE
MODE: 精確權限匹配
/MODE:任何一類(u,g,o)對象的權限中只要能一位匹配 便可,或關係,+ 從centos7開始淘汰
-MODE:每一類對象都必須同時擁有指定權限,與關係
0 表示不關注
find -perm 755 會匹配權限模式剛好是755的文件
只要當任意人有寫權限時,find -perm +222就會匹配
只有當每一個人都有寫權限時,find -perm -222纔會匹配
只有當其它人(other)有寫權限時,find -perm -002才 會匹配
-print:默認的處理動做,顯示至屏幕
-ls:相似於對查找到的文件執行「ls -l」命令
-delete:刪除查找到的文件
-fls file:查找到的全部文件的長格式信息保存至指定文件中
-ok COMMAND {} \; 對查找到的每一個文件執行由COMMAND 指定的命令,對於每一個文件執行命令以前,都會交互式要求 用戶確認
-exec COMMAND {} \; 對查找到的每一個文件執行由 COMMAND指定的命令
{}: 用於引用查找到的文件名稱自身。{}與\之間必須有一個空格
find傳遞查找到的文件至後面指定的命令時,查找到全部符合 條件的文件一次性傳遞給後面的命令
例:find -type f -name ".sh" -exec chmod a+x {} \
在當前文件下查找出以.sh結尾的全部文件,並給她們加上執行權限
find -name ".conf" -exec cp -i {} {}.bak \;
備份全部以conf結尾的全部文件並更名添加.bak這個擴展名
因爲不少命令不支持管道|來傳遞參數,而平常工做中有這個必要,全部就有了xargs命令,xargs用於產生某個命令的參數,xargs 能夠讀入 stdin 的數據,而且以空格符或回車符將 stdin 的數據分隔成爲arguments
注意:文件名或者是其餘意義的名詞內含有空格符的狀況
有些命令不能接受過多參數,命令執行可能會失敗,xargs可 以解決
示例:
ls f\* |xargs rm
find /sbin -perm +700 |ls -l 這個命令是錯誤的
find /sbin -perm +7000 | xargs ls –l
find和xargs格式:find | xargs COMMAND
find -name 「\.conf」 -exec cp {} {}.orig \;
備份配置文件,添加.orig這個擴展名
find /tmp -ctime +3 -user joe -ok rm {} \;
提示刪除存在時間超過3天以上的joe的臨時文件
find ~ -perm -002 -exec chmod o-w {} \;
在你的主目錄中尋找可被其它用戶寫入的文件
find /data –type f -perm 644 -name 「\.sh」 –exec chmod 755 {} \;
find /home –type d -ls
compress/uncompress: .Z
gzip/gunzip: .gz
bzip2/bunzip2: .bz2
xz/unxz: .xz
zip/unzip
tar
cpio
compress srcfile 將源文件壓縮成壓縮包,源文件消失
compress -v srcfile 或compress -v -d dstfile.Z 壓縮或解壓縮時顯示詳細信息
compress -c srcfile > dstfile.Z 將源文件壓縮成壓縮包,源文件保留
compress -d dstfile.Z 或 uncompress dstfile.Z 將壓縮包解壓成源文件,壓縮包消失
compress -d -c dstfile.Z > srcfile 或 zcat dstfile.Z > srcfile 將壓縮包解壓成源文件,壓縮包保留
gzip srcfile 將源文件壓縮成壓縮包,源文件消失
gzip -c srcfile > dstfile.gz 將源文件壓縮成壓縮包,源文件保留
gzip -d dstfile.gz 或gunzip dstfile.gz 將壓縮包解壓成源文件,壓縮包消失
gzip -d -c dstfile.gz > srcfile 或 zcat dstfile.gz > srcfile 將壓縮包解壓成源文件,壓縮包保留
gzip -# srcfile (#即1-9,表示壓縮比,數字越大壓縮比越高,默認爲6)
bzip2 srcfile 將源文件壓縮成壓縮包,源文件消失
bzip2 -k srcfile 將源文件壓縮成壓縮包,源文件保留且權限不變
bzip2 -c srcfile > dstfile.bz2 將源文件壓縮成壓縮包,源文件保留但權限根據umask值而改變
bzip2 -d dstfile.bz2 或bunzip dstfile.bz2 將壓縮包解壓成源文件,壓縮包消失
bzip2 -k -d dstfile.bz2 或bunzip -k dstfile.bz2 將壓縮包解壓成源文件,壓縮包保留且權限不變
bzip2 -d -c dstfile.bz2 > srcfile 或 bunzip -c dstfile.bz2 > srcfile 將壓縮包解壓成源文件,壓縮包保留但權限根據umask值而改變
bzip2 -# srcfile (#即1-9,表示壓縮比,數字越大壓縮比越高,默認爲9)
bzcat dstfile.bz2 能夠預覽解壓後的內容,配合> 也能解壓,但權限會根據umask值而改變
Xz [option] ……file ……
-k: keep, 保留原文件
-d:解壓縮
-#:1-9,壓縮比,默認爲6
xzcat: 不顯式解壓縮的前提下查看文本文件內容
zip -r dstfile.zip srcfile 打包srcfile並壓縮成dstfile
zip scrfile 壓縮srcfile文件,源文件不存在
zip -r config.zip /etc/passwd /etc/group /etc/shadow /etc/gshadow 打包壓縮多個源文件,源文件以空格相隔
cat /var/log/messages | zip messages – 把/var/log/messages裏面的內容壓縮給當前目錄下的messages,源文件依舊存在
unzip config.zip 解包解壓縮 壓縮包不存在
unzip -p conf.zip > config1 解壓config.zip裏的內容到config1,壓縮文件依舊存在
tar -tf mage.tar.xz 預覽壓縮包的文件列表
tar -rf mage.tar /path/newfile 往tar包中加強文件(注意只能對tar包增長文件,而不能對壓縮包增長)
tar -cf mage.tar filename1 filename2 [filenameN] 將多個文件打包至mage.tar
tar -zcf mage.tar.gz filename1 filename2 [filenameN] 將多個文件打包並用gzip壓縮爲mage.tar.gz
tar -jcf mage.tar.bz2 filename1 filename2 [filenameN] 將多個文件打包並用bzip2壓縮爲mage.tar.bz2
tar -Jcf mage.tar.xz filename1 filename2 [filenameN] 將多個文件打包並用xz壓縮爲mage.tar.xz
tar -xf mage.tar 解壓tar包的全部文件到當前目錄
tar -xf mage.tar.xz filename 僅將壓縮包中的其中一個文件filename解壓到當前目錄
tar -zxf mage.tar.gz 解壓gz的壓縮包到當前目錄
tar -jxf mage.tar.bz2 解壓bzip2的壓縮包到當前目錄
tar -Jxf mage.tar.xz 解壓xz的壓縮包到當前目錄
tar -zxf mage.tar.gz -C /tmp 解壓gz的壓縮包到/tmp目錄
tar -zvxf mage.tar.gz 解壓gz的壓縮包到當前目錄並顯示詳細過程
tar zcvf mage.tar.gz -T yasuolist.txt -X paichu.txt
-T 指定須要打包並壓縮的文件列表,每一個文件路徑一行
-X 指定要排除的文件列表,每一個文件一行
split -b 2K -d etc.tgz 4 將壓縮包以2K爲單位分割爲4份
cat 40* > mage.tgz 將以40開頭命名的多個分割包合併爲mage.tgz
複製 從或到文件
cpio命令是經過重定向的方式將文件進行打包備份,還原恢復 的工具,它能夠解壓以「.cpio」或者「.tar」結尾的文件。
cpio [選項] > 文件名或者設備名 :
cpio [選項] < 文件名或者設備名
選項
-o 將文件拷貝打包成文件或者將文件輸出到設備上
-i 解包,將打包文件解壓或將設備上的備份還原到系統
-t 預覽,查看文件內容或者輸出到設備上的文件內容
-v 顯示打包過程當中的文件名稱。
-d 解包生成目錄,在cpio還原時,自動的創建目錄
-c 一種較新的存儲方式
例:
將etc目錄備份:
find ./etc -print |cpio -ov >etc.cpio
內容預覽
cpio –tv < etc.cpio
要解包文件
cpio –idv < etc.cpio
Stream EDitor, 行編輯器
sed是一種流編輯器,它一次處理一行內容。處理時,把當前 處理的行存儲在臨時緩衝區中,稱爲「模式空間」(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後 ,把緩衝區的內容送往屏幕。而後讀入下行,執行下一個循 環。若是沒有使諸如‘D’的特殊命令,那會在兩個循環之間 清空模式空間,但不會清空保留空間。這樣不斷重複,直到 文件末尾。文件內容並無改變,除非你使用重定向存儲輸 出。
主要用來自動編輯一個或多個文件,簡化對文件的反覆 操做,編寫轉換程序等
sed [option]... 'script' inputfile...
經常使用選項
-n:不輸出模式空間內容到屏幕,即不自動打印
-e: 多點編輯
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式
-i.bak: 備份文件並原處編輯
Script:
Script ‘地址 編輯命令’,與vim的擴展命令行裏面的一些格式有些類似
地址定界:
(1) 不給地址:對全文進行處理
(2) 單地址:
#: 指定的行
/pattern/:被此處模式所可以匹配到的每一行
(3) 地址範圍:
#1,#2 從第#1行到第#2行
#1,+#2 從第#1行開始,到從第#1行數#2行結束
/pat1/,/pat2/ 從第一次匹配到pat1至第一次匹配到pat2
#,/pat1/ 從第#行開始至第一次匹配到path1爲止
(4) ~:步進 1~2 奇數行 2~2 偶數行
編輯命令:
d: 刪除模式空間匹配的行,並當即啓用下一輪循環
p:打印當前模式空間內容,追加到默認輸出以後
a [\]text:在指定行後面追加文本 支持使用\n實現多行追加
i [\]text:在行前面插入文本
c [\]text:替換行爲單行或多行文本
w /path/somefile: 保存模式匹配的行至指定文件
r /path/somefile:讀取指定文件的文本至模式空間中 匹配到的行後
=: 爲模式空間中的行打印行號
!:模式空間中匹配行取反處理
s///:查找替換,支持使用其它分隔符 s@@@,s###
替換標記
g: 行內全局替換
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
Sed -n ‘2p’ cc 只顯示第2行 sed -n '1,4p' cc 顯示1到4行 sed -n '1,+2p' cc 顯示1至3行 sed -n '/root/p' cc 顯示匹配到root的行 sed -n '2,/root/p' cc 顯示從第二行,至第一個次匹配到root的行 sed -n '/^$/=' cc 顯示空行的行號 sed -n -e '/root/p' -e '/cat/=' cc 顯示匹配到root的行以及匹配到cat的行號 sed ‘/root/i\superman’ /etc/passwd 在全部匹配到root的行前插入superman sed ‘/root/c\superman’ /etc/passwd 代替行 sed ‘/root/a\superman’ /etc/passwd行後