理論+實操:深刻理解Linux文件系統與日誌分析

前言:

  • inode(文件節點)與block(數據塊)
  • 硬連接與軟鏈接
  • 恢復誤刪除的文件 (即rm-rf 的操做,能夠先進行備份的操做,而後能夠進行恢復ext4和xfs文件系統皆可)
  • 日誌文件的分類
  • 用戶日誌與程序日誌

一 :inode和block概述

1.1 概述

  • 文件數據包括元信息與實際數據
  • 文件存儲在硬盤上,硬盤最小存儲單位是「扇區」,每一個扇區儲存512字節
  • block(塊)
    • 連續的八個扇區組成一個block,一個block單位是4k
    • 是文件存取的最小單位
  • inode(索引節點)
    • 中文譯名「索引節點」,也叫i節點
    • 用於存儲文件元信息

元信息>>>>>>>inodecss

數據>>>>>>>>>blocknode

一個文件必須佔用一個inode,但至少佔用一個blocklinux

對於磁盤而言,物理層面一個單元的表示形式是扇區c++

​ 邏輯層面一個單元的表示形式是單元格shell

刪除文件刪的是inode,而不是block,當一個新文件的從新寫入磁盤,覆蓋到被刪除文件的block時,才意味着文件的實際刪除,因此當誤刪文件時,第一件事就是不要再在磁盤寫入文件,經過數據恢復有可能找回到誤刪文件apache

1.2 inode的內容

  • inode包含文件的元信息bootstrap

    • 文件的字節數
    • 文件擁有者(屬主)的UID
    • 文件的GID
    • 文件的讀寫執行權限
    • 文件的時間戳
    • 備註:不包含文件名
  • 用stat命令能夠查看某個文件的inode信息;ls -i也能夠查看元信息
  • 示例:stat aa.txt
  • linux系統文件時間戳的三個主要的時間屬性vim

    • ctime(change time):最後一次改變文件或目錄(屬性即inode)的時間
    • atime(access time):最後一次訪問文件或目錄的時間
    • mtime(modify time):最後一次修改文件或目錄(內容即block)的時間
  • 目錄文件的結構
    • 目錄也是一種文件
    • 目錄文件的結構
    • 一個文件名對應一個inode號碼,兩個字段成爲一行,一行稱爲一個目錄項
  • 每一個inode都有一個號碼,操做系統用inode號碼來識別不一樣的文件
  • linux系統內部不使用文件名,而是用inode號碼來識別文件
  • 對於用戶來講,文件名只是inode號碼便於識別的別稱,即系統識別文件的inode號碼,用戶識別文件的文件名
  • 用戶經過文件名打開文件時,系統內部的過程步驟:
    • 1.系統找到這個文件對應的inode很高嗎
    • 2.經過inode號碼,獲取inode信息,即元信息
    • 3.根據inode信息,找到文件數據所在的block,讀出數據
  • 查看inode號碼的方法
    • ls -i命令:查看文件名對應的inode號碼
    • ls -i AA.txt
    • stat命令:查看文件inode信息,信息中包含inode號碼
    • stat AA.txt
[root@localhost ~]# cd /opt 
[root@localhost opt]# ls
rh
[root@localhost opt]# touch abc.txt
[root@localhost opt]# vim abc.txt 
[root@localhost opt]# ls -i '查看元信息'
35889299 abc.txt   1420654 rh
[root@localhost opt]# stat abc.txt  ''查看文件詳細元信息
  文件:"abc.txt"
  大小:13         塊:8          IO 塊:4096   普通文件
設備:fd00h/64768d Inode:35889299    硬連接:1
權限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
環境:unconfined_u:object_r:usr_t:s0
最近訪問:2019-11-16 17:57:53.373111661 +0800
最近更改:2019-11-16 17:57:53.373111661 +0800
最近改動:2019-11-16 17:57:53.375111659 +0800
建立時間:-
[root@localhost opt]# df -i '查看掛載點元信息'
文件系統                   Inode 已用(I)  可用(I) 已用(I)% 掛載點
/dev/mapper/centos-root 10485760  125297 10360463       2% /
devtmpfs                  250006     386   249620       1% /dev
tmpfs                     253986       1   253985       1% /dev/shm
tmpfs                     253986     620   253366       1% /run
tmpfs                     253986      16   253970       1% /sys/fs/cgroup
/dev/sda1                3145728     328  3145400       1% /boot
/dev/mapper/centos-home  5242880     286  5242594       1% /home
tmpfs                     253986       9   253977       1% /run/user/42
tmpfs                     253986      16   253970       1% /run/user/0
/dev/sr0                       0       0        0        - /run/media/root/CentOS 7 x86_64
tmpfs                     253986      16   253970       1% /run/user/1000
//192.168.254.10/linuxs        0       0        0        - /aaa

innode 從必定意義上能夠表明有多少個文件centos

全盤恢復數據原理:即在inode不在的狀況下,去直接掃描block信息安全

1.3 文件存儲小結

理論+實操:深刻理解Linux文件系統與日誌分析

permission denied 權限拒絕之意

1.4 inode的大小

  • inode也會消耗硬盤空間,每一個inode的大小,通常是128字節或256字節
  • 格式化文件系統時肯定inode的總數
  • 使用df -i命令能夠查看每一個硬盤分區的inode總數和已經使用的數量

1.5 inode的特殊做用

  • 因爲inode號碼與文件名分離,致使一些Unix/Linux系統具備一下的現象
    • 當文件名包含特殊字符,可能沒法正常刪除文件,直接刪除inode,也能夠刪除文件
    • 移動或重命名文件時,只改變文件名,不影響inode號碼
    • 打開一個文件後,系統經過inode號碼來識別該文件,再也不考慮文件名

1.6 連接文件

  • 爲文件或目錄創建連接文件
  • 文件類型
軟鏈接(符號連接) 硬連接
刪除原始文件後 失效 仍舊可用
適用範圍 適用於文件或目錄 只可用於文件
保存位置 與原始文件能夠位於不一樣的文件系統中 必須與原始文件在同一個文件系統(xfs系統,或者ext4等)中,如一個Linux分區內
  • 硬連接命令
    • ln 源文件 目標位置
  • 軟鏈接命令
    • ln -s 源文件或目錄.. 連接文件或目標位置 -s 即soft

2、文件恢復

2.1恢復EXT類型的文件

  • 編譯安裝extundelete軟件包
    • 安裝依賴包
    • e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm
    • e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm
    • 配置、編譯及安裝
    • extundelete-0.2.4.tar.bz2
  • 模擬刪除並執行回覆操做

extundelete軟件包只能在centos-6或者centos-5使用,由於centos-6的默認文件系統類型是ext4,centos-5的默認文件類型是ext3

2.2 恢復XFS類型的文件

  • xfsump命令格式
    • xfsdump -f 備份存放位置 要備份的路徑或者設備文件
  • xfsdump備份級別(默認爲0)
    • 0:徹底備份
    • 1-9:增量備份
  • xfsdump經常使用選項:
xfsdump --help
xfsdump——幫助
xfsdump: version 3.1.4 (dump format 3.0)
xfsdump:版本3.1.4(轉儲格式3.0)
xfsdump: usage: xfsdump [ -a (dump DMF dualstate files as offline) ]
xfsdump:用法:xfsdump[-(轉儲DMF雙狀態文件爲離線)]
[ -b <blocksize> ]
[-b <塊大小>]
[ -c <media change alert program> ]
[-c <媒體變動警報程序>]
[ -d <dump media file size> ]
[-d <轉儲媒體文件大小>]
[ -e (allow files to be excluded) ]
[-e(容許文件被排除)]
[ -f <destination> ...
[-f <目的>…]
]
]
[ -h (help) ]
[-h(幫助)]
[ -l <level> ]
[-l <level>]
[ -m (force usage of minimal rmt) ]
[-m(最低rmt的武力使用)]
[ -o (overwrite tape) ]
[-o(覆寫帶)]
[ -p <seconds between progress reports> ]
[-p < >進度報告之間的秒數]
[ -q <use QIC tape settings> ]
[-q <使用QIC磁帶設置>]
[ -s <subtree> ...
[-s <子樹>…]
]
]
[ -t <file> (use file mtime for dump time ]
[-t <文件>(使用文件mtime做爲轉儲時間)]
[ -v <verbosity {silent, verbose, trace}> ]
[-v <verbosity {silent, verbose, trace}>]
[ -z <maximum file size> ]
[-z <最大文件大小>]
[ -A (don't dump extended file attributes) ]
[-(不要轉儲擴展文件屬性)]
[ -B <base dump session id> ]
[-B <基本轉儲會話id>]
[ -D (skip unchanged directories) ]
[-D(跳過未更改的目錄)]
[ -E (pre-erase media) ]
[-E(預刪除媒體)]
[ -F (don't prompt) ]
[-F(不要提示)]
[ -I (display dump inventory) ]
[-I(顯示轉儲庫存)]
[ -J (inhibit inventory update) ]
[-J(禁止存貨更新)]
[ -K (generate format 2 dump) ]
[-K(生成格式2轉儲)]
[ -L <session label> ]
[-L <會話標籤>]
[ -M <media label> ...
[-M <媒體標籤>…]
]
]
[ -O <options file> ]
[-O <選項文件>]
[ -R (resume) ]
[-R(簡歷)]
[ -T (don't timeout dialogs) ]
[-T(不要超時對話框)]
[ -Y <I/O buffer ring length> ]
[-Y <I/O緩衝環長度>]
[ - (stdout) ]
[-(標準版)]
[ <source (mntpnt|device)> ]
[<源(mntpnt|設備)>]
  • xfsrestore命令格式(恢復命令):
    • xfsrestore -f 恢復文件的位置 存放恢復後文件的位置
  • 模擬刪除並執行恢復操做
  • 備註:必需要先使用xfsdump先備份,才能再用xfsrestore去恢復文件

2.3 xfsduymp使用限制

  • 只能備份已掛載的文件系統
  • 必須使用root的權限才能操做
  • 只能備份XFS文件系統,即只能在centos7以及以上的系統中才能使用
  • 備份後的數據只能讓xfsrestore解析
  • 不能備份兩個具備相同UUID的文件系統

3、日誌文件

3.1 日誌能功能

  • 用於記錄系統、程序運行中發生的各類事件
  • 經過閱讀日誌,有助於診斷和解決系統故障

3.2 日誌文件的分類

  • 內核及系統日誌(服務日誌,放在/var/log)

    • 有系統服務syslog統一進行管理,日誌格式基本類似
  • 用戶日誌

    • 記錄系統用戶登錄及退出系統的相關信息
  • 程序日誌

    • 由各類應用程序獨立管理的日誌文件,記錄格式不統一
    • 程序日誌只在程序第一次運行的時候纔會產生
    [root@localhost opt]# cd /var/log '切換到日誌文件目錄'
    [root@localhost log]# ls
    anaconda           dmesg               messages  speech-dispatcher       wpa_supplicant.log
    audit              dmesg.old           ntpstats  spooler                 wtmp
    boot.log           firewalld           pluto     sssd                    Xorg.0.log
    boot.log-20191115  gdm                 ppp       sudo                    Xorg.0.log.old
    boot.log-20191116  glusterfs           qemu-ga   tallylog                Xorg.1.log
    btmp               grubby_prune_debug  rhsm      tuned                   Xorg.1.log.old
    chrony             lastlog             sa        vmware-vgauthsvc.log.0  Xorg.2.log
    cron               libvirt             samba     vmware-vmsvc.log        Xorg.9.log
    cups               maillog             secure    vmware-vmusr.log        yum.log
    [root@localhost log]# rpm -q httpd    '查看程序是否安裝'
    未安裝軟件包 httpd 
    [root@localhost log]# yum install httpd -y
    已安裝:
    httpd.x86_64 0:2.4.6-90.el7.centos                                                                      
    
    做爲依賴被安裝:
    apr.x86_64 0:1.4.8-5.el7       apr-util.x86_64 0:1.5.2-6.el7  httpd-tools.x86_64 0:2.4.6-90.el7.centos 
    mailcap.noarch 0:2.1.41-2.el7 
    
    完畢!
    [root@localhost log]# ls
    anaconda           dmesg.old           ntpstats           sssd                    Xorg.0.log.old
    audit              firewalld           pluto              sudo                    Xorg.1.log
    boot.log           gdm                 ppp                tallylog                Xorg.1.log.old
    boot.log-20191115  glusterfs           qemu-ga            tuned                   Xorg.2.log
    boot.log-20191116  grubby_prune_debug  rhsm               vmware-vgauthsvc.log.0  Xorg.9.log
    btmp               'httpd'               sa                 vmware-vmsvc.log        yum.log
    chrony             lastlog             samba              vmware-vmusr.log
    cron               libvirt             secure             wpa_supplicant.log
    cups               maillog             speech-dispatcher  wtmp
    dmesg              messages            spooler            Xorg.0.log
    [root@localhost log]# cd httpd/
    [root@localhost httpd]# ls    '此時httpd沒有日誌文件'
    [root@localhost httpd]# 
    [root@localhost httpd]# systemctl start httpd.service     '開啓httpd'
    [root@localhost httpd]# ls
    access_log  error_log '出現日誌文件'
    [root@localhost httpd]# 
    [root@localhost httpd]# cat access_log    '查看訪問日誌'
    [root@localhost httpd]#
    [root@localhost httpd]# cat error_log     '查看錯誤日誌'
    [Sat Nov 16 20:43:17.040961 2019] [core:notice] [pid 14701] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
    [Sat Nov 16 20:43:17.041673 2019] [suexec:notice] [pid 14701] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
    AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
    [Sat Nov 16 20:43:17.049635 2019] [lbmethod_heartbeat:notice] [pid 14701] AH02282: No slotmem from mod_heartmonitor
    [Sat Nov 16 20:43:17.071383 2019] [mpm_prefork:notice] [pid 14701] AH00163: Apache/2.4.6 (CentOS) configured -- resuming normal operations
    [Sat Nov 16 20:43:17.071420 2019] [core:notice] [pid 14701] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
    [root@localhost httpd]# systemctl stop firewalld.service  '關閉防火牆'
    [root@localhost httpd]# setenforce 0  
    [root@localhost httpd]# 
    [root@localhost httpd]# ifconfig
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
          inet 192.168.139.153  netmask 255.255.255.0  broadcast 192.168.139.255
          inet6 fe80::413b:c9ad:e0e:1afc  prefixlen 64  scopeid 0x20<link>
          ether 00:0c:29:d6:c0:8a  txqueuelen 1000  (Ethernet)
          RX packets 291080  bytes 77990464 (74.3 MiB)
          RX errors 0  dropped 0  overruns 0  frame 0
          TX packets 327629  bytes 19778549 (18.8 MiB)
          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

理論+實操:深刻理解Linux文件系統與日誌分析

[root@localhost httpd]# cat access_log '再次查看訪問日誌,有記錄了'
192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET / HTTP/1.1" 403 4897 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/bootstrap.min.css HTTP/1.1" 200 19341 "http://192.168.139.153/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/open-sans.css HTTP/1.1" 200 5081 "http://192.168.139.153/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /images/apache_pb.gif HTTP/1.1" 200 2326 "http://192.168.139.153/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /images/poweredby.png HTTP/1.1" 200 3956 "http://192.168.139.153/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.woff HTTP/1.1" 404 239 "http://192.168.139.153/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.woff HTTP/1.1" 404 241 "http://192.168.139.153/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://192.168.139.153/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.ttf HTTP/1.1" 404 240 "http://192.168.139.153/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
192.168.139.1 - - [16/Nov/2019:20:49:35 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.ttf HTTP/1.1" 404 238 "http://192.168.139.153/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
::1 - - [16/Nov/2019:20:49:43 +0800] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.6 (CentOS) (internal dummy connection)"
::1 - - [16/Nov/2019:20:49:44 +0800] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.4.6 (CentOS) (internal dummy connection)"

3.3 日誌保存位置

  • 默認位於:/var/log 目錄下
  • 除非使用手動編譯安裝,能夠去指定路徑

3.4 主要日誌文件介紹

理論+實操:深刻理解Linux文件系統與日誌分析

4、內核及系統日誌

4.1 由系統服務 rsyslogd 統一管理

  • 軟件包: rsyslog-7.4.7-16.el7.x86_64
  • 主要程序: /sbin/rsyslogd
  • 配置文件: /etc/rsyslog.conf

4.2 日誌消息的級別

級別 嚴重程度 解釋
0 EMERG(緊急) 會致使主機系統不可用的狀況(基本上已經沒得救了,開機都開不了,服務器癱瘓這樣的嚴重程度)
1 ALERT(警告) 必須立刻採起措施解決的問題(兵臨城下,須要馬上解決的)
2 CRIT(嚴重) 比較嚴重的狀況(嚴重的錯誤,好比須要從新安裝服務)
3 ERR(錯誤) 運行出現錯誤(通常級別都設置在這個位置)
4 WARNING(提醒) 可能會影響系統功能的事件(勤快的都設置在這)
5 NOTICE(注意) 不會影響系統但值得注意
6 INFO(信息) 通常信息
7 DEBUG(調試) 程序或系統調試信息等(作測試使用這個級別)

4.3 日誌記錄的通常格式

理論+實操:深刻理解Linux文件系統與日誌分析

5、 用戶日誌分析

5.1 保存了用戶登陸、推出系統等相關信息

  • /var/log/lastlog:最近的用戶登陸事件
  • /var/log/wtmp:用戶登陸、註銷及系統開、關機事件
  • /var/run/utmp:當前登陸的每一個用戶的詳細信息
  • /var/log/secure:與用戶驗證相關的安全性事件

5.2 分析工具

  • users: users [選項]... [文件]
    <br/>根據文件判斷輸出當前有誰正登陸在系統上

​ 若是文件未予指定,則使用/var/run/utmp,/var/log/wtmp 是通用的相關文件。

  • who: who [選項]... [ 文件 | 參數1 參數2 ]
    顯示當前已登陸的用戶信息

​ -a, --all 等於-b -d --login -p -r -t -T -u 選項的組合
​ -b, --boot 上次系統啓動時間
​ -d, --dead 顯示已死的進程
​ -H, --heading 輸出頭部的標題列
​ -l,--login 顯示系統登陸進程
​ --lookup 嘗試經過 DNS 查驗主機名
​ -m 只面對和標準輸入有直接交互的主機和用戶
​ -p, --process 顯示由 init 進程衍生的活動進程
​ -q, --count 列出全部已登陸用戶的登陸名與用戶數量
​ -r, --runlevel 顯示當前的運行級別
​ -s, --short 只顯示名稱、線路和時間(默認)
​ -T, -w, --mesg 用+,- 或 ? 標註用戶消息狀態
​ -u, --users 列出已登陸的用戶
​ --message 等於-T
​ --writable 等於-T
​ --help 顯示此幫助信息並退出
​ --version 顯示版本信息並退出

  • w: 顯示已經登陸的用戶以及他們在作什麼

  • last:顯示最近登陸的用戶列表

  • lastb:顯示最近嘗試登錄但未登錄上的用戶列表
[root@localhost httpd]# last
root     pts/0        :0               Sat Nov 16 17:57   still logged in   
gsy      :1           :1               Fri Nov 15 09:45   still logged in   
root     pts/0        :0               Fri Nov 15 09:30 - 17:56 (1+08:26)   
root     :0           :0               Fri Nov 15 09:29   still logged in   
reboot   system boot  3.10.0-693.el7.x Fri Nov 15 09:20 - 20:58 (1+11:38)   
root     pts/0        :0               Fri Nov 15 08:50 - 09:19  (00:28)    
root     :0           :0               Fri Nov 15 08:50 - down   (00:29)    
reboot   system boot  3.10.0-693.el7.x Fri Nov 15 08:49 - 09:19  (00:29)    
root     pts/0        :0               Fri Nov 15 08:32 - 08:47  (00:14)    
root     :0           :0               Fri Nov 15 08:32 - crash  (00:16)    
reboot   system boot  3.10.0-693.el7.x Fri Nov 15 08:31 - 09:19  (00:47)    
reboot   system boot  3.10.0-693.el7.x Thu Nov 14 20:18 - 08:24  (12:06)    
root     pts/0        :0               Thu Nov 14 19:46 - 20:17  (00:31)    
root     :0           :0               Thu Nov 14 19:46 - down   (00:31)    
reboot   system boot  3.10.0-693.el7.x Thu Nov 14 19:45 - 20:17  (00:32)    
root     pts/1        :1               Thu Nov 14 19:11 - 19:42  (00:31)    
root     :1           :1               Thu Nov 14 19:10 - crash  (00:34)    
gsy      pts/1        :0               Thu Nov 14 17:33 - 17:33  (00:00)    
gsy      pts/0        :0               Thu Nov 14 17:26 - 19:42  (02:15)    
gsy      pts/0        :0               Fri Nov  1 08:58 - 08:59  (00:00)    
gsy      pts/0        :0               Wed Oct 23 13:46 - 13:46  (00:00)    
gsy      :0           :0               Wed Oct 23 13:44 - crash (22+06:00)  
reboot   system boot  3.10.0-693.el7.x Wed Oct 23 13:42 - 20:17 (22+06:35)  

wtmp begins Wed Oct 23 13:42:11 2019

5.4 由相應的應用程序獨立進行管理

  • Web服務:/var/log/httpd/
    • access_log、error_log
  • 代理服務:/var/log/squid/
    • access/log、cacge.log
  • FTP服務:/var/log/xferlog

5.5 分析工具

  • 文本查看、grep過濾檢測、Webmin管理套件中查看
  • awk、swd等文本過濾、格式化編輯工具
  • Webalizer、Awstats(圖形化)等專用日誌分析工具

5.6 日誌管理策略

  • 及時作好備份和歸檔
  • 延長日誌保存期限
  • 控制日誌訪問權限
    • 日誌中可能會包含各種敏感信息,如帳戶、口令等
  • 集中管理日誌
    • 將服務器的日誌文件發送到統一的日誌文件服務器
    • 便於日誌信息的統一收集、整理和分析
    • 杜絕日誌信息的意外丟失、惡意篡改或刪除
    • 集中管理日誌使用分佈式存儲的話會使用GFS或MFS

日誌文件的做用:能夠用來判斷服務器是否故障、用於備份的做用

小結:

  • block與iinode
  • 硬連接與軟鏈接
  • 恢復誤刪除的文件
  • Linux主要包含的日誌文件
  • Linux系統的日誌消息級別
  • Linux系統中用戶日誌的查詢命令
    • who、w、users、last、lastb

6、實操

6.1:xfs 恢復

新加一塊測試盤

理論+實操:深刻理解Linux文件系統與日誌分析


[root@localhost ~]# init 6  '關機重啓'
[root@localhost ~]# fdisk /dev/sdb  '給磁盤分區'
[root@localhost ~]# mkfs.xfs /dev/sdb1  '格式化磁盤'
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@localhost ~]# mkdir /ceshi    '建立測試掛載點'
[root@localhost ~]# vim /etc/fstab  '編輯掛載點配置文件'

/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1       /ceshi  xfs     defaults        0       0
:wq
[root@localhost ~]# mount -a    '從新掛載'
[root@localhost ~]# df -Th  '查看'
文件系統                類型      容量  已用  可用 已用% 掛載點
/dev/mapper/centos-root xfs        20G  4.5G   16G   23% /
devtmpfs                devtmpfs  977M     0  977M    0% /dev
tmpfs                   tmpfs     993M     0  993M    0% /dev/shm
tmpfs                   tmpfs     993M  9.0M  984M    1% /run
tmpfs                   tmpfs     993M     0  993M    0% /sys/fs/cgroup
/dev/sda1               xfs       6.0G  161M  5.9G    3% /boot
/dev/mapper/centos-home xfs        10G   57M   10G    1% /home
tmpfs                   tmpfs     199M  4.0K  199M    1% /run/user/42
tmpfs                   tmpfs     199M   20K  199M    1% /run/user/0
/dev/sr0                iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1               xfs        20G   33M   20G    1% /ceshi '已掛載上'
[root@localhost ~]# cd /ceshi   '切換到測試掛載點'
[root@localhost ceshi]# cp /etc/passwd /etc/shadow ./   '複製帳號文件到/ceshi下'
[root@localhost ceshi]# ls
passwd  shadow
[root@localhost ceshi]# mkdir test  '建立一個test目錄'
[root@localhost ceshi]# mv sh* test '把shadow移動到test內'
[root@localhost ceshi]# ls
passwd  test
[root@localhost ceshi]# ls test
shadow
[root@localhost ceshi]# xfsdump -f /opt/xfs_dump /ceshi '備份文件到/opt/下,名爲xfs_dump'
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control

 ============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
 -> xfs_dump
session label entered: "xfs_dump"   '輸入會話標籤爲xfs_dump'

 --------------------------------- end dialog ---------------------------------

xfsdump: level 0 dump of localhost.localdomain:/ceshi
xfsdump: dump date: Sat Nov 16 21:50:26 2019
xfsdump: session id: c175a633-fd65-433f-ac2e-a1a18ae5f686
xfsdump: session label: "xfs_dump"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 29952 bytes
xfsdump: /var/lib/xfsdump/inventory created

 ============================= media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
 -> /ceshi
media label entered: "/ceshi"   '輸入媒體標籤'

 --------------------------------- end dialog ---------------------------------

xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 27128 bytes
xfsdump: dump size (non-dir files) : 4160 bytes
xfsdump: dump complete: 62 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/xfs_dump OK (success)
xfsdump: Dump Status: SUCCESS   '反饋成功'
[root@localhost ceshi]# ls /opt/
abc.txt  rh  xfs_dump   '備份文件已作好'
[root@localhost ceshi]# rm -fr *    '刪掉源文件'
[root@localhost ceshi]# ls
[root@localhost ceshi]# xfsrestore -f /opt/xfs_dump /ceshi  '把在/opt/下面的備份文件xfs_dump還原'
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.4 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: localhost.localdomain
xfsrestore: mount point: /ceshi
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Sat Nov 16 21:50:26 2019
xfsrestore: level: 0
xfsrestore: session label: "xfs_dump"
xfsrestore: media label: "/ceshi"
xfsrestore: file system id: 30939ae0-e0df-4561-b8bc-fc4ebe99c7f2
xfsrestore: session id: c175a633-fd65-433f-ac2e-a1a18ae5f686
xfsrestore: media id: c4244361-30d3-4df5-9197-e6712eb8d8bd
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 2 directories and 3 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /opt/xfs_dump OK (success)
xfsrestore: Restore Status: SUCCESS     '反饋成功'
[root@localhost ceshi]# ls
passwd  test        '查看發現存在'
[root@localhost ceshi]#

6.2 EXT4 文件恢復

依舊是建立一塊新磁盤,從新啓動

理論+實操:深刻理解Linux文件系統與日誌分析


[root@gsy ~]# df -Th    '查看yum私有倉庫是否掛載'
Filesystem              Type     Size  Used Avail Use% Mounted on
/dev/sda2               ext4      20G  3.2G   16G  18% /
tmpfs                   tmpfs    996M  224K  996M   1% /dev/shm
/dev/sda1               ext4     5.8G  168M  5.4G   3% /boot
/dev/sda3               ext4     9.7G  150M  9.0G   2% /home
/dev/sr0                iso9660  3.6G  3.6G     0 100% /media/RHEL_6.5 x86_64 Disc 1
//192.168.254.10/linuxs cifs     455G   90G  366G  20% /linuxs
/dev/sr0                iso9660  3.6G  3.6G     0 100% /yumcangku

[root@gsy Packages]# rpm -ivh e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm  '安裝環境包'
warning: e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
    package e2fsprogs-libs-1.41.12-18.el6.x86_64 is already installed
[root@gsy Packages]# rpm -ivh libcom_err-devel-1.41.12-18.el6.x86_64.rpm 
warning: libcom_err-devel-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
    package libcom_err-devel-1.41.12-18.el6.x86_64 is already installed

[root@gsy Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm 
warning: e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
    package e2fsprogs-devel-1.41.12-18.el6.x86_64 is already installed
[root@gsy Packages]# mkdir /linuxs  '建立掛載點'
[root@gsy Packages]# mount //192.168.254.10/linuxs /linuxs  
'源地址是個人共享文件夾,想知道如何配置共享文件夾能夠去看個人博客,我會在評論中附上對應博客地址'
[root@gsy Packages]# cd /linuxs
[root@gsy linuxs]# ls
apr-1.4.6.tar.gz       extundelete-0.2.4.tar.bz2  john-1.8.0.tar.gz
apr-util-1.4.1.tar.gz  httpd-2.4.2.tar.gz
[root@gsy linuxs]# tar xjvf extundelete-0.2.4.tar.bz2  -C /mnt  '解壓extundelete'
[root@gsy linuxs]# cd /mnt
[root@gsy mnt]# ls
extundelete-0.2.4
[root@gsy mnt]# cd extundelete-0.2.4/   '切換到解壓包內'
[root@gsy extundelete-0.2.4]# ls
acinclude.m4  config.h     config.status  depcomp     Makefile     missing  stamp-h1
aclocal.m4    config.h.in  configure      install-sh  Makefile.am  README
autogen.sh    config.log   configure.ac   LICENSE     Makefile.in  src
[root@gsy extundelete-0.2.4]# yum install gcc gcc-c++ -y    '安裝手工編譯安裝工具'
[root@gsy extundelete-0.2.4]# ./configure   '配置'
Configuring extundelete 0.2.4
Writing generated files to disk
[root@gsy extundelete-0.2.4]# make  
make -s all-recursive
Making all in src
[root@gsy extundelete-0.2.4]# make install  '編譯'
Making install in src
  /usr/bin/install -c extundelete '/usr/local/bin'
[root@gsy extundelete-0.2.4]# fdisk /dev/sdb    '建立磁盤分區,默認便可'
[root@gsy extundelete-0.2.4]# mkfs -t ext4 /dev/sdb1    '格式化,磁盤格式爲ext4'
mke2fs 1.41.12 (17-May-2010)
文件系統標籤=
操做系統:Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5241198 blocks
262059 blocks (5.00%) reserved for the super user
第一個數據塊=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000

正在寫入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@gsy extundelete-0.2.4]# mkdir /data   '建立磁盤掛載點'
[root@gsy extundelete-0.2.4]# mount /dev/sdb1 /data
[root@gsy extundelete-0.2.4]# df -Th
Filesystem              Type     Size  Used Avail Use% Mounted on
/dev/sda2               ext4      20G  3.2G   16G  18% /
tmpfs                   tmpfs    996M  224K  996M   1% /dev/shm
/dev/sda1               ext4     5.8G  168M  5.4G   3% /boot
/dev/sda3               ext4     9.7G  150M  9.0G   2% /home
/dev/sr0                iso9660  3.6G  3.6G     0 100% /media/RHEL_6.5 x86_64 Disc 1
//192.168.254.10/linuxs cifs     455G   90G  366G  20% /linuxs
/dev/sr0                iso9660  3.6G  3.6G     0 100% /yumcangku
/dev/sdb1               ext4      20G  172M   19G   1% /data
[root@gsy extundelete-0.2.4]# cd /data
[root@gsy data]# ls
lost+found
[root@gsy data]# echo a>a
[root@gsy data]# echo a>b   '建立測試文件'
[root@gsy data]# echo c>c
[root@gsy data]# ls
a  b  c  lost+found
[root@gsy data]# rm -rf b   '刪掉一個'
[root@gsy data]# ls 
a  c  lost+found

[root@gsy data]# cd ../
[root@gsy /]# umount /data  '先取消掛載,不要再再裏面寫東西,以避免覆蓋'
[root@gsy /]# extundelete /dev/sdb1 --restore-all   '全盤恢復'
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 29 descriptors loaded.
Searching for recoverable inodes in directory / ... 
0 recoverable inodes found.
Looking through the directory structure for deleted files ... 
0 recoverable inodes still lost.    
No files were undeleted.    ''沒有恢復成功
[root@gsy /]# cd
[root@gsy ~]# mount /dev/sdb1 /data '再次掛載'
[root@gsy ~]# ls
anaconda-ks.cfg  install.log.syslog  模板  圖片  下載  桌面
install.log      公共的              視頻  文檔  音樂
[root@gsy ~]# ls /data
a  c  lost+found
[root@gsy ~]# rm -rf /data/a /data/c    '再次刪除測試'
[root@gsy ~]# ls /data
lost+found
[root@gsy ~]# umount /data
[root@gsy ~]# extundelete /dev/sdb1 --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 30 descriptors loaded.
Searching for recoverable inodes in directory / ... 
2 recoverable inodes found. '此次有反應了'
Looking through the directory structure for deleted files ... 
0 recoverable inodes still lost.
[root@gsy ~]# ls    '查看家目錄'
anaconda-ks.cfg  install.log.syslog  公共的  視頻  文檔  音樂
install.log      RECOVERED_FILES     模板    圖片  下載  桌面
[root@gsy ~]# ls RECOVERED_FILES/   '切換到恢復文件目錄中'
a  c
[root@gsy ~]# cd RECOVERED_FILES/
[root@gsy RECOVERED_FILES]# cp a c /mnt '把文件拷貝到/mnt'
[root@gsy RECOVERED_FILES]# ls /mnt
a  c  extundelete-0.2.4 '成功,回覆數據也是有概率,不是百分百成功的'
[root@gsy RECOVERED_FILES]#
相關文章
相關標籤/搜索