良許 | Linux下處理隱私騷操作!

每個人都有自己的隱私
尤其是數字信息時代更是如此
小到自己寫下的情書
大到公司商業機密
抑或是偷偷下載的日本XXX.avi

這些隱私
放桌面——找死
放某個隱祕目錄——麻煩
放垃圾筒……誰會這麼幹
真想有個工具
自動幫我壓縮
自動幫我放到安全位置

嗯……
良許今天就帶你實現這個過程

1. 工具安裝

要實現上述那個不爲人知的過程,我們需要安裝兩個工具:inotify-tools 和 gzip 。

如果你使用的是 Ubuntu 或者其它基於 Debian 的發行版,那麼可以使用 apt-get 命令安裝以上兩個工具。在其他 Linux 發行版上,則需要使用對應的包管理工具。

$ sudo apt-get install inotify-tools gzip

2. inotify-tools 使用詳解

顧名思義,inotify-tools 是包含了很多工具的工具集。我們首先來測試一下,如果一個目錄裏有新文件創建時,會捕捉到什麼事件。這裏我們將使用到一個名爲 inotifywatchinotify-tools 的工具。

我們先在任意位置創建一個名爲 incoming 的新目錄:

$ mkdir incoming

然後再執行以下命令開始監測此目錄:

$ inotifywatch -v incoming

這個命令將使用 inotify 工具來監視 incoming 目錄中的所有文件系統事件。我們使用這個工具的目的就是來監測在目標目錄下創建新文件時會有什麼事件產生。

在這裏,-v 選項打印工具的輸出信息。同時,它還有超時選項 -t ,但在這裏我們未指定,所以它將持續收集事件,直到我們按 Ctrl + C 纔會退出。

命令運行之後終端將會打印以下信息:

接下來,打開一個新的終端窗口並切換到剛剛建立的 incoming 目錄。然後再使用 touch 命令創建名爲 newfile 的新文件。

$ cd incoming/
$ touch newfile

現在我們再回到第一個終端窗口,按下 CTRL+C 停止 inotifywatch 命令。我們將得到以下信息:

在結果信息裏,我們可以看到 inotifywatch 捕獲到 4 個事件,包括:屬性、創建、打開、寫入並關閉。這 4 個事件都是由 touch newfile 這個命令產生的。

當然,這幾個事件都只是 inotifywatch 所能捕獲的衆多事件的一小部分,更多事件我們可以在它的主頁上查看。

但是,很多情況下我們並不需要太多事件。假如我們只對下面兩個事件感興趣:

  • create :在目標目錄中創建文件時
  • moved_to :當文件從另一個位置移動到目標目錄時

我們再來使用 inotifywatch 工具,但是這次只讓它監視這兩個事件。我們可以使用以下命令來達到這個目的:

$ inotifywatch -v -e create -e moved_to incoming

然後再切換到第二個終端窗口中,我們創建一個新的文件,再更改它的內容。

再之後,我們在 /tmp 目錄下隨便再創建個文件,再將它移動到目標目錄。整個過程如以下命令所示:

$ touch incoming/created
$ echo Testing123 >> incoming/created
$ touch /tmp/created2
$ mv /tmp/created2 incoming/

接着我們再返回第一個終端窗口,按下 CTRL + C 停止 inotifywatch 。我們將看到以下輸出:

從以上結果我們可以看出,inotifywatch 只捕獲了兩個事件:create 及 moved_to 。而對於其它事件,比如修改文件內容,則全部被忽略。

正是利用了 inotifywatch 的這個可以捕獲事件的特性,我們可以實現當一個目錄裏有新文件移入的時候,將其壓縮並放置到其它地方的目的。這樣我們就能實現將自己的私密文件丟到那個目錄,自動壓縮並存放到安全位置。當然,充分利用這些特性,我們可以實現更多好玩的功能。

3. 監測目錄並執行腳本

現在,我們來一步步實現上面所提到的需求。這裏我們使用到另外一個工具:inotifywait ,它的參數及使用方法與 inotifywatch 類似,當目錄裏創建了新文件或移入了其它位置的文件,它將執行我們所指定的腳本。

我們首先創建一個名爲 processed 的目錄,用來保存已經處理過的文件。

$ mkdir processed

然後,創建一個名爲 watch-incoming.sh 的腳本,並添加以下內容:

#!/bin/bash

TARGET=~/incoming/
PROCESSED=~/processed/

inotifywait -m -e create -e moved_to --format "%f" $TARGET \
    | while read FILENAME
        do
            echo Detected $FILENAME, moving and zipping
            mv "$TARGET/$FILENAME" "$PROCESSED/$FILENAME"
            gzip "$PROCESSED/$FILENAME"
        done

這個腳本里 inotifywait 使用了 -m 選項,表示監測到指定事件時執行後續的命令。在這條命令裏, inotifywait 只監測 create 和 moved_to 事件。當這兩個事件發生時,文件名都會傳遞給 read 命令並賦值給 FILENAME 變量,然後再執行while循環下的代碼塊:首先將文件移動到剛剛創建的 processed 目錄,然後再進行 gzip 壓縮。

我們爲該腳本賦予可執行權限,然後從主目錄運行這個腳本。

$ chmod u+x watch-incoming.sh
$ ./watch-incoming.sh

現在打開第二個終端窗口並在 incoming 目錄中創建一個新的文件。然後再列出 incoming 和 processed 目錄的內容,看看操作結束之後的結果。

腳本檢測到我們在 incoming 目錄下有新文件創建,將其複製到 processed 目錄中,然後使用 gzip 進行壓縮。

這個功能實現後,我們還可以 DIY 更多好玩的功能。例如,我們可以爲圖像文件添加水印,將原始視頻壓縮爲mp4格式,批量修改文件名,等等。不怕不實現,就怕腦門不夠大!

-----------------

我是良許,世界500強外企 Linux 開發工程師,專業生產 Linux 乾貨。歡迎關注我的公衆號「良許Linux」,回覆「1024」獲取最新最全的技術資料,回覆「入羣」進入高手如雲技術交流羣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章