1. 程式人生 > >Centos7.5 -Vim編輯器和恢復ext4下誤刪除的檔案-Xmanager工具

Centos7.5 -Vim編輯器和恢復ext4下誤刪除的檔案-Xmanager工具

本節所講內容:

  • 5.1 vim的使用
  • 5.2 實戰:恢復ext4檔案系統下誤刪除的檔案
  • 5.3 實戰:使用xmanager等遠端連線工具管理Linux

5.1 vim主要模式介紹,vim命令模式。

5.1.1 vim編輯器模式

擴充套件: 問:vi和vim是同一個軟體包安裝的嗎? 答:NO,vim是vi的增加版,最明顯的區別就是vim可以語法加亮,它完全相容vi VIM編輯器模式

  • 首次進入檔案 ---- 命令模式

  • 出現 “Insert” ---- 編輯模式

  • 輸入: ---- 命令列模式

  • A:從編輯模式到命令列模式怎樣切換? 編輯模式->esc->命令模式->: ->命令列模式

  • B:字元操作(怎樣進入編輯模式?) 進入編輯模式 a i o A I O

說明:

  • i 當前字元之前插入 (游標前)

  • I 行首插入 (行首)

  • a 當前字元之後插入 (游標後)

  • A 行尾插入(行尾)

  • o下一行插入 (另起一行)

  • O上一行插入(上一行插入)

  • x 向後刪除一個字元 等同於delete

  • X 向前刪除一個字元

  • u 撤銷一步 每按一次就撤銷一次

  • r 替換

5.1.2 在命令模式下做的操作:

  • 游標定位
  • hjkl 左下上右
  • 0 和 home鍵表示切換到行首, $和end鍵表示切換到行尾
  • gg 快速定位到文件的首行 , G定位到未行
  • 3gg 或者 3G 快速定位到第3行
  • /string(字串) -----找到或定位你要找的單詞或內容,如果相符內容比較多,我們可以通過N、n來進行向上向下查詢,並且vi會對查詢到的內容進行高亮顯示,取消用 :noh
  • /^d ----^意思表示以什麼開頭 ,,查詢以字母d開頭的內容
  • /t$ -----$意思表示以什麼結尾,,查詢以字母t結尾的內容
  • vim + a.txt 開啟檔案後,游標會自動位於檔案的最後一行

如何對文字進行編輯:

	1.刪除、複製、貼上、撤銷
	2.y 複製(以字元為單位) :表示對單個字元進行復制,如果要複製整行,用yy(以行為單位)   
	3.複製N行: Nyy  ,比如: 2yy ,表示複製2行
	4.dd(刪除,以行為單位,刪除當前游標所在行)
	5.刪除N行: Ndd  ,比如: 2dd ,表示刪除2行
	6.p : P貼上
	7.剪下: dd
	8.x 刪除游標所在位置的字元
	9.D 從游標處刪除到行尾
	10.u  撤銷操作 
	11.ctrl+r  還原撤銷過的操作,將做過的撤銷操作再還原回去,也就是說撤銷前是什麼樣,再還原成什麼樣
	12.r 替換,或者說用來修改一個字元

總結:vim如何進入其它模式

  • a A o O i I 都是可以進行插入,編輯模式
  • : 進入命令列模式
  • v 進入可視模式
  • ctrl+v 進入可視塊模式
  • V 進入可視行模式
  • R 擦除、改寫,進入替換模式
  • 你進入以上模式後,想要退出 ,按esc

擴充套件:插入模式中的操作 ctrl+p可以進行補全操作,所需要的內容必須是在當前開啟的檔案記憶體在的,它只針對當前檔案

5.1.3 V模式(列)

  • 進入v模式 移動游標選擇區域、
  • 程式設計的時候需要進行多行註釋:
  • 1)、ctrl+v 進入列編輯模式
  • 2)、向下或向上移動游標,把需要註釋、編輯的行的開頭選中起來
  • 3)、然後按大寫的I
  • 4)、再插入註釋符或者你需要插入的符號,比如"#"
  • 5)、再按Esc,就會全部註釋或添加了

刪除:再按ctrl+v 進入列編輯模式;向下或向上移動游標 ;選中註釋部分,然後按d, 就會刪除註釋符號。

5.1.4 命令列模式操作

:w 儲存 save
:w! 強制儲存
:q 沒有進行任何修改,退出 quit
:q! 修改了,不儲存,強制退出
:wq 儲存並退出 
:wq! 強制儲存並退出
:x 儲存退出
例: wq! 強制儲存並退出
[[email protected] ~]# ll /etc/shadow
----------. 1 root root 1179 9月  19 12:57 /etc/shadow
[[email protected] ~]# vim /etc/shadow

呼叫外部檔案或命令

假設:我想要寫入我的網絡卡MAC地址,我要檢視一下,當前在vim編輯文件,照著寫。這樣好麻煩。解決辦法呢?

  • 在命令列模式下操作:
  • :!ifconfig 呼叫系統命令
  • !+命令
  • 讀取其他檔案。(把其他檔案中的內容追加到當前文件中)
  • :r /etc/hosts

文字替換

格式 : 範圍(其中%所有內容)   s分隔符 舊的內容 分隔符 新的內容  (分隔符可以自定義)
預設是每一行的第一個符合要求的詞   (/g全部)
:1,3 s/bin/xuegod    替換第1到3行中出現的第一個bin進行替換為xuegod
:1,3 s/bin/xuegod/g  替換第1到3行中查詢到所有的bin進行替換為xuegod
:3 s/xue/aaaaa     #只把第3行中內容替換了
:% s/do/xuegod/g  	將文字中所有的do替換成xuegod
:% s/do/xuegod/gi	將文字中所有的do替換成xuegod, 並且忽略do的大小寫
:% [email protected]@[email protected]	   將文字中所有的a替換成b

5.1.5 自定義vim使用環境

  • 臨時設定

  • :set nu 設定行號

  • :set nonu 取消設定行號

  • :noh 取消高亮顯示

  • 永久設定環境

  • vim /etc/vimrc 設定後會影響到系統所有的使用者

  • ~/.vimrc #在使用者的家目錄下,建立一個.vimrc。這樣隻影響到某一個使用者,沒有自己建一個

    例: [[email protected] ~]# cat /root/.vimrc set nu [[email protected] ~]# vim /root/.vimrc 在這裡插入圖片描述

  • vim開啟多個檔案

  • 方法1:以上下形勢,開啟兩個文件

  • [[email protected] ~]# vim -o /etc/passwd /etc/hosts 在這裡插入圖片描述 方法2:以左右方式開啟兩個文件 [[email protected] ~]# vim -O /etc/passwd /etc/hosts 注:ctrl+ww 在兩文件之間進行切換編輯。大寫O左右分屏,小寫的o上下分屏

    比較兩個檔案內容 [[email protected] ~]# cp /etc/passwd mima.txt [[email protected] ~]# echo aaa >> mima.txt [[email protected] ~]# diff /etc/passwd mima.txt 40a41

    aaa [[email protected] ~]# vimdiff /etc/passwd mima.txt

5.1.6 其它編輯器

  • nano編輯器

  • emacs編輯器

  • GHOME編輯器gedit

  • 例: [[email protected] ~]# gedit /etc/passwd

5.1.7 實戰1:在windows中編輯好的漢字文字文件,上傳到Linux下開啟亂碼。

  • 實驗環境:centos7.4 現在系統預設使用的語言是漢語。(系統中必須安裝好中文包)。

  • 將同目錄下“a此檔案在windows下開啟正常-到linux下vim開啟是亂碼.txt”上傳到Linux伺服器上。使用ssh遠端連線到Linux上,使用vim開啟顯示亂碼。

  • 原因:編碼的問題

  • 通過iconv命令轉碼 沒有使用過:1 引數:

  • -f, --from-code=名稱 原始文字編碼

  • -t, --to-code=輸出編碼

  • -o, --output=FILE 輸出檔名

  • [[email protected] ~]# mkdir test #建立一個測試目錄

  • [[email protected] ~]# cd test/

  • 將測試的檔案上傳到Linux伺服器上: 在這裡插入圖片描述 [[email protected] ~]# iconv -f gb2312 -t utf8 a此檔案在windows下開啟正常-到linux下vim開啟是亂碼.txt -o aa.txt [[email protected] ~]# cat aa.txt #!/bin/bash echo “學神IT” 資訊: -l, --list 列舉所有已知的字符集

5.1.8 實戰2:解決將公司Linux伺服器上指令碼導到windows上開啟序列的問題 原因:因為windows和linux處理回車方法不同。

上傳” b在Linux編輯的文件到windows下沒有換行.sh” 到Linux上,開啟後正常顯示
[[email protected] test]# sz b在Linux編輯的文件到windows下沒有換行.sh   #傳送到本地
在window 上開啟顯示:

在這裡插入圖片描述 解決方法: [[email protected] ~]# rpm -ivh /mnt/Packages/dos2unix-6.0.3-7.el7.x86_64.rpm 注: 在centos7上,unix2dos這個命令已經被整合到dos2unix-6.0.3-7.el7.x86_64.rpm包中。在centos6下需要安裝unix2dos.xxx.rpm。 [[email protected] test]# unix2dos b在Linux編輯的文件到windows下沒有換行.sh [[email protected] test]# sz b在Linux編輯的文件到windows下沒有換行.sh #傳送到windows本地 顯示正常。 在這裡插入圖片描述 注:dos2unix 這個命令是把windows下的回車轉成linux型別。 聯絡方式: 學神IT教育官方網站: http://xuegod.ke.qq.com 學神IT教育-Linux技術交流QQ群: 722287089 諮詢MK老師 QQ: 2659153446

5.2 實戰:在Centos6/RHEL6上恢復ext4檔案系統下誤刪除的檔案 在這裡插入圖片描述

[[email protected] ~]# rm -Rf /    #執行不成功的,
rm: 在"/" 進行遞迴操作十分危險
rm: 使用 --no-preserve-root 選項跳過安全模式
[[email protected] ~]# rm -rf /*    #這個可以執行成功。 呵呵。。。

ext4檔案系統上刪除檔案,可以恢復: extundelete ,ext3恢復使用:ext3grep
windows恢復誤刪除的檔案:  final data v2.0 漢化版  和  easyrecovery  

擴充套件: Linux檔案系統由三部分組成:檔名,inode,block windows也由這三部分組成。 a.txt -->inode --> block 檔名 存放檔案元資料資訊 真正存放資料 檢視檔案檔名:

[[email protected] ~]# cp /etc/passwd a.txt 
[[email protected] ~]# ls a.txt 
a.txt

檢視inode號:

常識: 每個檔案,有一個inode號。
[[email protected] ~]# ls -i a.txt
440266 a.txt

檢視inode中的檔案屬性; 通過stat命令檢視inode中包含的內容

[[email protected] ~]# stat a.txt   #檢視inode資訊:
[[email protected] ~]# ls -l a.txt 
-rw-r--r-- 1 root root 1720 Oct 25 10:21 a.txt

block塊:真正儲存資料的地方 邏輯刪除: 為什麼刪除比複製快? 在這裡插入圖片描述 在這裡插入圖片描述 誤刪除檔案後,第一件事要做什麼??? 你不心刪除把存了幾十年的大片刪除了。怎麼辦?

  • 避免誤刪除的檔案內容被覆蓋。 如何避免?
  • 解除安裝需要恢復檔案的分割槽或以只讀的方式掛載

5.2.2 實戰:在ext4檔案系統上恢復被誤刪除的檔案 下載extundelete http://sourceforge.net/ 開源軟體釋出中心 準備測試分割槽:

[[email protected] /]# fdisk /dev/sda  #建立一個sda4分割槽
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
     switch off the mode (command 'c') and change display units to
     sectors (command 'u').

Command (m for help): p #檢視現有分割槽表

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000b8b35

Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 1301 10240000 83 Linux /dev/sda3 1301 1428 1024000 82 Linux swap / Solaris

Command (m for help): n #建立一個新分割槽

Command action
   e   extended
   p   primary partition (1-4)
p  #建立一個主分割槽
Selected partition 4
First cylinder (1428-2610, default 1428): 
Using default value 1428
Last cylinder, +cylinders or +size{K,M,G} (1428-2610, default 2610): +1G  #指定分割槽大小

Command (m for help): w #儲存

The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. [[email protected] ~]#reboot [[email protected] ~]# partx -a /dev/sda #獲得新分割槽表

擴充套件:

  • 如果在根下刪除檔案了,想恢復,怎麼辦? 方法1: 立即斷電,然後把磁碟以只讀方式,掛載到另一個電腦中進行恢復 方法2:把extundelete在虛擬機器上(虛擬機器系統要和伺服器版本一樣),提前安裝好後再複製到U盤中,把U盤插入伺服器,恢復時,恢復的檔案要儲存到U盤中,(不要讓恢復的資料寫到/下,那樣會覆蓋之前刪除的檔案)

使用新的分割槽表:

[[email protected] /]# mkdir /tmp/sda4     #建立掛載點
[[email protected] ~]# mkfs.ext4 /dev/sda4    #格式化
[[email protected] ~]# mount /dev/sda4 /tmp/sda4/   #掛載

5.2.3 複製一些測試檔案,然後把這些檔案再刪除,然後演示恢復:

[[email protected] ~]# cp /etc/passwd /tmp/sda4/
[[email protected] ~]# cp /etc/hosts /tmp/sda4/
[[email protected] ~]# echo aaa > a.txt
[[email protected] ~]# mkdir -p /tmp/sda4/a/b/c
[[email protected] ~]# cp a.txt /tmp/sda4/a/
[[email protected] ~]# cp a.txt /tmp/sda4/a/b/
[[email protected] ~]# touch /tmp/sda4/a/b/kong.txt
安裝tree命令:
[[email protected] ~]# rpm -ivh /mnt/Packages/tree-1.5.3-2.el6.x86_64.rpm
[[email protected] ~]# tree /tmp/sda4/
/tmp/sda4/
├── a
│   ├── a.txt
│   └── b
│       ├── a.txt
│       ├── c  #空目錄
│       └── kong.txt  #空檔案
├── hosts
├── lost+found
└── passwd

刪除檔案:

[[email protected] ~]# cd /tmp/sda4/
[[email protected] sda4]# ls
a  hosts  lost+found  passwd
[[email protected] sda4]# rm -rf a hosts passwd 

誤刪除檔案後,第一件事要做什麼??? 如何避免誤刪除的檔案內容被覆蓋??? 解除安裝需要恢復檔案的分割槽:或以只讀的方式掛載

[[email protected] ~]#cd /root
[[email protected] ~]# umount /tmp/sda4

5.2.4 安裝extundelet 上傳extundelete到linux中:

  • 從windows上傳extundelete檔案到linux,安裝xmanager v5 或者CRT

    [[email protected] ~]# rpm -ivh /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm

安裝後,就有了rz命令和sz命令

  • rz : 上傳windows中的檔案到linux
  • sz :下載,將linux中的檔案傳到windows

解壓並安裝extundelet

[[email protected] extundelete-0.2.4]# tar jxvf extundelete-0.2.4.tar.bz2 
[[email protected] ~]# cd extundelete-0.2.4
[[email protected]]# yum install e2fsprogs-devel
[[email protected] extundelete-0.2.4]# ./configure   #檢查系統安裝環境
[[email protected] extundelete-0.2.4]# make  -j 4  #編譯,把原始碼編譯成可執行的二進位制檔案。 

-j 4 使用4程序同時編譯,提升編譯速度 或 使用4核CPU同時編譯。

[[email protected] extundelete-0.2.4]# make install  #安裝

install 和cp 有什麼區別? install 複製時可以指定許可權 cp不可以 例:

[[email protected] ~]# install -m 777 /bin/find /opt/a.sh
[[email protected] ~]# ll /opt/

5.2.5 開始恢復:

  • 方法1:通過inode結點恢復

  • 方法二:通過檔名恢復

  • 方法三:恢復某個目錄,如目錄a下的所有檔案

  • 方法四:恢復所有的檔案

    [[email protected] ~]# umount /tmp/sda4/ [[email protected] ~]# mkdir test #建立一個目錄使用於存放恢復的資料 [[email protected] ~]# cd test/

方法1:

  • 通過inode結點檢視被刪除的檔名字:

    [[email protected] test]# extundelete /dev/sda4 --inode 2 lost+found 11 passwd 12 Deleted hosts 13 Deleted a 7313 Deleted

擴充套件:ext4檔案系統的分割槽根目錄的inode值為2,xfs分割槽根目錄的inode值為64

[[email protected] test]# ls -id /boot/   #xfs檔案系統
64 /boot/
[[email protected] test]# mount /dev/sda4 /tmp/sda4/
[[email protected] test]# ls -id /tmp/sda4/
2 /tmp/sda4/
[[email protected] test]# umount /tmp/sda4/

方法1:通過inode結點恢復

[[email protected] test]# extundelete /dev/sda4 --restore-inode 12
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 9 groups loaded.
Loading journal descriptors ... 63 descriptors loaded.
[[email protected] test]# ls 
RECOVERED_FILES
[[email protected] test]# diff /etc/passwd RECOVERED_FILES/file.12# 沒有任何輸出,說明一樣

方法二,通過檔名恢復

[[email protected] test]# extundelete /dev/sda4 --restore-file passwd
[[email protected] test]# diff /etc/passwd RECOVERED_FILES/passwd  # 沒有任何輸出,說明一樣

方法三:恢復某個目錄,如目錄a下的所有檔案:

[[email protected] test]# extundelete /dev/sda4 --restore-directory a
[[email protected] test]# tree RECOVERED_FILES/a/
RECOVERED_FILES/a/
├── a.txt
└── b
└── a.txt
下面是原來的目錄結構:
[[email protected] ~]# tree /root/sda4-back/a/
/root/sda4-back/a/
├── a.txt
└── b
    ├── a.txt
    ├── c
└── kong.txt

方法四:恢復所有的檔案

[[email protected] test]# extundelete /dev/sda4 --restore-all

刪除前後的資料: 在這裡插入圖片描述 extundelete在恢復檔案的時候能不能自動建立空檔案和目錄? 答:不能。

聯絡方式:

  • 學神IT教育-Linux技術交流QQ群: 722287089
  • 諮詢MK老師 QQ: 2659153446

5.3 實戰:使用xmanager等遠端連線工具管理Linux

5.3.1 Linux下常用遠端連線工具介紹 在這裡插入圖片描述 5.3.2 xmanager 使用方法 1、xshell使用方法

  • 例1:連線一臺新的伺服器 在這裡插入圖片描述
  • 例2:調整xshell字型大小 在這裡插入圖片描述
  • 例3:調整rz和sz命令的預設路徑 在這裡插入圖片描述 2、xftp使用方法
  • 例1:上傳一個資料夾到Linux伺服器上 在這裡插入圖片描述 3、xstart使用方法
  • 方法1:使用xshell直接執行圖形介面的程式
  • 例1:[[email protected] ~]# gnome-terminal
  • 例2:[[email protected] ~]# firefox &
  • 方法2:使用xstart呼叫桌面 在這裡插入圖片描述 聯絡方式:
  • 學神IT教育-Linux技術交流QQ群: 722287089
  • 諮詢MK老師 QQ: 2659153446

微信公眾號: 在這裡插入圖片描述 申老師微信賬號 在這裡插入圖片描述 總結:

  • 5.1 vim的使用
  • 5.2 實戰:恢復ext4檔案系統下誤刪除的檔案
  • 5.3 實戰:使用xmanager等遠端連線工具管理Linux
  • 注:更多學習資源,可以加MK講師QQ: 3175492114
  • MK在最後,祝你:早日成為Linux牛人!