馬哥教育網絡班21期+第6周課程練習
[TOC]
vim編輯器使用方法總結
vim編輯器: 簡介: vi: visual interface,文本編輯器 vim: vi improved,vi的增強版 文本:ASCII,Unicode, 文本編輯器種類: 行編輯器:sed, 全屏編輯器:nano,vi vim:模式化的編輯器 基本模式: 編輯模式,也叫命令模式 輸入模式 末行模式:內置的命令行接口 模式轉換: 編輯模式 --> 輸入模式 i: insert,在光標所在處前面輸入 a: append,追加,在光標所在處后面輸入 o: 在當前光標所在行的下方打開一個新行并轉換為輸入模式; I: 在當前行的行首輸入; A: 在當前行的行尾輸入; O: 在當前光標所在行的上方打開一個新行并轉換為輸入模式; 輸入模式 --> 編輯模式 ESC 編輯模式 --> 末行模式 : 末行模式 --> 編輯模式 兩次ESC
關閉文件: :q 退出 :q! 強制退出,丟棄做出的修改; :wq 保存后退出 :x 保存退出 :w /PATH/TO/SOMEFILE 保存到其他文件 命令模式下:ZZ 保存退出
光標跳轉: 1. 字符間跳轉 h,j,k,l h: 左 l:右 j:下 k: 上 #COMMAND: 挑戰有#指定的個數的字符 2. 單詞間跳轉 w:當前或下一個單詞的詞首 b:當前或前一個單詞的詞首 e: 跳轉至當前或下一個單詞的詞尾 #COMMAND: 由#指定一次跳轉的單詞數 3. 行首行尾跳轉: ^:跳轉至行首的第一個非空白字符 0:跳轉至行首 $:跳轉至行尾: 4. 行間移動: #G:跳轉至由#指定的行; G:最后一行; gg或1G:第一行 5. 句間移動: ): 下一個句子 (: 前一個句子 6. 段間移動: }:下一個段落 {:上一個段落
vim編輯命令: 字符編輯: x:刪除光標處的單個字符; #x: 刪除光標處起始地#個字符 xp:交換光標所在處及其后面字符的位置; 刪除命令: d:刪除命令,可結合光標跳轉字符實現范圍刪除; d$: d^: d0: dw: de: db: #COMMAND 3dw: dd:刪除光標所在行 #dd #COMMAND 2dd:包括光標所在行向下共刪除2行; 粘貼命令(P,put,paste): p(小寫): 緩沖區中存儲的如果是整行,則粘貼之當前光標所在行的下方;否則,粘貼之光標所在處的后面; P(大寫): 緩沖區中存儲的如果是整行,則粘貼之當前光標所在行的上方;否則,粘貼之光標所在處的前面; 復制(y,yank) y:復制,工作行為與d命令相似 y0 y^ y$ ye yw yb #COMMAND yy: 復制行 #yy: 復制多行; 改變命令(c,change) c: 修改 編輯模式 --> 輸入模式 c$ c0 c^ cb ce cw #COMMAND cc: 刪除行并輸入內容 #cc: 刪除多行并輸入內容 替換命令(r,replace) r:替換光標所在處的字符 rx:將其替換為x字符 其他編輯操作: 可視化模式: v:按字符選定 V: 按行選定 Note: 經常結合編輯命令 d,c,y 撤消之前的編輯: u(undo):撤銷此前的操作: #u: 撤消指定次數的操作; 撤消此前的撤消: CTRL+r 重復上一次操作: . 點號 翻屏操作: ctrl+f:向文件尾部翻一屏 ctrl+b:向文件首部翻一屏 ctrl+d:向文件尾部翻半屏 ctrl+u:向文件首部翻半屏
vim中的末行模式: 內建的命令行接口: 1. 地址定界 :start_pos,end_pos #: 具體的第#行,例如2,第2行 #1,#2: 從#1行至#2行; #1,+#2: 從#1行起,向下再多加#2行,如1,+5:表示從第一行及其后5行,共6行; .: 點號,當前行 $:最后一行 .,$-1: 當前行至倒數第二行 %:全文,相當于1,$ /pat1/,/pat2/:從第一次被pat1模式匹配到的行開始至第一次被pat2匹配到的行結束; 常用方法: 1,/pat/ /pat/,$ 使用方式:后跟一個編輯命令 d, y, w /path/to/somefile:將范圍內的行另存至其他文件 r /path/from/somefile :在指定位置插入指定文件的所有內容 2. 查找 /pattern: 從當前光標所在處向文件尾部查找 ?pattern: 從當前光標所在處向文件首部查找 n: 與命令同方向 N:與命令反方向 3.查找并替換: s: 在末行模式下完成查找替換作用 s/要查找的內容/替換為的內容/修飾符 這里的分隔符可以使用其他字符代替,如s@@@ s### 要查找的內容:可使用模式 替換為的內容:不可使用模式,但可以使用\1,\2..等后向引用,還可以使用"&"引用前面查找時找到的整個內容; 4. 修飾符: i: 忽略大小寫 g:全局替換,默認情況下,每一行只替換第一次出現; 示例: .,$s/r\(..\)t/R\1T/g: 將r..t替換為R..T %s/linux/&er/ :全文的第一個linux替換為linuxer 1,10s/how/HOW/g : 將第一至第十行的how全部替換為HOW %s/\etc\/fstabl/\/var\/log/g 將/etc/fstab替換為/var/log.
多文件模式 vim FILE1 FILE2 FILE3 next:下一個 prev 前一個 first:第一個 last 最后一個 :wall 保存所有 :qall 退出所有 窗口分隔模式: vim -o 或者 -O FILE1 FILE2 -o: 水平分隔,上下兩個文件 -O:垂直分割,左右兩個文件 在窗口間切換: ctrl+w+方向鍵 :q 退出當前 :qall 退出所有 單文件窗口分隔: ctrl+w+s, split,水平分隔 ctrl+w+v, vertical 垂直分割 :qall :wqall
定制vim的工作特性: 配置文件: 全局:/etc/vimrc 個人:~/.vimrc 末行:當前vim進程有效 1.行號: 顯示:set number,簡寫為set nu 取消顯示:set nonumber,簡寫 set nonu 2. 括號匹配: 匹配;set showmatch,簡寫為 set sm 取消:set nosm 3. 自動縮進 啟用:set autoindent,簡寫為set ai 禁用:set noai 4. 高亮搜索 啟用:set hlsearch (hilightsearch) 禁用:set nohlsearch 5. 語法高亮 啟用:syntax on 禁用:syntax off 6. 忽略字符大小寫 啟用:set ic (ignorecase) 禁用:set noic 7. 獲取幫助: 末行模式下help, :help :help + 關鍵字
vim自帶的練習教程: centOS7有中文版 vimtutor
vim編輯器使用練習
1. 復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;
[root@rhel-6 ~]# vim /tmp/rc.sysinit :%s/^[[:space:]]\+/#&/g # 或者是 :1,$s@^\([[:space:]]\+\)@#\1@g
2. 復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中的行首的空白字符;
[root@rhel-6 ~]# vim /tmp/grub.conf :%s/^[[:space:]]\+//g
3. 刪除/tmp/rc.sysinit文件中的以#開頭,且后面跟了至少一個空白字符的行首#和空白字符;
[root@rhel-6 ~]# vim /tmp/rc.sysinit :%s/^#[[:space:]]\+//g
4. 為/tmp/grub.conf文件中前三行的行首加#號;
[root@rhel-6 ~]# vim /tmp/grub.conf :1,3s/.*/#&/
5. 將/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改為1;
[root@CentOS-7 tmp]# vi /etc/yum.repos.d/CentOS-Media.repo :%s/=0/=1/g
定時任務配置練習
6. 每4小時執行一次對/etc目錄的備份,備份至/backup目錄中,保存的目錄名為形如etc-201504020202
00 */4 * * * /bin/cp -ar /etc/ /backup/etc-$(date +%Y%m%d%H%M) &>/dev/null
7. 每周2,4,6備份/var/log/messages文件至/backup/messages_logs/目錄中,保存的文件名形如messages-20150402
00 00 * * 2,4,6 /bin/cp -a /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d) &>/dev/null
8. 每天每兩小時取當前系統/proc/meminfo文件中的所有以S開頭的信息至/stats/memory.txt文件中
00 */2 * * * /bin/egrep '^(S|s)' /proc/meminfo >> /stats/memory.txt &>/dev/null
9. 工作日的工作時間內,每兩小時執行一次echo "howdy"
00 8-18/2 * * 1-5 /bin/echo "howdy" &>/dev/null
腳本編程練習
10-11. 創建目錄/tmp/testdir-當前日期時間,在此目錄創建100個空文件:file1-file100
[root@rhel-6 test]# cat test1.sh #!/bin/bash TestDir=/tmp/testdir-$(date +%Y%m%d%H%M) TestLog=${TestDir}/failure.log mkdir ${TestDir} &>/dev/null [[ $? -eq 0 ]] && echo "Create ${TestDir} success." for (( i = 1; i < 101; i++ )); do touch ${TestDir}/file$i || echo "Failure:file$i" >> ${TestLog} done if [[ -s "${TestLog}" ]]; then cat ${TestLog} else echo 'Create file1-file100 success.' fi [root@rhel-6 test]# sh test1.sh Create /tmp/testdir-201608132309 success. Create file1-file100 success.
12. 顯示/etc/passwd文件中位于第偶數行的用戶的用戶名;
[root@rhel-6 test]# cat test2.sh #!/bin/bash NO_passwd=$(cat /etc/passwd | wc -l) echo 'The UserName list is:' #for (( i = 0; i <= ${NO_passwd}; i+=2 )); do for i in $(seq 2 2 ${NO_passwd});do head -n $i /etc/passwd | tail -n 1 | cut -d':' -f1 done [root@rhel-6 test]# sh test2.sh The UserName list is: bin adm ... ...
13. 創建10用戶user10-user19;密碼同用戶名;
[root@rhel-6 test]# cat test3.sh #!/bin/bash for i in {10..19}; do id user$i &>/dev/null if [[ $? -eq 0 ]]; then echo "user$i exist." echo user$i | passwd --stdin user$i &>/dev/null [[ $? -eq 0 ]] && echo "user$i password change success." || echo "user$i password change failed." else useradd user$i echo "user$i" | passwd --stdin user$i &>/dev/null [[ $? -eq 0 ]] && echo "Create user$i success." || echo "Creat user$i failure." fi done [root@rhel-6 test]# useradd user13 [root@rhel-6 test]# sh test3.sh Create user10 success. ... user13 exist. user13 password change success. Create user14 success. ...
14-15. 在/tmp/創建10個空文件file10-file19,把file10的屬主和屬組改為user10,依次類推。
[root@rhel-6 test]# cat test4.sh #!/bin/bash TmpFile=/tmp/file for i in {10..19}; do if [[ -f "${TmpFile}$i" ]]; then echo "${TmpFile}$i exist." chown user$i:user$i ${TmpFile}$i && echo "${TmpFile}$i: owner and group change to user$i:user$i" else touch "${TmpFile}$i" if [[ $? -eq 0 ]]; then echo "${TmpFile}$i create success." chown "user$i:user$i" ${TmpFile}$i && echo "${TmpFile}$i: owner and group change to user$i:user$i" else echo "${TmpFile}$i create failure." fi fi done [root@rhel-6 test]# touch /tmp/file12 [root@rhel-6 test]# sh test4.sh /tmp/file10 create success. /tmp/file10: owner and group change to user10:user10 /tmp/file11 create success. /tmp/file11: owner and group change to user11:user11 /tmp/file12 exist. /tmp/file12: owner and group change to user12:user12 ... ...
原創文章,作者:N21_未來人,如若轉載,請注明出處:http://www.www58058.com/35484
寫的很好,排版也很棒,加油
@馬哥教育:You have posted a great coellction of wonderful blogs. Thanks for sharing all the posts. I was scrolling down, admiring all the wonderful bloggers work, and there was mine. Thank you!