vim編輯器
文本編輯器:
文本:純文本,ASCII text;Unicode
文本編輯種類:
行編輯器:sed
全屏編輯器:nano, vi
vi: Visual Interface
vim: Vi IMproved
vim:
基本模式:
編輯模式,命令模式
輸入模式:
莫行模式:
內(nèi)置的命令行接口;
打開文件:
vim [options]
+#:打開文件后,直接讓光標(biāo)處于第#行的行首
+/PATTERN:打開文件后,直接讓光標(biāo)處于第一個被PATTERN匹配行的行首
模式轉(zhuǎn)換:
編輯模式:默認(rèn)模式
編輯模式-->輸出模式;
i: insert ,在光標(biāo)所在處輸入
a: append ,在光標(biāo)所在處后方輸入
o:在光標(biāo)所在處下方打開的一個新行
I:在光標(biāo)所在行的行首輸入
A:在光標(biāo)所在處后方輸入
O:在光標(biāo)所在處的上方打開一個新的行輸入模式-->編輯模式
esc
編輯模式-->末行模式
:
末行模式--> 編輯模式
esc
關(guān)閉文件:
ZZ 保存并退出;
:q 退出
:q! 強制退出,不保存此前的編輯操作
:wq 保存退出
保存并退出
:w /PATH/TO/SOMEFILE
光標(biāo)跳轉(zhuǎn):
字符間跳轉(zhuǎn)
h:左
j:下
k:上
l : 右
# COMMAND:跳轉(zhuǎn)由# 指定的個數(shù)的字符
單詞間跳轉(zhuǎn)
w:下一個單詞的詞首
e: 當(dāng)前或后一個單詞的詞尾
b: 當(dāng)前或前一個單詞的詞首
行首行尾跳轉(zhuǎn)
^: 跳轉(zhuǎn)至行首的第一個非空白字符
0:跳轉(zhuǎn)至行首
$:跳轉(zhuǎn)至行尾
行間跳轉(zhuǎn)
#G:跳轉(zhuǎn)至由#指定的行
1G,gg :第一行
G:最后一行
句間跳轉(zhuǎn)
)
(
段間跳轉(zhuǎn)
}
{
翻屏:
Ctrl+f:向文件尾部翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
Enter:按行向后翻
vim的編輯命令:
字符編輯
x:刪除光標(biāo)所在處的字符
#x:刪除光標(biāo)所在處起始的#個字符
xp:交換光標(biāo)所在處的字符與其后面的字符的位置
替換命令(replace):
r:替換光標(biāo)所在處的字符
刪除命令
d:刪除命令,可結(jié)合光標(biāo)跳轉(zhuǎn)字符,實現(xiàn)范圍刪除
d$
d^
dw
de
db
#COMMAND
dd:刪除光標(biāo)所在處的行
#dd:刪除光標(biāo)所處的行起始的共#行
粘貼命令(p,put,paste)
p:緩沖區(qū)的內(nèi)容,如果為整行,則粘貼在當(dāng)前光標(biāo)所在行的下方;否則在光標(biāo)所在后方粘貼
P: 緩沖區(qū)的內(nèi)容,如果為整行,則粘貼在當(dāng)前光標(biāo)所在行的上方;否則在光標(biāo)所在前方粘貼
復(fù)制命令(yank,y)
y: 復(fù)制,工作行為相似于d命令
y$
y^
y0
ye
yw
yb
#COMMAND
yy:復(fù)制一整行
#yy:復(fù)制#行
改變命令(change,c)
編輯模式-->輸入模式,實現(xiàn)刪除操作
c$
c^
c0
cb
ce
cw
#COMMAND
cc:刪除光標(biāo)所在的行,并轉(zhuǎn)換為輸出模式
#cc
其他編輯操作:
可視化模式:
v: 按字符選定
V:按行選定
結(jié)合編輯命令使用d,c,y
撤銷(undo)操作:
u:撤銷此前的操作
#u: 撤銷此前的#個操作
恢復(fù)此前的撤銷:
Ctrl +r
重復(fù)執(zhí)行前一個編輯操作:.
vim自帶的練習(xí)教程:vimtutor
vim末行模式:
內(nèi)建的命令行接口
(1)地址定界
:start_pos[,end_pos]
#: 特定的第#行,例如5即第5行
.:當(dāng)前行
$:最后一行
#,#:指定行范圍,左側(cè)為起始行,右測為結(jié)束行
#,+#:指定行范圍,左側(cè)為初始行絕對編號,右側(cè)為相對左側(cè)行號的偏移量;例如:3,+7
1,$
%:全文
/pattern/:從光標(biāo)所在處初始向文件尾部第一次被模式所匹配到的行
/first/,$
/part1/,pat2/:從光標(biāo)所在處起始,第一次由part1匹配到的行開始,至第一次由part2匹配到的行結(jié)束之間的所有行 ;
可同編輯命令一同使用,實現(xiàn)編輯操作;
d
y
c
w/PATH/TO/SOMEFILE:將范圍內(nèi)的文本保存至指定的文件中
r /PATH/FROM/SOMEFILE:將指定的文件中的文本讀取并插入至指定位置(2)查找
/PATTERN:從當(dāng)前光標(biāo)所在處向文件尾部查找能被當(dāng)前模式匹配到的所有字符串
?/PATTERN:從當(dāng)前光標(biāo)所在處向文件首部查找能被當(dāng)前模式匹配到的所有字符串
n:下一個,與命令方向相同
N:上一個,與命令方向相反
(3)查找并替換
s: 末行模式的命令;使用格式;
s/要查找的內(nèi)容/替換為的內(nèi)容/修飾符
要查找的內(nèi)容:可使用正則表達(dá)式
替換為的內(nèi)容:不能使用正則表達(dá)式,但可以引用
如果“要查找的內(nèi)容”部分在模式中使用分組符好;再“替換為的內(nèi)容”中使用后向引用;
直接引用查找模式匹配到的全部文本;要使用&符號
修飾符:
i: 忽略大小寫
g: 全局替換,意味著一行中如果匹配到多次,則均替換
可把分隔符替換為其它字符
s@@@
@###
示例:
1、所有以f開頭的單詞替換為F
%s@\<f\([[:alpha:]]\+\)\>@F\1@g
2、所有以f或F開頭的單詞后面加上TEST
%s@\<f[[:alpha:]]\+\>@&TEST@gi
練習(xí):
1、復(fù)制/etc/grub.conf文件至/tmp目錄中,用查找替換命令刪除/tmp/grub.conf文件中以空白字符開頭的行的行首的空白字符;
%s@^[[:space:]]/+@@
2、復(fù)制/etc/rc.d/init.d/functions文件移動至/tmp目錄中,用查找替換命令為/tmp/functions文件的每個以空白字符開頭的行的行首加上#
%s@^[[:space:]]@#&@g
%s@^[[:space:]]\+[[:space:]]@#&@g
3、為/tmp/grub.conf文件的前三行的行首加上#號
1,3s@^.*$@#&@
4、將/etc/yum.repos.d/Censtos-Base.repo文件中所有的enabled=0替換為enabled=1,所有g(shù)pgcheck=0替換為gpgcheck=1
%s@\(enabled\|gpgcheck\)=0@\1=1@g
vim多文件功能:
vim FILE1 FILE2
在文件間切換:
:next 下一個
:prev 上一個
:first 第一個
:last 最后一個
退出所有文件:
:wqall 保存所有文件并退出
:wall
:qall
多寬口:
-o: 水平分隔窗口
-O:垂直分隔窗口
在窗口間切換:Ctrl+w,ARROW
注意:單個文件也可以分隔為多個窗口
ctrl +w,s: 水平分隔窗口
ctrl +w , v: 垂直分隔窗口
定制vim的工作特性:
注意:在末行模式下設(shè)定,僅對當(dāng)前vim進(jìn)程有效
永久有效:
全局:/etc/vimrc
用戶個人:~/.vimrc
1、行號
顯示:set number,簡寫為set nu
取消顯示:set nomber, set nonu
2、括號匹配高亮
匹配:set showmatch ,set sm
取消:set nosm
3、自動縮進(jìn)
啟用:set ai
禁用:set noai
4、高亮搜索
啟用:set hlsearch
禁用:set nohlsearch
5、語法高亮
啟用:syntax on
禁用:syntax off
6、忽略字符大小寫
啟用:set ic
禁用:set noic
獲取幫助:
:help
:help subject
作業(yè):如何設(shè)置tab建縮進(jìn)4個字符
練習(xí):寫一個腳本,完成如下功能
添加三個用戶;
求此三個用戶ID之和
#i/usr/bash
for((i=1;i<=3;i++));do
username="user$i"
useradd "$username"
echo "$username" | passwd --stdin $username
num=$(id -u "$username")
let sum=sum+$num
done
echo $sum
文件查找
在文件系統(tǒng)上查找符合條件的文件
實現(xiàn)工具:locate,find
locate命令:
依賴于事先構(gòu)建好的索引庫;
系統(tǒng)自動實現(xiàn)(周期性任務(wù));
手動更新數(shù)據(jù)庫(updatedb);
工作特性:
查找速度快;
模糊查找;
非實時查找;
locate [OPTION]... PATTERN...
-b:只匹配路徑中的基名
-c:統(tǒng)計出共有多少個符合條件的文件
-r:BRE正則表達(dá)式
注意:索引構(gòu)建果茶需要遍歷整個根文件系統(tǒng),及消耗系統(tǒng)資源
find命令:
實時查找工具,通過遍歷指定起始路徑下文件系統(tǒng)層級結(jié)構(gòu)完成文件查找
工作特性:
查找速度略慢
精確查找
實時查找
用法:
find [OPTIONS] [查找起始路徑] [查找條件][處理動作]
查找起始路徑:指定具體搜索目錄起始路徑;
查找條件:指定的查找標(biāo)準(zhǔn),可以根據(jù)文件名、大小、類型、權(quán)限等等標(biāo)準(zhǔn)進(jìn)行;默認(rèn)為找出指定路徑下的所有文件;
處理動作:對符合查找條件的文件做出操作,例如刪除等操作;默認(rèn)為輸出至標(biāo)準(zhǔn)輸出;
查找條件:
表達(dá)式:選項和測試
測試:結(jié)果通常為布爾型(“true”“false”)
根據(jù)文件名查找:
-name pattern
-iname pattern支持glob風(fēng)格的通配符
*,?,[],[^]
-regex pattern: 基于正則表達(dá)式模式查找文件,匹配是整個路徑,而非其名
根據(jù)文件從屬關(guān)系查找:
-user USERNAME: 查找屬主指定用戶的所有文件;
-group GRPNAME: 查找屬組指定組的所有文件;
-uid UID: 查找屬主為指定UID的所有文件;
-gid GID: 查找屬組指定GID的所有文件;
-nouser: 查找沒有屬主的文件
-nogroup: 查找沒有屬組的文件
根據(jù)文件的類型查找:
-type TYPE:
f: 普通文件
d: 目錄文件
l: 符號鏈接文件
b: 塊設(shè)備文件
c: 字符設(shè)備文件
p: 管道文件
s: 套接字文件
組合測試:
與:-a,默認(rèn)組合邏輯
或:-o
非:-not,!
練習(xí):
1、找出/tmp目錄下屬主為非root的所有文件
find /tmp -not -user root
2、找出/tmp目錄下文件名中不包含fstab字符串的文件
find /tmp -not -name "*fstab*"
3、找出/tmp目錄下屬主為非root,而且文件名不包含fstab字符串的文件
find /tmp -not -user root -a -not -iname "*fstab*"
find /tmp -not \( -user root -o -iname "*fstab*" \)
!A -a !B=!(A -o B)
!A -o !B=!(A -a B)
根據(jù)文件的大小查找:
-size [+|-]#UNIT
常用單位:k, M, G
#UNIT:(#-1,#]
-#UNIT:[0,#-1]
+#UNIT:(#,oo)
根據(jù)時間戳查找:
以“天”為單位
-atime[+| -]# 訪問時間
#:[#,#-1)
-#:(#,0]
+#:(oo,#-1)
-mtime 修改時間
-ctime 改變時間
以“分鐘”為單位
-amin
-mmin
-cmin
根據(jù)權(quán)限查找:
-perm[/|-]:
mode:精確權(quán)限匹配
/mode: 任何一類用戶(u,g,o)的權(quán)限中的任何一位(r,w,x)符合條件即可滿足;
9位權(quán)限直接存在“或”關(guān)系;
-mode: 每一類用戶(u,g,o)的權(quán)限中每一位(r,w,x)同時符合條件即滿足;
9位權(quán)限之間存在“與”關(guān)系;
處理動作:
-print: 輸出至標(biāo)準(zhǔn)輸出;默認(rèn)的動作;
-ls :類似于對查找到的文件執(zhí)行“l(fā)s-l”命令,輸出文件的詳細(xì)信息;
-delete : 刪除查找到的文件;
-fls /PATH/TO/SOMEFILE: 把查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \; :對查找到的每個文件執(zhí)行由COMMAND表是的命令;每次操作都由用戶確認(rèn)
-exec COMMAND {} \; :對查找到的每個文件執(zhí)行由COMMAND表是的命令;每次操作不需要用戶確認(rèn);
注意:find傳遞查找到的文件路徑至后面的命令時,是先查找出所有符合條件的文件路徑,并以此性傳遞給后面的命令;
但是有些命令不能接受過長的參數(shù),此時命令執(zhí)行會失敗;另一種方式可規(guī)避此問題:
linux下刪除亂碼文件名:
1. ls -i 列出文件的節(jié)點ID, 如: 123456789
2. find ./ -inum 123456789 -print -exec rm -rf {} \;
find | xargs COMMAND
課外作業(yè):學(xué)習(xí)xargs命令的用法
練習(xí):
1、查找/var目錄下屬主為root,且屬組為mail的所有文件或目錄
find /var -user root -a -group mail -ls
2、查找/usr目錄不屬于root,bin或hadoop的所有文件或目錄;用兩種方法
find /etc -not \( -user root -o -user bin -o -user hadoop \)
find /etc -not -user root -a -not -user bin -a -not -user hadoop
3、查找/etc目錄下最近一周內(nèi)其內(nèi)容修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄
find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
find /etc -mtime -7 -a not -user root -a -user hadoop
4、查找當(dāng)前系統(tǒng)上沒有屬主或?qū)俳M,且最近一周內(nèi)曾被訪問過的文件或目錄
find / -atime -7 -a -nouser -o -nogroup -ls
5、查找/etc目錄下大于1M且類型為普通文件的所有文件
find /etc -size +1M -a -type f -exec ls -lh {} \;
6、查找/etc目錄下所有用戶都沒有寫權(quán)限的文件
find /etc not -perm /222 -type f -ls
7、查找/etc目錄至少有一類用戶沒有執(zhí)行權(quán)限的文件
find /etc -not -perm -111 type f -ls
8、查找/etc目錄下,所有用戶都有執(zhí)行權(quán)限,且其他用戶有寫權(quán)限的所有文件
find /etc -perm -111 -a -perm -002 -type f -ls
find /etc -prem -113 -type f
Linux系統(tǒng)上的特殊權(quán)限
特殊權(quán)限:SUID ,SGID ,STICKY
安全上下文:
1、進(jìn)程以某用戶的身份運行;進(jìn)程是發(fā)起此進(jìn)程用戶的代理,因此以此用戶的身份和權(quán)限完成所有操作。
2、權(quán)限匹配模型:
(1)判斷進(jìn)程的屬主,是否為被訪的文件的屬主;如果是,則應(yīng)用屬主的權(quán)限;否則進(jìn)入第2步;
(2)判斷進(jìn)程的屬主,是否屬于被訪問的文件屬組;如果是,則應(yīng)用屬組的權(quán)限,否則進(jìn)入第3步
(3)應(yīng)用other的權(quán)限
SUID:
默認(rèn)情況下:用戶發(fā)起的進(jìn)程,進(jìn)程的屬主是其發(fā)起者;因此,其以發(fā)起者的身份在運行;
SUID的功用:用戶運行某程序時,如果此程序擁有SUID權(quán)限,那么程序運行為進(jìn)程時,進(jìn)程的屬主不是發(fā)起者,而是程序文件自己的屬主。
管理文件的SUID權(quán)限:
chmod u+|-s FILE...
展示位置:屬主的執(zhí)行權(quán)限位
如果屬主原本有執(zhí)行權(quán)限,顯示為小寫s;
否則,顯示為大寫s;
SGID:
功用:當(dāng)目錄屬組有寫權(quán)限,且有SGID權(quán)限時,那么所有屬于此目錄的屬組,且以屬組身份在此目錄中新建文件或者目錄時,新文件的屬組不是用戶的基本組,而是此目錄的屬組。
管理文件的SGID權(quán)限:
chmod g+|-s FILE...
展示位置:展示于屬組執(zhí)行權(quán)限位
如果屬主原本有執(zhí)行權(quán)限,顯示為小寫s;
否則,顯示為大寫s;
Stikcy:
功用:對于屬組或全局可寫的目錄,組內(nèi)的所有用戶或系統(tǒng)上的所有用戶對此目錄中都能創(chuàng)建新件或者刪除所有的已有文件;如果為此目錄設(shè)置Sticky權(quán)限,則每個用戶能創(chuàng)建新文件,且只能刪除自己的權(quán)限。
管理文件的Sticky權(quán)限:
chmod o+|-t FILE
展示位置:其它用戶的執(zhí)行位
如果其他用戶原本有執(zhí)行權(quán)限,顯示為小寫t;
否則,顯示為大寫T
系統(tǒng)上的/tmp和/var/tmp目錄默認(rèn)均有sticky權(quán)限;
管理特殊權(quán)限的另一方式:
suid sgid sticky 八進(jìn)制權(quán)限
0 0 0 0
0 0 1 1
0 1 0 2
0 1 1 3
1 0 0 4
1 0 1 5
1 1 0 6
1 1 1 7
基于八進(jìn)制方式賦權(quán)時,可于默認(rèn)的三位八進(jìn)制數(shù)字左側(cè)再加一位八進(jìn)制數(shù)字;
例如:chmod 1777
facl: file access control lists
文件的額外賦權(quán)機制:
在原有的u,g,o之外,另一層讓普通用戶能控制賦權(quán)給另外的用戶或組的賦權(quán)機制;
getfacl命令:
getfacl FILE....
user:USERNAME:MODE
group:GROUPNAME:MODE
setfacl命令:
賦權(quán)給用戶:
setfacl -m u:USERNAME:MODE FILE...
賦權(quán)給組:
setfacl -m u:GROUPNAME:MODE FILE...
撤銷賦權(quán):
setfacl -x u:USERNAME FILE...
setfacl -x g:GROUPNAME FILE...


