vim--find--bash---作業

vim--find--bash---作業

 

Vim編輯器

      

       全屏幕的編輯器:VIM

              vi:visual interface

 

       sed:行編輯器

 

       vi, viiMproved

 

       vim:

              模式化:

                     編輯模式:命令模式

                     輸入模式:

                     末行模式:

 

              編輯模式 --> 輸入模式:

                     i:insert,

                     aappend,

                     onew 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)定義環境變量,例如PATHPS1

                            (2)運行命令或腳本

 

              bashrc類:爲非交互式登錄shell提供配置

                     /etc/bashrc

                     ~/.bashrc

 

                     功用:

                            (1)定義命令別名;

                            (2)定義本地變量;

 

       變量:內存空間,變量名

              類型:

                     環境變量:作用範圍當前shell進程及其子進程

                     本地變量:作用範圍當前shell進程

                     局部變量:作用範圍僅爲當前shell進程中某代碼片斷(通常爲函數上下文)

 

                     位置變量:$1, $2

                     特殊變量:$?

 

              變量定義方式:

                     bash內置變量:可直接調用,內置了許多環境變量,例如PATH

                     自定義變量:

                            變量賦值:變量名=

 

              bash弱類型:

                     變量存儲數據時,默認均採用字符形式;任何變量可以不經聲明,直接引用;

 

                            12024bits

                            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

wKiom1XlP52RB_G6AANis1lptUk251.jpg

練習二:

複製/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

wKiom1XlQ8_RP_NaAAKJ3TqWNXY525.jpg

練習三:

替換/tmp/functions文件中的/etc/sysconfig/init/var/log

在末行模式下輸入:%s/\/etc\/sysconfig\/init/\var\/log/g

wKiom1XlQUaAnn-jAAKvxY_MuWM738.jpg

練習四:

刪除/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目錄下不屬於rootbinhadoop的所有文件;

[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目錄下最近一週內其內容修改過,且屬主不爲roothadoop的所有文件;

[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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章