Linux中vim編輯器使用、find命令和特殊權(quán)限介紹

2016年10月26日16:10:29 發(fā)表評(píng)論 3,634 ℃

vim編輯器

文本編輯器:

文本:純文本,ASCII text;Unicode

文本編輯種類(lèi):

行編輯器:sed

全屏編輯器:nano, vi

vi: Visual Interface

vim: Vi IMproved

vim:

基本模式:

編輯模式,命令模式

輸入模式:

莫行模式:

內(nèi)置的命令行接口;

打開(kāi)文件:

vim [options]


+#:打開(kāi)文件后,直接讓光標(biāo)處于第#行的行首

+/PATTERN:打開(kāi)文件后,直接讓光標(biāo)處于第一個(gè)被PATTERN匹配行的行首

模式轉(zhuǎn)換:

編輯模式:默認(rèn)模式

編輯模式-->輸出模式;

i: insert ,在光標(biāo)所在處輸入
a: append ,在光標(biāo)所在處后方輸入
o:在光標(biāo)所在處下方打開(kāi)的一個(gè)新行
I:在光標(biāo)所在行的行首輸入
A:在光標(biāo)所在處后方輸入
O:在光標(biāo)所在處的上方打開(kāi)一個(gè)新的行

輸入模式-->編輯模式

esc

編輯模式-->末行模式

末行模式--> 編輯模式

esc

關(guān)閉文件:

ZZ 保存并退出;

:q 退出

:q! 強(qiáng)制退出,不保存此前的編輯操作

:wq 保存退出

:x 保存并退出

:w /PATH/TO/SOMEFILE 

光標(biāo)跳轉(zhuǎn):

字符間跳轉(zhuǎn)

h:左

j:下

k:上

l : 右

# COMMAND:跳轉(zhuǎn)由# 指定的個(gè)數(shù)的字符

單詞間跳轉(zhuǎn)

w:下一個(gè)單詞的詞首

e: 當(dāng)前或后一個(gè)單詞的詞尾

b: 當(dāng)前或前一個(gè)單詞的詞首

行首行尾跳轉(zhuǎn)

^: 跳轉(zhuǎn)至行首的第一個(gè)非空白字符

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)所在處起始的#個(gè)字符

xp:交換光標(biāo)所在處的字符與其后面的字符的位置

替換命令(replace):

r:替換光標(biāo)所在處的字符

刪除命令

d:刪除命令,可結(jié)合光標(biāo)跳轉(zhuǎn)字符,實(shí)現(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)

編輯模式-->輸入模式,實(shí)現(xiàn)刪除操作

c$

c^

c0

cb

ce

cw

#COMMAND

cc:刪除光標(biāo)所在的行,并轉(zhuǎn)換為輸出模式

#cc

其他編輯操作:
可視化模式:

v: 按字符選定

V:按行選定

結(jié)合編輯命令使用d,c,y

撤銷(xiāo)(undo)操作:

u:撤銷(xiāo)此前的操作

#u: 撤銷(xiāo)此前的#個(gè)操作

恢復(fù)此前的撤銷(xiāo):

Ctrl +r

重復(fù)執(zhí)行前一個(gè)編輯操作:.

vim自帶的練習(xí)教程:vimtutor

vim末行模式:

內(nèi)建的命令行接口

(1)地址定界

:start_pos[,end_pos]

#: 特定的第#行,例如5即第5行

.:當(dāng)前行

$:最后一行

#,#:指定行范圍,左側(cè)為起始行,右測(cè)為結(jié)束行

#,+#:指定行范圍,左側(cè)為初始行絕對(duì)編號(hào),右側(cè)為相對(duì)左側(cè)行號(hào)的偏移量;例如:3,+7

1,$

%:全文

/pattern/:從光標(biāo)所在處初始向文件尾部第一次被模式所匹配到的行

/first/,$

/part1/,pat2/:從光標(biāo)所在處起始,第一次由part1匹配到的行開(kāi)始,至第一次由part2匹配到的行結(jié)束之間的所有行 ;

可同編輯命令一同使用,實(shí)現(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:下一個(gè),與命令方向相同

N:上一個(gè),與命令方向相反

(3)查找并替換

s: 末行模式的命令;使用格式;

s/要查找的內(nèi)容/替換為的內(nèi)容/修飾符

要查找的內(nèi)容:可使用正則表達(dá)式
替換為的內(nèi)容:不能使用正則表達(dá)式,但可以引用

如果“要查找的內(nèi)容”部分在模式中使用分組符好;再“替換為的內(nèi)容”中使用后向引用;

直接引用查找模式匹配到的全部文本;要使用&符號(hào)

修飾符:

i: 忽略大小寫(xiě)

g: 全局替換,意味著一行中如果匹配到多次,則均替換

可把分隔符替換為其它字符

s@@@

@###

示例:

1、所有以f開(kāi)頭的單詞替換為F

%s@\<f\([[:alpha:]]\+\)\>@F\1@g

2、所有以f或F開(kāi)頭的單詞后面加上TEST

%s@\<f[[:alpha:]]\+\>@&TEST@gi 

練習(xí):

1、復(fù)制/etc/grub.conf文件至/tmp目錄中,用查找替換命令刪除/tmp/grub.conf文件中以空白字符開(kāi)頭的行的行首的空白字符;

%s@^[[:space:]]/+@@

2、復(fù)制/etc/rc.d/init.d/functions文件移動(dòng)至/tmp目錄中,用查找替換命令為/tmp/functions文件的每個(gè)以空白字符開(kāi)頭的行的行首加上#

%s@^[[:space:]]@#&@g

%s@^[[:space:]]\+[[:space:]]@#&@g

3、為/tmp/grub.conf文件的前三行的行首加上#號(hào)

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 下一個(gè)

:prev 上一個(gè)

:first 第一個(gè)

:last 最后一個(gè)

退出所有文件:

:wqall 保存所有文件并退出

:wall

:qall

多寬口:

-o: 水平分隔窗口

-O:垂直分隔窗口

在窗口間切換:Ctrl+w,ARROW

注意:?jiǎn)蝹€(gè)文件也可以分隔為多個(gè)窗口

ctrl +w,s: 水平分隔窗口

ctrl +w , v: 垂直分隔窗口

定制vim的工作特性:

注意:在末行模式下設(shè)定,僅對(duì)當(dāng)前vim進(jìn)程有效

永久有效:

全局:/etc/vimrc

用戶(hù)個(gè)人:~/.vimrc

1、行號(hào)

顯示:set number,簡(jiǎn)寫(xiě)為set nu

取消顯示:set nomber, set nonu

2、括號(hào)匹配高亮

匹配:set showmatch ,set sm

取消:set nosm

3、自動(dòng)縮進(jìn)

啟用:set ai

禁用:set noai

4、高亮搜索

啟用:set hlsearch

禁用:set nohlsearch

5、語(yǔ)法高亮

啟用:syntax on

禁用:syntax off

6、忽略字符大小寫(xiě)

啟用:set ic

禁用:set noic

獲取幫助:

:help

:help subject

作業(yè):如何設(shè)置tab建縮進(jìn)4個(gè)字符

練習(xí):寫(xiě)一個(gè)腳本,完成如下功能

添加三個(gè)用戶(hù);

求此三個(gè)用戶(hù)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)上查找符合條件的文件

實(shí)現(xiàn)工具:locate,find

locate命令:

依賴(lài)于事先構(gòu)建好的索引庫(kù);

系統(tǒng)自動(dòng)實(shí)現(xiàn)(周期性任務(wù));

手動(dòng)更新數(shù)據(jù)庫(kù)(updatedb);

工作特性:

查找速度快;

模糊查找;

非實(shí)時(shí)查找;

locate [OPTION]... PATTERN...

-b:只匹配路徑中的基名

-c:統(tǒng)計(jì)出共有多少個(gè)符合條件的文件

-r:BRE正則表達(dá)式

注意:索引構(gòu)建果茶需要遍歷整個(gè)根文件系統(tǒng),及消耗系統(tǒng)資源

find命令:

實(shí)時(shí)查找工具,通過(guò)遍歷指定起始路徑下文件系統(tǒng)層級(jí)結(jié)構(gòu)完成文件查找

工作特性:

查找速度略慢

精確查找

實(shí)時(shí)查找

用法:

find [OPTIONS] [查找起始路徑] [查找條件][處理動(dòng)作]

查找起始路徑:指定具體搜索目錄起始路徑;

查找條件:指定的查找標(biāo)準(zhǔn),可以根據(jù)文件名、大小、類(lèi)型、權(quán)限等等標(biāo)準(zhǔn)進(jìn)行;默認(rèn)為找出指定路徑下的所有文件;

處理動(dòng)作:對(duì)符合查找條件的文件做出操作,例如刪除等操作;默認(rèn)為輸出至標(biāo)準(zhǔn)輸出;

查找條件:

表達(dá)式:選項(xiàng)和測(cè)試

測(cè)試:結(jié)果通常為布爾型(“true”“false”)

根據(jù)文件名查找:

-name pattern
-iname pattern

支持glob風(fēng)格的通配符

*,?,[],[^]

-regex pattern: 基于正則表達(dá)式模式查找文件,匹配是整個(gè)路徑,而非其名

根據(jù)文件從屬關(guān)系查找:

-user USERNAME: 查找屬主指定用戶(hù)的所有文件;

-group GRPNAME: 查找屬組指定組的所有文件;

-uid UID: 查找屬主為指定UID的所有文件;

-gid GID: 查找屬組指定GID的所有文件;

-nouser: 查找沒(méi)有屬主的文件

-nogroup: 查找沒(méi)有屬組的文件

根據(jù)文件的類(lèi)型查找:

-type TYPE:

f: 普通文件

d: 目錄文件

l: 符號(hào)鏈接文件

b: 塊設(shè)備文件

c: 字符設(shè)備文件

p: 管道文件

s: 套接字文件

組合測(cè)試:

與:-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ù)時(shí)間戳查找:

以“天”為單位

-atime[+| -]# 訪(fǎng)問(wèn)時(shí)間

#:[#,#-1)

-#:(#,0]

+#:(oo,#-1)

-mtime 修改時(shí)間

-ctime 改變時(shí)間

以“分鐘”為單位

-amin

-mmin

-cmin

根據(jù)權(quán)限查找:

-perm[/|-]:

mode:精確權(quán)限匹配

/mode: 任何一類(lèi)用戶(hù)(u,g,o)的權(quán)限中的任何一位(r,w,x)符合條件即可滿(mǎn)足;

9位權(quán)限直接存在“或”關(guān)系;

-mode: 每一類(lèi)用戶(hù)(u,g,o)的權(quán)限中每一位(r,w,x)同時(shí)符合條件即滿(mǎn)足;

9位權(quán)限之間存在“與”關(guān)系;

處理動(dòng)作:

-print: 輸出至標(biāo)準(zhǔn)輸出;默認(rèn)的動(dòng)作;

-ls :類(lèi)似于對(duì)查找到的文件執(zhí)行“l(fā)s-l”命令,輸出文件的詳細(xì)信息;

-delete : 刪除查找到的文件;

-fls /PATH/TO/SOMEFILE: 把查找到的所有文件的長(zhǎng)格式信息保存至指定文件中

-ok COMMAND {} \;  :對(duì)查找到的每個(gè)文件執(zhí)行由COMMAND表是的命令;每次操作都由用戶(hù)確認(rèn)

-exec COMMAND {} \;  :對(duì)查找到的每個(gè)文件執(zhí)行由COMMAND表是的命令;每次操作不需要用戶(hù)確認(rèn);

注意:find傳遞查找到的文件路徑至后面的命令時(shí),是先查找出所有符合條件的文件路徑,并以此性傳遞給后面的命令;

但是有些命令不能接受過(guò)長(zhǎng)的參數(shù),此時(shí)命令執(zhí)行會(huì)失敗;另一種方式可規(guī)避此問(wèn)題:

linux下刪除亂碼文件名: 

1. ls -i 列出文件的節(jié)點(diǎn)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)容修改過(guò),且屬主不是root用戶(hù)也不是hadoop用戶(hù)的文件或目錄

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)上沒(méi)有屬主或?qū)俳M,且最近一周內(nèi)曾被訪(fǎng)問(wèn)過(guò)的文件或目錄

find / -atime -7 -a -nouser -o -nogroup -ls

5、查找/etc目錄下大于1M且類(lèi)型為普通文件的所有文件

find /etc -size +1M -a -type f -exec ls -lh {} \;

6、查找/etc目錄下所有用戶(hù)都沒(méi)有寫(xiě)權(quán)限的文件

find /etc  not -perm /222 -type f  -ls

7、查找/etc目錄至少有一類(lèi)用戶(hù)沒(méi)有執(zhí)行權(quán)限的文件

find /etc -not  -perm -111  type f  -ls

8、查找/etc目錄下,所有用戶(hù)都有執(zhí)行權(quán)限,且其他用戶(hù)有寫(xiě)權(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)程以某用戶(hù)的身份運(yùn)行;進(jìn)程是發(fā)起此進(jìn)程用戶(hù)的代理,因此以此用戶(hù)的身份和權(quán)限完成所有操作。

2、權(quán)限匹配模型:

(1)判斷進(jìn)程的屬主,是否為被訪(fǎng)的文件的屬主;如果是,則應(yīng)用屬主的權(quán)限;否則進(jìn)入第2步;

(2)判斷進(jìn)程的屬主,是否屬于被訪(fǎng)問(wèn)的文件屬組;如果是,則應(yīng)用屬組的權(quán)限,否則進(jìn)入第3步

(3)應(yīng)用other的權(quán)限

SUID:

默認(rèn)情況下:用戶(hù)發(fā)起的進(jìn)程,進(jìn)程的屬主是其發(fā)起者;因此,其以發(fā)起者的身份在運(yùn)行;

SUID的功用:用戶(hù)運(yùn)行某程序時(shí),如果此程序擁有SUID權(quán)限,那么程序運(yùn)行為進(jìn)程時(shí),進(jìn)程的屬主不是發(fā)起者,而是程序文件自己的屬主。

管理文件的SUID權(quán)限:

chmod u+|-s FILE...

展示位置:屬主的執(zhí)行權(quán)限位

如果屬主原本有執(zhí)行權(quán)限,顯示為小寫(xiě)s;

否則,顯示為大寫(xiě)s;

SGID:

功用:當(dāng)目錄屬組有寫(xiě)權(quán)限,且有SGID權(quán)限時(shí),那么所有屬于此目錄的屬組,且以屬組身份在此目錄中新建文件或者目錄時(shí),新文件的屬組不是用戶(hù)的基本組,而是此目錄的屬組。

管理文件的SGID權(quán)限:

chmod g+|-s FILE...

展示位置:展示于屬組執(zhí)行權(quán)限位

如果屬主原本有執(zhí)行權(quán)限,顯示為小寫(xiě)s;

否則,顯示為大寫(xiě)s;

Stikcy:

功用:對(duì)于屬組或全局可寫(xiě)的目錄,組內(nèi)的所有用戶(hù)或系統(tǒng)上的所有用戶(hù)對(duì)此目錄中都能創(chuàng)建新件或者刪除所有的已有文件;如果為此目錄設(shè)置Sticky權(quán)限,則每個(gè)用戶(hù)能創(chuàng)建新文件,且只能刪除自己的權(quán)限。

管理文件的Sticky權(quán)限:

chmod o+|-t FILE

展示位置:其它用戶(hù)的執(zhí)行位

如果其他用戶(hù)原本有執(zhí)行權(quán)限,顯示為小寫(xiě)t;

否則,顯示為大寫(xiě)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)時(shí),可于默認(rèn)的三位八進(jìn)制數(shù)字左側(cè)再加一位八進(jìn)制數(shù)字;

例如:chmod 1777

facl: file access control lists

文件的額外賦權(quán)機(jī)制:

在原有的u,g,o之外,另一層讓普通用戶(hù)能控制賦權(quán)給另外的用戶(hù)或組的賦權(quán)機(jī)制;

getfacl命令:

getfacl FILE....

user:USERNAME:MODE

group:GROUPNAME:MODE

setfacl命令:

賦權(quán)給用戶(hù):

setfacl -m u:USERNAME:MODE FILE...

賦權(quán)給組:

setfacl -m u:GROUPNAME:MODE FILE...

撤銷(xiāo)賦權(quán):

setfacl -x u:USERNAME FILE...

setfacl -x g:GROUPNAME FILE...

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫(kù)、COS、CDN、短信等云產(chǎn)品特惠熱賣(mài)中

發(fā)表評(píng)論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: