vim文本編輯
vim是vi文本編輯的增強版本,因其編輯功能強大、且支持各種語言開發環境關鍵字自動增亮功能,也可稱為是開發工具。在Centos7/RHEL7開始,默認將vi定義成vim –color=auto,已經取代了vi的地位。下面總結下關于vim工具的使用
vim有三種模式,每個模式下有其特定的功能;我們可自由在三者之間切換使用:
COMMAND MODE:vim的默認模式(初始模式)
可以使用方向鍵來移動光標、可以刪除字符或者整行刪除、可以復制粘貼等操作
INSERT MODE:vim的編輯模式
當你按下【a,i,o,A,I,O,R,r】便可從初始的命令模式進入編輯模式,再按下【esc】按鍵時,便可從輸入模式轉換到命令模式
COMMAND-LINE MODE:末行模式
可通過【: / ?】三個符合從命令模式進入末行編輯模式,此模式下可查詢、替換、讀取其他文件、存盤、退出、界面設置等操作;功能十分強大
vim相關命令
zz
類似于:wq 保存退出
光標跳轉
w:下一個詞首 e:下一個詞尾 b:當前或者前一個詞首
行首行尾跳轉
^:跳轉至行首第一個非空白字符 0:跳轉至行首 $:跳轉至行尾
行間跳轉
nG:跳轉至第n行 1G、gg:跳轉至第一行行首 G:跳轉至末行行首
句間跳轉
(:上一句 ):下一句
段間跳轉
{:上一段 }:下一段
翻屏
ctrl+f:向文件尾部翻一頁 ctrl+b:向文件首部翻一頁 ctrl+d:向文件尾部翻半頁 ctrl+u:向文件首部翻半頁
編輯命令
x:刪除光標所在位置字符 nyy:復制光標所在往下n行 p:粘貼復制的內容 d:刪除命令,可結合光標跳轉字符,實現范圍刪除 dd:刪除光標所在行 ndd:光標所在行往下n行刪除 u:undo,即撤銷操作的意思,可緩存50條記錄 ctrl+r:撤銷之前的撤銷操作
光標位置定界
:start_pos[,end_pos] n: 特定的第n行 .: 表示當前行,可+可- $: 表示最后一行 %: 表示全部內容 m,n: 表示從m行到n行 m,+n: 表示從m行開始的n行內
查找、替換
s/要查找的內容/要替換的內容/修飾符 其中:要查找的內容可使用正則表達式 要替換的內容不能使用正則表達式,但是可以引用 修飾符:i 忽略大小寫 g 全局替換 :%s/匹配字符/替換字符/g
平時在寫程序時經常會遇到大小寫轉換的問題,vim中提供了很多非常方便的大小寫轉換命令,可以快速的進行字母、單詞、任意行的大小寫轉換,可以和vim的光標移動指令組合使用。
~ 將光標下的字母改變大小寫
3~ 將光標位置開始的3個字母改變其大小寫
g~~ 改變當前行字母的大小寫
U 將可視模式下選擇的字母全改成大寫字母
u 將可視模式下選擇的字母全改成小寫
gUU 將當前行的字母改成大寫
3gUU 將從光標開始到下面3行字母改成大寫
guu 將當前行的字母全改成小寫
gUw 將光標下的單詞改成大寫。
guw 將光標下的單詞改成小寫。
更多技巧可以查看文檔
任務計劃
bash shell極大的方便了系統管理員的工作,可是有些工作呢不是任何時候都可以人為操作的,根據工作需要,往往有很多工作需要定時定點的去執行;因此Linux為了方便系統管理工作,加入了周期性任務計劃管理,Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。:
crontab用戶任務調度
maintains crontab files for individual users這里是一個命令,/usr/bin/crontab;所有的用戶crontab文件保存的地方在/var/spool/cron/$USERNAME,/etc/cron.allow或者/etc/cron.deny可限制哪些用戶可以使用crontab哪些用戶不可以使用crontab,cron.allow優先級比cron.deny高,只需要將用戶名編輯入其中一個即可 【SYNOPIS】 crontab [-u user] file crontab [-u user] [-l | -r | -e] [-i] [-s] crontab -n [ hostname ] crontab -c 【OPTIONS】 -u --user 指定用戶crontab任務 -l 列出任務計劃 -r 刪除可用的任務計劃 -e 編輯任務計劃,類似vi,編輯文件后:wq保存即可 -i 與-r同用,交互式刪除任務計劃 -n --host 指定用戶執行任務計劃 其格式如下: # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * command to be executed 在以上各個字段中,還可以使用以下特殊字符: 星號(*):代表所有可能的值,例如month字段如果是星號,則表示在滿足其它字段的制約條件后每月都執行該命令操作。 逗號(,):可以用逗號隔開的值指定一個列表范圍,例如,“1,2,5,7,8,9” 中杠(-):可以用整數之間的中杠表示一個整數范圍,例如“2-6”表示“2,3,4,5,6” 正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鐘執行一次。
/etc/crontab
這是系統級別的任務計劃管理文檔,可通過直接編輯/etc/crontab文件實現,其格式跟用戶crontab編輯格式一樣;該進程默認啟動; 服務狀態:#service crond status 或者 systemctl status crond.service 啟動服務:#service crond start 或者 systemctl start crond.service 停止服務:#service crond stop 或者 systemctl stop crond.service
vim練習總結:
1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;
:%s/^[[:blank:]]\+.*/\0#/g
2、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中行首的空白字符
:%s/^[[:space:]]\+//g
3、刪除/tmp/rc.sysinit文件中以#開頭且后面跟了至少一個空白字符的行的#和空白字符
:%s/^#[[:blank:]]\+//g
4、為/tmp/grub.conf文件中前三行的行首加#號
:1,3s/^/\0#/g
5、將/etc/yum.repos.d/Centos-Media.repo文件中所有的enabled=0或者gpgcheck=0的最后的0修改為1
:%s/\(enabled\|gpgcheck\)=0/\1=1/g
任務計劃練習
6、每4小時執行一次對/etc目錄的備份,備份至/backup目錄,保存目錄名為形如etc-201504020202
* */4 * * * /usr/bin/cp /etc /backup/etc-$(date +%Y%m%d%h%M)/
7、每周2、4、6備份/var/log/messages文件至/backup/messages_logs目錄中,保存的文件名形如messages-20150402
* * * * 2,4,6 /usr/bin/cp /var/log/messages /backupmessages_logs/messages-$(date +%Y%m%d)
8、每天每2小時取當前系統/proc/meminfo文件中的所有以S開頭的信息至/stats/memory.txt文件中
* */2 * * * /usr/bin/grep -E "S.*" /proc/meminfo>>/stats/memory.txt
9、工作日的工作時間內,每2個小時執行一次echo "howdy"
* 9-18/2 * * 1-5 /usr/bin/echo "howdy"
腳本編程練習
10、創建目錄/tmp/testdir-當前日期時間
#!/bin/bash if [ -d /tmp/testdir-$(date +%Y%m%d) ] then echo "the dirctory is exist!" else mkdir -p /tmp/testdir-$(date +%Y%m%d) &&echo "create the dirctory successful!" fi
11、在此目錄創建100個空文件:file1-file100
#!/bin/bash for ((i = 1; i<=100; i++)) do touch /tmp/files/file$i; done echo "create 100 files successful!"
12、顯示/etc/passwd文件中位于第偶數行的用戶的用戶名
#!/bin/bash i=0 for username in `cat /etc/passwd|cut -d: -f1` do i=$(($i+1)) [ $((i%2)) -eq 0 ] && echo $username; done
13、創建10用戶user10-user19,密碼同用戶名
#!/bin/bash for (( i=10;i<20;i++ )) do id user$i>/dev/null 2>&1; if [ $? == 0 ];then echo "the user$i is exist!" else useradd user$i && echo "user$i"|passwd --stdin user$i>>/dev/null 2>&1; echo "create user$i successful!" fi done
14、在/tmp創建10個空文件file10-file19;
#!/bin/bash # for (( i=10; i<20; i++ )) do if [ -f /tmp/file$i ];then echo "the file$i is exist." else touch /tmp/file$i && echo "create file$i successful!" fi done
原創文章,作者:396064847,如若轉載,請注明出處:http://www.www58058.com/56535
完成的非常好,6、8、9題需要精確到分鐘,7題需要精確到分鐘、小時哈,加油!