vim 主要模式介紹
vim 命令模式
問:vi 和 vim 是同一個軟件包安裝的嗎?
答:NO商佑,vim 是 vi 的增加版腐晾,最明顯的區(qū)別就是 vim 可以語法加亮磁餐,它完全兼容 vi
查看一個命令句惯,是哪個軟件包拍嵌,安裝的:
[root@xuegod63~]# rpm-qf/usr/bin/vim[root@xuegod63~]# which vim[root@xuegod63~]# rpm-qf `which vim`? ? #`反引號镐捧,esc? 按鍵下的鍵潜索,反引號中可執(zhí)行命令[root@xuegod63~]# rpm-qf $(which vi)#$(可執(zhí)行命令)$()與`` 都可以進行命令替換,命令替換與變量替換差不多懂酱,都是用來重組命令行的竹习,先完成引號里的命令行,然后將其結(jié)果替換出來列牺,再重組成新的命令行
1.Vim 常用 4 種模式.
正常模式(Normal mode整陌,俗稱命令模式) ,命令行模式(Command-line mode)
插入模式(Insert mode 昔园,俗稱編輯模式)蔓榄, 可視模式(Visual mode,俗稱可視塊模式)
root@xuegod63~]# cp/etc/passwd a.txt[root@xuegod63~]# vim a.txt首次進入文件----正常模式(Normal mode默刚,俗稱命令模式)按下 I 鍵甥郑,出現(xiàn) “Insert”----插入模式(Insert mode? ,俗稱編輯模式)按 Esc 鍵荤西,再輸入冒號:----命令行模式(Command-line mode)
例 1 從編輯模式到命令行模式怎樣切換?
編輯模式->esc->命令模式->: ->命令行模式
注意在命令模式下澜搅,輸入命令無效時,檢查下輸入法是不是中文輸入法邪锌,切換為英文輸入法
例 2 字符操作(怎樣進入編輯模式?)
進入編輯模式 a i o A I O
說明:
i? 當(dāng)前字符之前插入(光標(biāo)前)I? 行首插入(行首)a? 當(dāng)前字符之后插入(光標(biāo)后)A? 行尾插入(行尾)o 下一行插入(另起一行)O 上一行插入(上一行插入)x? 向后刪除一個字符X? 向前刪除一個字符等同于? deleteu? 撤銷一步每按一次就撤銷一次ctrl+r? 恢復(fù)勉躺,每按一次就恢復(fù)一次r? 替換
1、光標(biāo)定位
hjkl左下上右0和 home 鍵表示切換到行首觅丰,? $和 end? 鍵表示切換到行尾gg? 快速定位到文檔的首行,G? 定位到未行3gg? 或者3G? ? 快速定位到第3行/string(字符串)-----找到或定位你要找的單詞或內(nèi)容然后敲回車饵溅,如果相符內(nèi)容比較多,我們可以通過 N妇萄、n 來進行向上向下查找连躏,并且 vim 會對查找到的內(nèi)容進行高亮顯示滑废,取消高亮用:noh/^d----尖括號^意思表示以什么開頭? 刽射,查找以字母 d? 開頭的內(nèi)容-----$意思表示以什么結(jié)尾织咧,查找以字母 bash? 結(jié)尾的內(nèi)容/bash$vim+/etc/passwd? 打開文件后,光標(biāo)會自動位于文件的最后一行懦底。? 了解一下這個技巧唇牧。vim+23/etc/passwd? 打開文件后,光標(biāo)會自動位于文件的第23行,方便后期排錯丐重。如:服務(wù)器啟動報錯腔召,第23,有語法錯誤弥臼。使用 vim+23/etc/passwd 可以快速定位到23行宴咧。
分享心得:我更喜歡 vim 打開文件,然后按 G径缅,跳到最后掺栅。 因這個 vim + a.txt
一段時間肯定會忘。Linux 中有太多的小技巧纳猪,大家應(yīng)該記那些常用的氧卧。
2、在正常模式對文本進行編輯
刪除氏堤、復(fù)制沙绝、粘貼、撤銷yy? 復(fù)制整行復(fù)制 N 行: Nyy? ? 鼠锈,比如:2yy? 闪檬,表示復(fù)制2行dd(刪除,以行為單位购笆,刪除當(dāng)前光標(biāo)所在行)刪除 N 行: Ndd? ? 粗悯,比如:2dd? ,表示刪除2行p? : P? 粘貼剪切:? ddx? 刪除光標(biāo)所在位置的字符D? 從光標(biāo)處刪除到行尾u撤銷操作ctrl+r還原撤銷過的操作同欠,將做過的撤銷操作再還原回去样傍,也就是說撤銷前是什么樣,再還原成什么樣r? 替換铺遂,或者說用來修改一個字符總結(jié):vim? 如何進入其它模式a A? o O? ? i I 都是可以進行插入衫哥,編輯模式:? 進入命令行模式ctrl+v? 進入可視塊模式R? 擦除、改寫襟锐,進入替換模式你進入以上模式后撤逢,想要退出? ,按? esc
編程或修改服務(wù)器配置文件的時候粮坞,需要進行多行注釋笛质,會使用 Visual 模式。
1捞蚂、進入 Visual 模式的批量刪除,方法如下:
刪除:再按 ctrl+v 進入可視塊模式跷究;向下或向上移動光標(biāo) 姓迅;選中部分內(nèi)容,然后按 d, 就會刪除注
釋符號。
例:將 sshd_config 文件中 17 行到 20 行前面的#號刪除
[root@xuegod63~]# vim/etc/ssh/sshd_config
改:
為:
2、進入 Visual 模式的批量修改丁存,方法如下:
1)肩杈、ctrl+v 進入列編輯模式
2)、向下或向上移動光標(biāo)解寝,把需要注釋扩然、編輯的行的開頭選中起來
4)、然后按大寫的 I
5)聋伦、再插入注釋符或者你需要插入的符號,比如"#"
6)夫偶、再按 Esc,就會全部注釋或添加了
例:在 sshd_config 文件中 17 行到 20 行前面加一個#號
[root@xuegod63~]# vim/etc/ssh/sshd_config
改:
為:
1觉增、命令行模式 Command-line 操作技巧
:w? 保存 save:w!強制保存:q? 沒有進行任何修改,退出 quit:q!修改了说铃,不保存,強制退出:wq? 保存并退出:wq!強制保存并退出:x? 保存退出:e!復(fù)原腻扇,恢復(fù)到文件打開后砾嫉,沒有進行修改時的狀態(tài)。 修改了很多焰枢,不想保存蚓峦,想復(fù)原,按:e!在正常模式下济锄,按下大寫的 ZZ暑椰,也可以保存并退出
例: wq! 強制保存并退出
[root@xuegod63~]# ll/etc/shadow----------.1root root11799月1912:57/etc/shadow[root@xuegod63~]# vim/etc/shadow
例 1:調(diào)用外部文件或命令
語法:在命令行模式下輸入:!+命令例:在 vim 編輯文檔寫要寫入 MAC? 地址。[root@xuegod63~]# cp/etc/passwd a.txt[root@xuegod63~]# vim a.txt:!ifconfig#在 vim 中調(diào)用 ifconfig? 命令讀取其他文件荐绝。(把其他文件中的內(nèi)容追加到當(dāng)前文檔中):r/etc/hosts
2一汽、文本替換
格式 : 范圍(其中%所有內(nèi)容) s 分隔符 舊的內(nèi)容 分隔符 新的內(nèi)容(分隔符可以自定義)
默認是每一行的第一個符合要求的詞(/g 全部)
[root@xuegod63~]# vim a.txt:1,3s/bin/xuegod:1,3s/bin/xuegod/g:3s/xue/aaaaa/g#替換第1到3行中出現(xiàn)的第一個 bin 進行替換為? xuegod#替換第1到3行中查找到所有的 bin 進行替換為? xuegod#只把第3行中所有 xue 替換為 aaaaa? 了修改 a.txt ,先在文件中隨意插入幾個do和 DO? 字符:%s/do/xuegod/g:%s/do/xuegod/gi#將文本中所有的do替換成? xuegod#將文本中所有的do替換成 xuegod,并且忽略do的大小寫:%s@xuegod@do@g? ? #將文本中所有的 xuegod 替換成do低滩,替換時召夹,也可以使用@做分隔符
1、臨時設(shè)置
[root@xuegod63~]# vim a.txt:set nu設(shè)置行號:set nonu? 取消設(shè)置行號:noh取消高亮顯示
2恕沫、永久設(shè)置環(huán)境
vim/etc/vimrc? #設(shè)置后會影響到系統(tǒng)所有的用戶~/.vimrc? #在用戶的家目錄下监憎,創(chuàng)建一個.vimrc。這樣只影響到某一個用戶婶溯,沒有自己建一個
例 1:臨時定制 vim 開啟顯示行號功能
[root@xuegod63~]# echo"set nu">/root/.vimrc[root@xuegod63~]# vim/etc/passwd? #發(fā)現(xiàn)默認已經(jīng)有行號了
3鲸阔、vim 打開多個文件
方法 1:以上下形勢偷霉,打開兩個文檔
[root@xuegod63~]# vim-o/etc/passwd/etc/hosts
注:輸入:qa 一次退出所有打開的文件
方法 2:以左右方式打開兩個文檔
[root@xuegod63~]# vim-O/etc/passwd/etc/hosts
注:ctrl+ww 在兩文檔之間進行切換編輯。大寫 O 左右分屏褐筛,小寫的 o 上下分屏
比較兩個文件內(nèi)容
[root@xuegod63~]# cp/etc/passwd mima.txt[root@xuegod63~]# echo aaa>>mima.txt
方法 1:
[root@xuegod63~]# diff/etc/passwd mima.txt40a41>aaa
方法 2:
[root@xuegod63~]# vimdiff/etc/passwd mima.txt
nano 編輯器
emacs 編輯器
GHOME 編輯器 gedit
例:
[root@xuegod63~]# gedit/etc/passwd
實戰(zhàn):在 Centos6/RHEL6 上恢復(fù) ext4 文件系統(tǒng)下誤刪除的文件
[root@xuegod63~]# rm-rf/#這個可以執(zhí)行成功嗎类少?執(zhí)行不成功的,rm:在"/"進行遞歸操作十分危險rm:使用--no-preserve-root? 選項跳過安全模式[root@xuegod63~]# rm-rf/*? ? ? #這個可以執(zhí)行成功渔扎。
ext4?文件系統(tǒng)上刪除文件硫狞,可以恢復(fù):?extundelete?,ext3?恢復(fù)使用:ext3grep
windows?恢復(fù)誤刪除的文件:?final data v2.0?漢化版 和?easyrecovery
xfs?文件系統(tǒng)上刪除文件晃痴,暫時沒有太好的辦法進行完全恢復(fù)残吩,需要找專業(yè)數(shù)據(jù)恢復(fù)公司
擴展:
Linux 文件系統(tǒng)由三部分組成:文件名,inode愧旦,blockwindows? 也由這三部分組成。a.txt-->inode-->block文件名? 存放文件元數(shù)據(jù)信息? 真正存放數(shù)據(jù)
查看文件文件名:
[root@xuegod63~]# cp/etc/passwd a.txt[root@xuegod63~]# ls a.txt? a.txt
查看 inode 號:
常識: 每個文件旁瘫,有一個 inode 號酬凳。
[root@xuegod63~]# ls-i a.txt440266a.txt
查看 inode 中的文件屬性; 通過 stat 命令查看 inode 中包含的內(nèi)容
[root@xuegod63~]# stat a.txt? ? #查看 inode? 信息:[root@xuegod63~]# ls-l a.txt-rw-r--r--1root root1720Oct2510:21a.txt
block 塊:真正存儲數(shù)據(jù)的地方
邏輯刪除:
為什么刪除比復(fù)制快?
誤刪除文件后翎苫,第一件事要做什么?龙屉?作岖? 你不心刪除把存了幾十年的大片刪除了痘儡。
避免誤刪除的文件內(nèi)容被覆蓋沉删。 如何避免丑念?
卸載需要恢復(fù)文件的分區(qū)或以只讀的方式掛載
實戰(zhàn):在 ext4 文件系統(tǒng)上恢復(fù)被誤刪除的文件
下載?extundelete
http://sourceforge.net/
準(zhǔn)備測試分區(qū):
開源軟件發(fā)布中心
先添加一塊硬盤
[root@xuegod63/]# fdisk/dev/sdb? #創(chuàng)建一個 sdb1? 分區(qū)WARNING:DOS-compatible mode is deprecated.It's strongly recommended toswitchoff themode(command'c')and change display units tosectors(command'u').Command(mforhelp):p#查看現(xiàn)有分區(qū)表Disk/dev/sda:21.5GB,21474836480bytes255heads,63sectors/track,2610cylindersUnits=cylinders of16065*512=8225280bytesSectorsize(logical/physical):512bytes/512bytesI/Osize(minimum/optimal):512bytes/512bytesDisk identifier:0x000b8b35Device Boot? Start? End? Blocks? Id? System/dev/sda1*120480083LinuxPartition1does not end on cylinder boundary./dev/sda2/dev/sda3261301142810240000102400083Linux130182Linux swap/SolarisCommand(mforhelp):nCommand action#創(chuàng)建一個新分區(qū)eextendedpprimarypartition(1-4)p#創(chuàng)建一個主分區(qū)Selected partition4Firstcylinder(1428-2610,default1428):Usingdefaultvalue1428Last cylinder,+cylinders or+size{K,M,G}(1428-2610,default2610):+1G? #指定分區(qū)大小Command(mforhelp):w? #保存The partition table has been altered!Callingioctl()to re-read partition table.WARNING:Re-reading the partition table failed with error16:Device or resource busy.The kernel still uses the old table.The new table will be used atthe next reboot or after you runpartprobe(8)orkpartx(8)Syncing disks.[root@xuegod63~]#reboot或[root@xuegod63~]# partx-a/dev/sdb? #獲得新分區(qū)表
擴展:
如果在根下刪除文件了推正,想恢復(fù)植榕,怎么辦尊残?
方法 1: 立即斷電寝衫,然后把磁盤以只讀方式慰毅,掛載到另一個電腦中進行恢復(fù)
方法 2:把 extundelete 在虛擬機上(虛擬機系統(tǒng)要和服務(wù)器版本一樣),提前安裝好后再復(fù)制到 U
盤中东臀,把 U 盤插入服務(wù)器贱勃,恢復(fù)時贵扰,恢復(fù)的文件要保存到 U 盤中戚绕,(不要讓恢復(fù)的數(shù)據(jù)寫到/下舞丛,那樣會覆蓋之前刪除的文件)
使用新的分區(qū)表:
[root@xuegod63/]# mkdir/tmp/sdb1? #創(chuàng)建掛載點[root@xuegod63~]# mkfs.ext4/dev/sdb1 #格式化[root@xuegod63~]# mount/dev/sdb1/tmp/sdb1 #掛載
復(fù)制一些測試文件谷誓,然后把這些文件再刪除捍歪,然后演示恢復(fù):
[root@xuegod63~]# cp/etc/passwd/tmp/sdb1[root@xuegod63~]# cp/etc/hosts/tmp/sdb1[root@xuegod63~]# echo aaa>a.txt[root@xuegod63~]# mkdir-p/tmp/sdb1/a/b/c[root@xuegod63~]# cp a.txt/tmp/sdb1/a[root@xuegod63~]# cp a.txt/tmp/sdb1/a/b[root@xuegod63~]# touch/tmp/sdb1/a/b/kong.txt安裝 tree? 命令:[root@xuegod63~]# rpm-ivh/mnt/Packages/tree-1.5.3-2.el6.x86_64.rpm[root@xuegod63~]# tree/tmp/sdb1/tmp/sdb1/├──? a├──? a.txt└──? b├──? a.txt├──? c? #空目錄└──? kong.txt? #空文件├──? hosts├──? lost+found└──? passwd
lost+found
使用標(biāo)準(zhǔn)的 ext3/ext4 檔案系統(tǒng)格式才會產(chǎn)生的一個目錄糙臼,目的在于當(dāng)檔案系統(tǒng)發(fā)生錯誤時变逃, 將一
些遺失的片段放置到這個目錄下揽乱。
可以刪除? rm-rf? lost+found可以創(chuàng)建? mklost+found
刪除文件:
[root@xuegod63~]# cd/tmp/sdb1/[root@xuegod63 sdb1]# lsa? hosts? lost+found? ? passwd[root@xuegod63 sdb1]# rm-rf a hosts passwd
誤刪除文件后,第一件事要做什么嚷炉?绘证?嚷那?
如何避免誤刪除的文件內(nèi)容被覆蓋魏宽?队询?蚌斩?
卸載需要恢復(fù)文件的分區(qū):或以只讀的方式掛載
[root@localhost~]#cd/root[root@localhost~]# umount/tmp/sdb1
上傳 extundelete 到 linux 中:
從 windows 上傳 extundelete 文件到 linux送膳,安裝? xmanager v5 或者CRT[root@xuegod63~]# rpm-ivh/mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm安裝后叠聋,就有了rz命令和sz命令 rz:上傳 windows 中的文件到? linuxsz? 文件名 :下載碌补,將 linux 中的文件傳到? windows
解壓并安裝 extundelet
[root@centos63~]#mount/dev/sr0/mnt[root@centos63~]# vim/etc/yum.repos.d/Centos-6.repo[CentOS6]name=CentOS-serverbaseurl=file:///mntenabled=1gpgcheck=0[root@xuegod63]# yum-y install e2fsprogs-devel gcc gcc-c++gcc-g77[root@xuegod63 extundelete-0.2.4]# tar xf extundelete-0.2.4.tar.bz2[root@xuegod63~]# cd extundelete-0.2.4[root@xuegod63 extundelete-0.2.4]#./configure? ? #檢查系統(tǒng)安裝環(huán)境[root@xuegod63 extundelete-0.2.4]# make-j4#編譯脑慧,把源代碼編譯成可執(zhí)行的二進制文件闷袒。-j4使用4進程同時編譯囊骤,提升編譯速度 或? 使用4核 CPU? 同時編譯也物。[root@xuegod63 extundelete-0.2.4]# make install? #安裝install? 和 cp 有什么區(qū)別?install? 復(fù)制時可以指定權(quán)限? cp? 不可以例:[root@xuegod63~]# install-m777/bin/find/opt/find[root@xuegod63~]# ll/opt/
方法 1:通過 inode 結(jié)點恢復(fù)
方法二:通過文件名恢復(fù)
方法三:恢復(fù)某個目錄抵栈,如目錄 a 下的所有文件:
方法四:恢復(fù)所有的文件
[root@xuegod63~]# umount/tmp/sdb1/[root@xuegod63~]# mkdir test? #創(chuàng)建一個目錄使用于存放恢復(fù)的數(shù)據(jù)[root@xuegod63~]# cd test/
方法 1:
通過 inode 結(jié)點查看被刪除的文件名字:
[root@xuegod63 test]# extundelete/dev/sdb1--inode2lost+found11passwd12Deletedhosts13Deleteda7313Deleted
擴展:ext4 文件系統(tǒng)的分區(qū)根目錄的 inode 值為 2斥赋,xfs 分區(qū)根目錄的 inode 值為 64
[root@xuegod63 test]# ls-id/#xfs? 文件系統(tǒng)64/[root@xuegod63 test]# mount/dev/sdb1/tmp/sdb1/[root@xuegod63 test]# ls-id/tmp/sdb1/2/tmp/sdb1/[root@xuegod63 test]# umount/tmp/sdb1/
方法 1:通過 inode 結(jié)點恢復(fù)
root@xuegod63 test]# extundelete/dev/sdb1--restore-inode12NOTICE:Extended attributes are not restored.Loading filesystem metadata...9groups loaded.Loading journal descriptors...63descriptors loaded.[root@xuegod63 test]# lsRECOVERED_FILES[root@xuegod63 test]# diff/etc/passwd RECOVERED_FILES/file.12#沒有任何輸出,說明一樣
方法二闷堡,通過文件名恢復(fù)
[root@xuegod63 test]# extundelete/dev/sdb1--restore-file hosts[root@xuegod63 test]# diff/etc/passwd RECOVERED_FILES/hosts#沒有任何輸出缚窿,說明一樣
方法三:恢復(fù)某個目錄误续,如目錄 a 下的所有文件:
[root@xuegod63 test]# extundelete/dev/sdb1--restore-directory? a[root@xuegod63 test]# tree RECOVERED_FILES/a/RECOVERED_FILES/a/├──? a.txt└──? b└──? a.txt下面是原來的目錄結(jié)構(gòu):[root@xuegod63~]# tree/root/sdb1-back/a//root/sdb1-back/a/├──? a.txt└──? b├──? a.txt├──? c└──? kong.txt
方法四:恢復(fù)所有的文件
[root@centos6 test]# rm-rf RECOVERED_FILES/[root@xuegod63 test]# extundelete/dev/sdb1--restore-all[root@centos6 test]# tree RECOVERED_FILES/刪除前后的數(shù)據(jù):
實戰(zhàn):使用 xmanager 等遠程連接工具管理 Linux
1.Linux 下常用遠程連接工具介紹
2.xmanager 使用方法
安裝以后打開
1、xshell 使用方法
例 1:連接一臺新的服務(wù)器
例 2:調(diào)整 xshell 字體大小
例 3:調(diào)整 rz 和 sz 命令的默認路徑
2、xftp 使用方法
例 1:上傳一個文件夾到 Linux 服務(wù)器上
3焰手、xstart 使用方法
方法 1:使用 xshell 直接運行圖形界面的程序
例 1:[root@xuegod63 ~]# gnome-terminal
例 2:[root@xuegod63 ~]# firefox &
方法 2:使用 xstart 調(diào)用桌面
注:使用 MK 給的 xmangaer5 安裝后,后期運行躲履,提示更新到新版本聊闯, 你不要更新菱蔬,更新拴泌,有可能
序列號就不能使用了。
https://www.netsarang.com/zh/free-for-home-school/
也可以下載官方免費版