天天看點

find,vim,bash環境變量,檔案權限

Linux中一切皆檔案,是以文本檔案的編輯就是運維工作的常事,熟練使用一款文本編輯器就非常重要,linux中有nano文本編輯器,現在學習更為強大的Vim文本編輯器

全螢幕的編輯器:VIM vi: visual interface

sed:行編輯器

vi, vi iMproved

vim:

模式化:

編輯模式:指令模式

輸入模式:

末行模式:

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

i: insert,

a:append,

o:new line,

I: 行首

A:行尾

O:上方建立行

輸入模式 --> 編輯模式: ESC     編輯模式 --> 末行模式:   用 :     末行模式 --> 編輯模式    ESC

打開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: 複制行

改變指令:c, change

c$, c^, c0

cb, ce, cw

cc:

撤消此前的編輯操作:

u: undo

撤消此前編輯操作;

#u

Ctrl+r:

恢複此前的撤消操作

.: 重複前一個編輯操作

翻屏操作:

Ctrl+f: 向後一屏;

Ctrl+b:向前一屏;

Ctrl+d: 向後半屏

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: 全局替換

                            /:用于分隔符,是以,要查找的内容或替換為的内容中出現此符号,要使用\對其轉義,使用格式:\/

                                   分隔符可替換為其它字元:例如@,#等;

       多檔案模式:

              vim FILE1 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) 行号

                     顯示:setnu

                     禁用:setnonu

              (2) 括号比對

                     顯示:setsm

                     禁用:setnosm

              (3) 自動縮進:

                     set ai

                     set noai

              (4) 高亮搜尋

                     set hlsearch

                     set nohlsearch

              (5) 文法着色

                     syntax on

                     syntax off

              (6) 忽略字元大小寫

                     set ic

                     set noic

              :help 擷取幫助

              :help SUBJECT

       特性設定的永久生效方式:

              全局配置檔案:/etc/vimrc

              使用者個人的配置檔案:~/.vimrc

Find文本檔案查找指令:

       在檔案系統上查找符合條件的檔案的過程;

       檔案查找:locate, find

              locate: 非實時查找工具;依賴于事先建構的索引;索引的建構是在系統較為空閑時自動進行(周期性任務);手動更新此資料庫(updatedb);查找速度快;模糊查找;

              find:實時查找;查找速度略慢;精确查找;

       find指令:

              find [OPTION]... [查找路徑][查找條件] [處理動作]

                     查找路徑:預設為目前路徑;

                     查找條件:指定的查找标準,可以根據檔案名、大小、屬主屬組、類型等進行;預設為找出指定路徑下的所有檔案;

                     處理動作:對符合條件的檔案做什麼操作;預設為輸出至螢幕;

              查找條件:

                     根據檔案名進行查找:

                             -name "檔案名稱": 支援使用glob;

                                   *,?, []

                             -iname "檔案名稱":不區分字元大小寫,支援使用glob;

                             -regex "PATTERN":以PATTERN比對整個檔案路徑字元串,而不僅僅是檔案名稱;

                     根據屬主、屬組查找:

                            -user USERNAME: 查找屬主為指定使用者的檔案;

                            -group GROUPNAME:

                            -uid UserID: 查找檔案的屬主指定uid的檔案;

                            -gid GroupID:

                            -nouser: 查找沒有屬主的檔案;

                            -nogroup:查找沒有屬組的檔案;

                     根據檔案類型進行查找:

                            -type TYPE

                                   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:查找到的檔案的詳細路徑資訊儲存至指定檔案中;

                     -ok COMMAND {} \;

                            對每個檔案執行指定的指令之前需要使用者事先确認;

                     -exec COMMAND {} \;

                            無需使用者确認;

bash環境配置:

       配置檔案,生效範圍劃分,存在兩類:

              全局配置:

                     /etc/profile,/etc/profile.d/*.sh

                     /etc/bashrc

              個人配置:

                     ~/.bash_profile

                     ~/.bashrc

       按功能劃分,存在兩類:

              profile類:為互動式登入的shell提供配置

                     功用:

                            (1) 定義環境變量,例如PATH、PS1

                            (2) 運作指令或腳本

              bashrc類:為非互動式登入shell提供配置

                            (1) 定義指令别名;

                            (2) 定義本地變量;

       變量:記憶體空間,變量名

              類型:

                     環境變量:作用範圍目前shell程序及其子程序

                     本地變量:作用範圍目前shell程序

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

                     位置變量:$1,$2

                     特殊變量:$?

              變量定義方式:

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

                     自定義變量:

                            變量指派:變量名=值

              bash弱類型:

                     變量存儲資料時,預設均采用字元形式;任何變量可以不經聲明,直接引用;

                            120:24bits

                            120: 8bits

       定義本地變量:

              name=value

              檢視:set

       定義環境變量:

              export name=value

              declare -x name=value

              檢視:env, printenv,export

          撤消變量:

              unset name

       引用變量:

              ${name}, $name

       bash中的引用符号:

              '':強引用,變量替換不會發生

              "":弱引用

              ``: 指令引用

       shell登入類型:

              互動式登入:

                     直接通過終端進行的登入;

                     通過su-l Username指令實作的使用者切換;

              非互動式登入:

                     圖形界面下打開的指令行視窗;

                     執行腳本;

                     su Username;

       配置檔案作用次序:

                     /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/SOM

Linux檔案系統上的特殊權限

              權限模型:

              u, g, o

                     r, w, x

       程序的安全上下文:

              前提:程序有屬主(程序以哪個使用者的身份運作);檔案有屬主和屬組;

              (1) 使用者是否能夠把某個可執行程式檔案啟動為程序,取決于使用者對程式檔案是否擁有執行權限;

              (2) 程式啟動為程序後,此程序的屬主為目前使用者,也即程序的發起者;程序所屬的組,為發起者的基本組;

              (3) 程序擁的通路權限,取決其屬主的通路權限:

                     (a) 程序的屬主,同檔案屬主,則應用檔案屬主權限;

                     (b) 程序的屬主,屬于檔案的屬組,則應用檔案屬組權限;

                     (c) 則應用其它權限;

       SUID:

              (1) 任何一個可執行程式檔案能不能啟動為程序:取決于發起者對程式檔案是否有執行權限;

              (2) 啟動為程序之後,其屬主不是發起者,而程式檔案自己的屬主;這種機制即為SUID;

              權限設定:

                     chmod u+s FILE...

                     chmod u-s FILE...

              注意:

                     s: 屬主原本擁有x權限;

                     S: 屬主原本無x權限;

       SGID:

              預設情況下,使用者建立檔案時,其屬級為此使用者所屬的基本組;

              一旦某目錄被設定了SGID權限,則對此目錄擁有寫權限的使用者在此目錄中建立的檔案所屬的組為目錄的屬組,而非使用者的基本組;

                     chmod g+s FILE...

                     chmod g-s FILE...

       Sticky:

              對于一個多人可寫的目錄,此權限用于限制每個僅能删除自己的檔案;

              權限設定

                     chmod o+t FILE...

                     chmod o-t FILE...

       SUID, SGID, STICKY

              000

              001

              010

              011

              100

              101

              110

              111

              chmod 4777 FILE

              chmod 3755 DIR

linux磁盤和檔案系統管理:

fdisk工具的使用:

              最多支援在一塊硬碟上的15個分區;

              分區管理子指令:

                     p: 顯示

                     n: 建立

                     d: 删除

                     t: 修改分區ID

                     l: 列出所有支援ID類型

                     w: 儲存退出

                     q: 放棄修改并退出

                     m: 擷取幫助

              建立完成之後,檢視核心是否已經識别新的分區:

                     # cat /proc/partitions

Linux檔案系統管理:

       mkfs, mkfs -t type = mkfs.type

       ext:mke2fs

       建立檔案系統:

              mke2fs [OPTION]... DEVICE

                     -t    {ext2|ext3|ext4}

                     -b {1024|2048|4096}

                     -L 'LABEL'

                     -j: mke2fs -t ext3

                     -i #:

                     -N #:

                     -m #: 預留磁盤空間占據多大百分比的空間為後期管理使用;

                     -O FEATURE[,...]

                            -O ^FEATURE:關閉此特性

                            has_journal

       檔案系統屬性檢視及調整工具:

              e2label

                     e2lable DEVICE [LABEL]

              tune2fs

                     顯示ext系列檔案系統的屬性,或調整其屬性;

                     -l:顯示超級塊中的資訊;顯示整個檔案的屬性及布局等相關資訊;

                     -L 'LABEL':修改卷标;

                     -m #: 調整預留給管理者的管理空間百分比;

                     -j: ext2 --> ext3

                     -O:檔案系統屬性的啟動或關閉

                     -o:檔案系統預設挂載選項的啟用或關閉

              dumpe2fs:

                     -h: 僅顯示超級塊資訊;

       檔案系統檢測:

              fsck: Filesystem check

                     fsck -t type

                     fsck.type

                            -a: 自動修複錯誤

                            -r: 互動式修複錯誤

                            -f: 強制檢測

              e2fsck:ext系列檔案系統專用的檢測修複工具;

                     -y: 自動回答為“yes”

                     -f:force

練習:

vim的練習

1.複制/etc/grub.cfg配置檔案至/tmp目錄,用查找替換指令删除/tmp/grub.cfg檔案中的行首的空白字元

# cp /etc/grub.conf /tmp

# vim /tmp/grub.conf

# :%s/^[[:space:]]*//g

2.複制/etc/rc.d/init.d/functions檔案至/tmp目錄,用查找替換指令為/tmp/functions的每行開頭為空白字元的行的行首加一個#; 原有空白字元保留

# cp/etc/rc.d/init.d/functions /tmp

#  vim /tmp/functions

# :%s/^[[:space:]]/#/g

3.替換/tmp/functions檔案中的/etc/sysconfig/init為/var/log

   #

:%s/\/etc\/sysconfig\/init/\/var\/log/g

4.删除/tmp/functions檔案中是以#開頭,且#後面至少跟了一個空白字元的行的行首#

   # : %s/^#[[:space:]]\{1,\}//g

Find指令練習:

1.查找/var目錄屬主為root,且屬組為mail的所有檔案

#find /var -user root -group mail –ls

2.查找/usr目錄下不屬于root、bin或hadoop的所有檔案

# find /usr ! -user root ! -user bin ! -user hadoop –ls

3.查找/etc目錄下最近一周内其内容修改過,且屬主不為root或hadoop的所有檔案

#find /etc/  ! (-user root -a -user hadoop)  -mtime -7  -ls

4.查找目前系統上沒有屬主或屬組,且最近一周内曾被通路過的所有檔案

#find/ -nouser –o –nogroup  -mtime -7

    5.查找/etc目錄下大于20k且類型為普通檔案的所有檔案

#

find /etc -size +20k -type f –ls

     6.查找/etc目錄下所有使用者都沒有寫權限的檔案

#find/etc / –not –perm  /222 –ls

7.查找/etc目錄下至少有一類使用者沒有執行權限的檔案

# find/etc / ! –perm -111 –ls

       8.查找/etc/init.d目錄下,所有使用者都有執行權限,且其它使用者擁有寫權限的檔案

# find/etc/init.d/ -perm –u+x,-o+w –ls

Chmod指令:

9.讓普通使用者能使用/tmp/cat去檢視/etc/shadow檔案

# chmodu+s /tmp/cat

10.建立目錄/test/data,讓某組内普通使用者對其有寫權限,且建立的所有檔案的屬組為目錄所屬的組;此外,每個使用者僅能删除自己的檔案;

# chmod  g+xs,o+t  test/data