今天我給大家帶來的是VIM,find,指令的使用和bash環境變量的一些内容。
-
vim指令
vi指令是UNIX作業系統和類UNIX作業系統中最通用的全屏純文字編輯器。Linux中的vi編輯器叫vim,它是vi的增強版,與vi編輯器完全相容,而且實作了很多增強功能。
vi編輯器有三種模式:輸入模式,指令模式(編輯模式)和末行模式,(預設打開指令模式)
vim、find 的使用bash環境變量
文法: vi(選項)(參數)
參數解釋:
- Ctrl+u:向檔案首翻半屏;
- Ctrl+d:向檔案尾翻半屏;
- Ctrl+f:向檔案尾翻一屏;
- Ctrl+b:向檔案首翻一屏;
- Esc:從編輯模式切換到指令模式;
- ZZ:指令模式下儲存目前檔案所做的修改後退出vi;
- :行号:光标跳轉到指定行的行首;
- :$:光标跳轉到最後一行的行首;
- x或X:删除一個字元,x删除光标後的,而X删除光标前的;
- D:删除從目前光标到光标所在行尾的全部字元;
- dd:删除光标行正行内容;
- ndd:删除目前行及其後n-1行;
- nyy:将目前行及其下n行的内容儲存到寄存器?中,其中?為一個字母,n為一個數字;
- p:粘貼文本操作,用于将緩存區的内容粘貼到目前光标所在位置的下方;
- P:粘貼文本操作,用于将緩存區的内容粘貼到目前光标所在位置的上方;
- /字元串:文本查找操作,用于從目前光标所在位置開始向檔案尾部查找指定字元串的内容,查找的字元串會被加亮顯示;
- ?name:文本查找操作,用于從目前光标所在位置開始向檔案頭部查找指定字元串的内容,查找的字元串會被加亮顯示;
- a,bs/F/T:替換文本操作,用于在第a行到第b行之間,将F字元串換成T字元串。其中,“s/”表示進行替換操作;
- a:在目前字元後添加文本;
- A:在行末添加文本;
- i:在目前字元前插入文本;
- I:在行首插入文本;
- o:在目前行後面插入一空行;
- O:在目前行前面插入一空行;
- :wq:在指令模式下,執行存盤退出操作;
- :w:在指令模式下,執行存盤操作;
- :w!:在指令模式下,執行強制存盤操作;
- :q:在指令模式下,執行退出vi操作;
- :q!:在指令模式下,執行強制退出vi操作;
- :e檔案名:在指令模式下,打開并編輯指定名稱的檔案;
- :n:在指令模式下,如果同時打開多個檔案,則繼續編輯下一個檔案;
- :f:在指令模式下,用于顯示目前的檔案名、光标所在行的行号以及顯示比例;
- :set number:在指令模式下,用于在最左端顯示行号;
- :set nonumber:在指令模式下,用于在最左端不顯示行号;
-
find指令
find和localte都查找工具他們的差別:
locate: 非實時查找工具;依賴于事先建構的索引;索引的建構是在系統較為空閑時自動進行(周期性任務);手動更新此資料庫(updatedb);查找速度快;模糊查找;
locate -i 忽略大小寫
find:實時查找;查找速度略慢;精确查找;用來在指定目錄下查找檔案
find 文法
find [OPTION]... [查找路徑] [查找條件] [處理動作]
查找路徑:預設為目前路徑;
查找條件:指定的查找标準,可以根據檔案名、大小、屬主屬組、類型等進行;預設為找出指定路徑下的所有檔案;
處理動作:對符合條件的檔案做什麼操作;預設為輸出至螢幕;
查找條件介紹:
- 根據檔案名進行查找:
-name "檔案名稱": 支援使用glob;
-iname "檔案名稱":不區分字元大小寫,支援使用glob;
-regex "PATTERN":以PATTERN比對整個檔案路徑字元串,而不僅僅是檔案名稱;
- 根據屬主、屬組查找:
-user USERNAME: 查找屬主為指定使用者的檔案;
-group GROUPNAME: 根據組查找
-uid UserID: 查找檔案的屬主指定uid的檔案;
-gid GroupID: 查找檔案屬組GID的檔案
-nouser: 查找沒有屬主的檔案;
-nogroup:查找沒有屬組的檔案;
- 根據檔案類型進行查找:
指令參數:-type TYPE
f: 普通檔案
d: 目錄
l: 符号連結
b: 塊裝置
c: 字元裝置
p: 命名管道
s: 套接字
- 根據組合查找條件:
與條件:-a
或條件:-o
非條件:-not, !
- 根據檔案大小來查找:
-size [+|-]#UNIT
機關:k, M, G
下面是5大小的檔案的各種解釋:
- 根據時間戳:
以“天”為機關
-atime 用、戶最近一次通路時間。
-mtime 檔案最後一次修改時間。
-ctime 檔案屬性(例如權限等)最後一次修改時間。
以“分鐘”為機關
-amin
-mmin
-cmin
下面是時間的表示方法:
- 根據檔案的權限:
-perm [/|-]MODE
MODE: 精确權限比對
/MODE:任何一類對象(u,g,o)的任何一位權限符合條件即可;隐含或條件;
-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提供配置
/etc/profile, /etc/profile.d/*.sh
~/.bash_profile
功用和作用:
(1) 定義環境變量,例如PATH、PS1
(2) 運作指令或腳本
bashrc類:為非互動式登入shell提供配置
/etc/bashrc
~/.bashrc
(1) 定義指令别名;alias
(2) 定義本地變量;
環境變量:作用範圍目前shell程序及其子程序
本地變量:作用範圍目前shell程序
定義本地變量:
name=value
檢視:set
定義環境變量:
export name=value
declare -x name=value x 指定的變量會成為環境變量
檢視:env, printenv, export
撤消變量:unset name
引用變量:${name}, $name
bash中的引用符号:
'': 強引用,變量替換不會發生
"":弱引用
``: 指令引用
shell登入類型:
互動式登入:
直接通過終端進行的登入;
通過su -l Username指令實作的使用者切換;
非互動式登入:
圖形界面下打開的指令行視窗;
執行腳本;
su Username;
最重要的是配置檔案作用次序:
su -l username/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
su username~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
編輯配置檔案定義的新配置如何生效?
(1) 重新登入;
(2) 讓目前shell程序去重新讀取指定的配置檔案;
source /PATH/TO/SOMEFILE
. /PATH/TO/SOMEFILE
下面是一些練習試題:
- 複制/etc/grub.cfg配置檔案至/tmp目錄,用查找替換指令删除/tmp/grub.cfg檔案中的行首的空白字元;
%s/^[[:blank:]]/#/g
- 複制/etc/rc.d/init.d/functions檔案至/tmp目錄,用查找替換指令為/tmp/functions的每行開頭為空白字元的行的行首加一個#; 原有空白字元保留;
%s/^[[:blank:]]/#&/g
- 替換/tmp/functions檔案中的/etc/sysconfig/init為/var/log;
%s#/etc/sysconfig/init#/var/log#g
- 删除/tmp/functions檔案中是以#開頭,且#後面至少跟了一個空白字元的行的行首#;
%s/^#\([[:space:]]\+\)/\1/g
- 查找/var目錄屬主為root,且屬組為mail的所有檔案;
find /var -user root -a -group mail -ls
- 查找/usr目錄下不屬于root、bin或hadoop的所有檔案;
find /usr ! \( -user root -o -user bin -o -user hadoop \) -ls
- 查找/etc目錄下最近一周内其内容修改過,且屬主不為root或hadoop的所有檔案;
find /etc/ -atime -7 -a ! \( -user root -o -user hadoop \) -ls
- 查找目前系統上沒有屬主或屬組,且最近一周内曾被通路過的所有檔案;
find /etc/ -atime -7 -a -nouser -a -nogroup -ls
- 查找/etc目錄下大于20k且類型為普通檔案的所有檔案;
find /etc/ -size +20k -a -type f -ls
- 查找/etc目錄下所有使用者都沒有寫權限的檔案;
find /etc -! -perm /222 -ls
- 查找/etc目錄下至少有一類使用者沒有執行權限的檔案;
find /etc -perm /111 -type f -ls
- 查找/etc/init.d目錄下,所有使用者都有執行權限,且其它使用者擁有寫權限的檔案;
find /etc/init.d -perm -111 -a -perm -002 -ls
chmod u+s /tmp/cat
# chmod g+s /test/data
# chmod g+w /test/data
# chmod o+t /test/data