vim--find--bash---作業
Vim編輯器:
全屏幕的編輯器:VIM
vi:visual interface
sed:行編輯器
vi, viiMproved
vim:
模式化:
編輯模式:命令模式
輸入模式:
末行模式:
編輯模式 --> 輸入模式:
i:insert,
a:append,
o:new line,
I:行首
A:行尾
O:上方新建行
輸入模式 --> 編輯模式:
ESC
編輯模式 --> 末行模式:
:
末行模式 --> 編輯模式
ESC
打開vim:
#vim
#vim /PATH/TO/SOMEFILE
+#:#爲行號;
+/PATTERN
關閉vim:
:q
:q!
:wq
:x
ZZ:保存退出
光標跳轉:
字符間跳轉:
h:
l:
j:
k:
#COMMAND:
單詞間跳轉:
w:後單詞的詞首
e:當前或後一個單詞的詞尾;
b:當前或前一單詞的詞首;
#COMMAND:
行內跳轉:
^:跳轉至行首的第一個非空白字符;
0:跳轉至行首;
$:跳轉至行尾;
行間移動:
#G:
1G,gg
G
句間移動:
)
(
段落間移動:
}
{
編輯命令:
字符編輯:
x:刪除光標所在處的字符
#x:
xp:
r:替換光標所在處的字符;
刪除命令:
d:
d^
d$
d0
dw,de, db
dd:
#COMMAND
注意:刪除的內容會被vim編輯器保存至緩衝區當中;
粘貼:p (paste, put)
如果此複製或刪除的內容不是一個完整行
p:粘貼至當前光標所在處後面;
P:粘貼至當前光標所在處前面;
如果複製的內容是完整行(可不止一行)
p:粘貼至當前光標所在行下方;
P:行上方;
複製命令:y, yank
y
y$,y^, y0
ye,yw, yb
yy:複製行
#COMMAND
改變命令:c, change
c$,c^, c0
cb,ce, cw
cc:
#COMMAND
撤消此前的編輯操作:
u:undo
撤消此前編輯操作;
#u
Ctrl+r:
恢復此前的撤消操作
.: 重複前一個編輯操作
翻屏操作:
Ctrl+f:向後一屏;
Ctrl+b:向前一屏;
Ctrl+d:向後半屏
Ctrl+u:向前半屏
vim內建教程:
vimtutor
vim的末行模式
(1)地址,定界
:start_pos,end_pos
#:第#行;
#,#
#,+#
.:當前行
$:最後一行
%:全文,相當於1,$
/pat1/:第一次被此模式所匹配到的行;
#,/pat1/
/pat1/,/pat2/
後可跟編輯命令:
d,y
w,r
(2)查找
/PATTERN:向尾部進行
?PATTERN:向首部進行
n:與命令同方向
N:與命令反方向
(3)查找替換
s:在末行模式下,在地址定界的範圍內完成查找替換操作;
s/要查找的內容/替換爲的內容/修飾符
要查找的內容:可使用模式
替換爲的內容:不能使用模式,但可以使用後向引用符號,以引用前面模式中的分組括號所匹配到的內容;
\1,\2, ...
&:引用“要找的內容”匹配到的整個內容;
修飾符:
i:忽略大小寫
g:全局替換
/:用於分隔符,所以,要查找的內容或替換爲的內容中出現此符號,要使用\對其轉義,使用格式:\/
分隔符可替換爲其它字符:例如@,#等;
多文件模式:
vimFILE1 FILE2 ...
:next
:first
:prev
:last
:wqall
:q!all
多文件窗口分割:
vim-o|-O FILE1 FILE2 ...
Ctrl+w,ARROW
單文件窗口分割:
Ctrl+w,s: split, 水平分割
Ctrl+w,v: vertical, 垂直分割
定製vim的某些工作特性:
(1)行號
顯示:set nu
禁用:set nonu
(2)括號匹配
顯示:set sm
禁用:set nosm
(3)自動縮進:
setai
setnoai
(4)高亮搜索
sethlsearch
setnohlsearch
(5)語法着色
syntaxon
syntaxoff
(6)忽略字符大小寫
setic
setnoic
:help獲取幫助
:helpSUBJECT
特性設定的永久生效方式:
全局配置文件:/etc/vimrc
用戶個人的配置文件:~/.vimrc
find命令
文件查找:
在文件系統上查找符合條件的文件的過程;
文件查找:locate, find
locate:非實時查找工具;依賴於事先構建的索引;索引的構建是在系統較爲空閒時自動進行(週期性任務);手動更新此數據庫(updatedb);查找速度快;模糊查找;
find:實時查找;查找速度略慢;精確查找;
find命令:
find[OPTION]... [查找路徑] [查找條件] [處理動作]
查找路徑:默認爲當前路徑;
查找條件:指定的查找標準,可以根據文件名、大小、屬主屬組、類型等進行;默認爲找出指定路徑下的所有文件;
處理動作:對符合條件的文件做什麼操作;默認爲輸出至屏幕;
查找條件:
根據文件名進行查找:
-name "文件名稱": 支持使用glob;
*,?, []
-iname "文件名稱":不區分字符大小寫,支持使用glob;
-regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱;
根據屬主、屬組查找:
-userUSERNAME: 查找屬主爲指定用戶的文件;
-groupGROUPNAME:
-uidUserID: 查找文件的屬主指定uid的文件;
-gidGroupID:
-nouser:查找沒有屬主的文件;
-nogroup:查找沒有屬組的文件;
根據文件類型進行查找:
-typeTYPE
f:普通文件
d:目錄
l:符號鏈接
b:塊設備
c:字符設備
p:命名管道
s:套接字
組合查找條件:
與條件:-a
或條件:-o
非條件:-not, !
!A-o !B = !(A -a B)
!A-a !B = !(A -o B)
根據文件大小來查找:
-size[+|-]#UNIT
單位:k, M, G
#UNIT:(#-1,#]
+#UNIT:(#,+oo)
-#UNIT:[0,#-1]
根據時間戳:
以“天”爲單位
-atime[+|-]#
#:[#,#+1)
+#:[#+1,oo]
-#:[0,#)
-mtime
-ctime
以“分鐘”爲單位
-amin
-mmin
-cmin
根據權限:
-perm[/|-]MODE
MODE:精確權限匹配
/MODE:任何一類對象(u,g,o)的任何一位權限符合條件即可;隱含或條件;
/400
-MODE:爲每一類對象指定的每一位權限都必須同時存在方爲符合條件;隱含與條件;
處理動作:
-print:默認處理動作
-ls:類似於對查找到的每個文件做"ls -l"的操作;
-delete:刪除查找到的文件;
-fls/path/to/somefile:查找到的文件的詳細路徑信息保存至指定文件中;
-okCOMMAND {} \;
對每個文件執行指定的命令之前需要用戶事先確認;
-execCOMMAND {} \;
無需用戶確認;
Linux文件系統上的特殊權限
權限模型:
u,g, o
r,w, x
進程的安全上下文:
前提:進程有屬主(進程以哪個用戶的身份運行);文件有屬主和屬組;
(1)用戶是否能夠把某個可執行程序文件啓動爲進程,取決於用戶對程序文件是否擁有執行權限;
(2)程序啓動爲進程後,此進程的屬主爲當前用戶,也即進程的發起者;進程所屬的組,爲發起者的基本組;
(3)進程擁的訪問權限,取決其屬主的訪問權限:
(a)進程的屬主,同文件屬主,則應用文件屬主權限;
(b)進程的屬主,屬於文件的屬組,則應用文件屬組權限;
(c)則應用其它權限;
SUID:
(1)任何一個可執行程序文件能不能啓動爲進程:取決於發起者對程序文件是否有執行權限;
(2)啓動爲進程之後,其屬主不是發起者,而程序文件自己的屬主;這種機制即爲SUID;
權限設定:
chmodu+s FILE...
chmodu-s FILE...
注意:
s:屬主原本擁有x權限;
S:屬主原本無x權限;
SGID:
默認情況下,用戶創建文件時,其屬級爲此用戶所屬的基本組;
一旦某目錄被設定了SGID權限,則對此目錄擁有寫權限的用戶在此目錄中創建的文件所屬的組爲目錄的屬組,而非用戶的基本組;
權限設定:
chmodg+s FILE...
chmodg-s FILE...
Sticky:
對於一個多人可寫的目錄,此權限用於限制每個僅能刪除自己的文件;
權限設定
chmodo+t FILE...
chmodo-t FILE...
SUID,SGID, STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
chmod4777 FILE
chmod3755 DIR
bash環境配置:
配置文件,生效範圍劃分,存在兩類:
全局配置:
/etc/profile,/etc/profile.d/*.sh
/etc/bashrc
個人配置:
~/.bash_profile
~/.bashrc
按功能劃分,存在兩類:
profile類:爲交互式登錄的shell提供配置
/etc/profile,/etc/profile.d/*.sh
~/.bash_profile
功用:
(1)定義環境變量,例如PATH、PS1
(2)運行命令或腳本
bashrc類:爲非交互式登錄shell提供配置
/etc/bashrc
~/.bashrc
功用:
(1)定義命令別名;
(2)定義本地變量;
變量:內存空間,變量名
類型:
環境變量:作用範圍當前shell進程及其子進程
本地變量:作用範圍當前shell進程
局部變量:作用範圍僅爲當前shell進程中某代碼片斷(通常爲函數上下文)
位置變量:$1, $2
特殊變量:$?
變量定義方式:
bash內置變量:可直接調用,內置了許多環境變量,例如PATH等
自定義變量:
變量賦值:變量名=值
bash弱類型:
變量存儲數據時,默認均採用字符形式;任何變量可以不經聲明,直接引用;
120:24bits
120: 8bits
定義本地變量:
name=value
查看:set
定義環境變量:
exportname=value
declare-x name=value
查看:env, printenv, export
撤消變量:
unsetname
引用變量:
${name},$name
bash中的引用符號:
'':強引用,變量替換不會發生
"":弱引用
``:命令引用
shell登錄類型:
交互式登錄:
直接通過終端進行的登錄;
通過su -l Username命令實現的用戶切換;
非交互式登錄:
圖形界面下打開的命令行窗口;
執行腳本;
suUsername;
配置文件作用次序:
交互式登錄:
/etc/profile--> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc -->/etc/bashrc
非交互式登錄:
~/.bashrc--> /etc/bashrc --> /etc/profile.d/*.sh
編輯配置文件定義的新配置如何生效?
(1)重新登錄;
(2)讓當前shell進程去重新讀取指定的配置文件;
source/PATH/TO/SOMEFILE
./PATH/TO/SOMEFILE
注意:副作用
練習
練習一:
複製/etc/grub.cfg配置文件至/tmp目錄,用查找替換命令刪除/tmp/grub.cfg文件中的行首的空白字符;
[root@yy ~]# cp /etc/grub.conf /tmp [root@yy ~]# vim /tmp/grub.conf
在末行模式下輸入:%s/^[[:space:]]//g
練習二:
複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲/tmp/functions的每行開頭爲空白字符的行的行首加一個#; 原有空白字符保留;
[root@yy ~]# cp /etc/rc.d/init.d/functions /tmp/ [root@yy ~]# vim /tmp/functions
在末行模式下輸入:%s/^[[:spaceh:]]/#&/g
練習三:
替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log;
在末行模式下輸入:%s/\/etc\/sysconfig\/init/\var\/log/g
練習四:
刪除/tmp/functions文件中所以#開頭,且#後面至少跟了一個空白字符的行的行首#;
: %s/^#\([[:space:]]\+\)/\1/g
練習五:
查找/var目錄屬主爲root,且屬組爲mail的所有文件;
[root@yy var]# find /var -user root -groupmail -ls 1574102 4 drwxrwxr-x 2 root mail 4096 8月 18 06:14/var/spool/mail
練習六:
查找/usr目錄下不屬於root、bin或hadoop的所有文件;
[root@yy usr]# find /usr ! \( -user root -o-user bin -o -user hadoop \) -ls 1188182 12 -rwsr-xr-x 1 abrt abrt 10296 7月 25 00:08 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
練習七:
查找/etc目錄下最近一週內其內容修改過,且屬主不爲root或hadoop的所有文件;
[root@yy usr]# find /etc -mtime -7 -a ! \( -user root-o -user hadoop \) –ls
練習八:
查找當前系統上沒有屬主或屬組,且最近一週內曾被訪問過的所有文件;
[root@yy usr]# find / \( -nouser -o -nogroup \) -atime -7 –ls
練習九:
查找/etc目錄下大於20k且類型爲普通文件的所有文件;
[root@yy usr]# find /etc -type f -size +20k-ls 262821 28 -rw-r--r-- 1 root root 27223 11月 12 2010/etc/sound/events/gnome-2.soundlist 262187 628 -rw-r--r-- 1 root root 641020 10月 2 2013 /etc/services 264638 64 -rw-r--r-- 1 root root 62034 8月 17 22:18 /etc/ld.so.cache 263505 36 -rw-r--r-- 1 root root 34419 3月 4 2015 /etc/httpd/conf/httpd.conf 262210 44 -rw-r--r-- 1 root root 43591 9月 23 2011 /etc/mime.types 263198 48 -rw-r--r-- 1 root root 45281 3月 5 2013 /etc/bash_completion.d/git 264339 40 -rw-r--r-- 1 root root 39423 5月 26 2009/etc/bash_completion.d/subversion 264617 44 -rwxr-xr-x 1 root root 41966 8月 17 22:17 /etc/rc.d/init.d/vmware-tools
練習十:
查找/etc目錄下所有用戶都沒有寫權限的文件;
[root@yy usr]# find /etc ! -perm +222 -ls 263104 4 -r--r--r-- 1 root root 146 7月 24 19:09/etc/pam.d/cups 264381 4 -r--r----- 1 root root 4002 3月 2 2012/etc/sudoers 264190 4 -r-xr-xr-x 1 root root 3042 7月 24 12:04/etc/rc.d/init.d/lvm2-monitor 264189 4 -r-xr-xr-x 1 root root 2134 7月 24 12:04/etc/rc.d/init.d/lvm2-lvmetad 264188 4 -r-xr-xr-x 1 root root 1340 7月 24 12:04/etc/rc.d/init.d/blk-availability 262619 4 -r-------- 1 root root 45 8月 18 06:02/etc/openldap/certs/password 262491 196 -r--r--r-- 1 root root 198453 8月 18 06:01 /etc/pki/ca-trust/extracted/java/cacerts 262487 352 -r--r--r-- 1 root root 359773 8月 18 06:01 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt 262490 208 -r--r--r-- 1 root root 211626 8月 18 06:01 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem 262489 216 -r--r--r-- 1 root root 217510 8月 18 06:01 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem 262488 264 -r--r--r-- 1 root root 266702 8月 18 06:01/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem 263667 4 -r--r--r-- 1 root root 324 7月 24 00:14/etc/ld.so.conf.d/kernel-2.6.32-573.el6.x86_64.conf 262173 4 ---------- 1 root root 656 8月 18 06:14 /etc/gshadow- 264186 4 -r--r--r-- 1 root root 76 3月 24 10:00/etc/lvm/profile/thin-generic.profile 264185 4 -r--r--r-- 1 root root 828 7月 24 12:04/etc/lvm/profile/metadata_profile_template.profile 264187 4 -r--r--r-- 1 root root 80 3月 24 10:00/etc/lvm/profile/thin-performance.profile 264184 4 -r--r--r-- 1 root root 2249 7月 24 12:04/etc/lvm/profile/command_profile_template.profile 263102 4 -r--r--r-- 1 root root 460 7月 24 19:09/etc/dbus-1/system.d/cups.conf 263771 4 ---------- 1 root root 1066 9月 1 13:10 /etc/shadow 263773 4 ---------- 1 root root 667 9月 1 13:10 /etc/gshadow 262181 4 ---------- 1 root root 1037 8月 18 06:14/etc/shadow-
練習十一:
查找/etc目錄下至少有一類用戶沒有執行權限的文件;
[root@yy usr]# find /etc ! -perm -111 –ls
練習十二:
查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶擁有寫權限的文件;
[root@yy usr]# find /etc/init.d -perm -113-ls 262240 0 lrwxrwxrwx 1 root root 11 8月 18 06:00/etc/init.d -> rc.d/init.d
練習十三:
讓普通用戶能使用/tmp/cat去查看/etc/shadow文件;
[root@yy usr]# which cat /bin/cat [root@yy usr]# cp /bin/cat /tmp/ [root@yy usr]# chmod 4755 /tmp/cat
練習十四:
創建目錄/test/data,讓某組內普通用戶對其有寫權限,且創建的所有文件的屬組爲目錄所屬的組;此外,每個用戶僅能刪除自己的文件;
[root@yy usr]# mkdir -p /test/data [root@yy usr]# groupadd lll [root@yy usr]# chown :lll /test/data/ [root@yy usr]# chmod 3775 /test/data/ [root@yy usr]# useradd -G lll test1 [root@yy usr]# useradd -G lll test2 [root@yy usr]# useradd -G lll test3