當前位置:
首頁 > 科技 > 數據科學家必備的21個命令行工具

數據科學家必備的21個命令行工具

選自active wizards

機器之心編譯

參與:蔣思源

在該篇文章中,我們將介紹用於快速分析存儲於文本文件(日誌、報文等等)中的數據的便利工具。

通常我們所需要的數據並不儲存在電腦本地中。所以首先,我們將探討如何訪問及使用遠程伺服器。因此,我們需要使用最適配的 SSH(安全外殼協議/Secure Shell:即一種加密網路協議,該協議專為遠程登錄會話和其他網路服務提供安全性的協議,可以有效防止遠程管理過程中的信息泄露問題。)

在 Ubuntu 終端中,你可以使用以下命令行在 SSH 協議下訪問遠程伺服器:

$ ssh user@host

$ ssh -p port host

採用 key 連接:

$ ssh -i key.pem user@host

遠程主機執行的命令行:

$ ssh -i key.pem user@host command

SSH Client 已經默認安裝在 Ubuntu 中;如果沒有的話,可以在終端使用以下命令行安裝:

command sudo apt-get install ssh

在 Windows 中

如果你使用的是微軟的 Windows 系統,那麼你需要安裝一個免費的 PuTTY 程序(地址:http://www.putty.org/)以保證 SSH 協議正常運行。為了使用 PuTTY 連接,我們需要經過以下幾個步驟:

1. 運行 PuTTY 並鍵入我們的連接設置:

主機名:example.com

埠:22 (保留默認設定)

連接類型:SSH(保留默認設定)

2. 點擊 Open 開始 SSH 會話框。

3. 一旦 SSH 連接已經打開,我們就會看到終端提示符會請求輸入用戶名。

4. 下一步,輸入我們的密碼。注意,當我們輸入密碼時,我們並不會看到任何游標移動或任何輸入符號(如:*******)。這是 PuTTY 標準安全的特性,請放心繼續輸入。

5. 現在我們可以開始輸入命令提示符了。

SSH 的重要特徵就是能創建安全通道。

在 Ubuntu 中

1. 網路到世界的通道:

ssh -f -N -R 22:192.168.0.1:22 username@1.1.1.1

在主機 1.1.1.1 上輸入:訪問主機 192.168.0.1

$ ssh localhost

設置:

R:執行遠程重定向(redirection)。當我們訪問遠程機器埠時,將會創建一個 SSH 通道(SSH-tunnel),並且連接將轉向特定的主機埠。

N:禁止遠程運行命令行。只有轉發埠時才起作用。

f:在遠程系統註冊之後立即轉入後台模式。

使用 SSH 通道非常有效的方式是使用通信加密(traffic encryption)。例如,如果我們使用的是開放網路,但並不希望其他人攔截我們的數據就可使用 SSH 通道。

2. 世界到網路的通道:

ssh -f -N -L 80:192.168.0.1:80 username@1.1.1.1

在你的主機輸入命令行:http://localhost:80

訪問網路主機 192.168.0.1,其位於主機 1.1.1.1 的後面。

設置:

L:執行一個本地埠轉發。當我們訪問本地機器的埠時,特定主機的主機埠將會在通道埠上創建。

從世界到網路的通道(反向通道)在我們需要訪問機器,但機器又被防火牆保護時需要。操作的原則即連接最開始是由遠程機器發起。在這樣的通道中,我們可以發送任何通信(traffic),而並不僅僅只是 SSH。

在 PuTTY 中使用 SSH 通道

In Connection -> SSH -> Tunnels, enter

源埠:22

目標埠:22

檢查 box 處於「Dynamic」狀態,並單擊「Add」按鈕。

在會話框中輸入要求的「Host Name」並選擇 SSH 協議。然後鍵入「Saved Sessions」名保存設置。例如,鍵入「HostName with ssh tunnel on 22」並點擊「Save」。雙擊主機名將創建連接。

一旦 SSH 連接已經創建了,我們就可以使用瀏覽器了。打開一個頁面,其中 IP 地址是已經確定的,現在我們就能看到地址定義為了遠程機器的 IP 地址。

現在已經連接了主機,我們也就可以操作它了。但還是有一些操作需要 root 許可權。為了接收到遠程主機的信息(如果主機的 root 許可權已經設置為允許),我們需要在終端中執行:

$ sudo -s

在輸入 root-user 密碼後,遠程主機的連接也就通過終端確定了。你將會得到 root 許可權:

我們現在已經了解了連接到一台主機所需要的一切,但這對於在主機上分析數據還是遠遠不夠的。因此,下面我們需要了解在遠程主機上獲取和處理數據的基本控制命令行。

在文件系統上工作

現在讓我們學一學如何在文件系統上處理數據。下面是所需要了解的命令行列表。

1. 在文件和文件夾系統工作

創建一個文件夾 dir_name:

mkdir dir_name

重命名文件夾 dir_name 為 dir_name2:

mv dir_name dir_name2

刪除文件夾/文件:

rm -rf dir_name

設置:

-r,-R:處理所有內嵌子目錄。

-i:顯示每一次處理變動的確認(confirmation)。

-f:如果錯誤由不存在的文件引起,不返回錯誤(false end);處理不需要確認。

移除所有以 file2017 為開頭的文件;符號*指代任意字元,我們可以將該符號用在任何地方指代任何缺失的字元:

rm -rf file2017*

創建文件 file_name.txt:

touch file_name.txt

重命名文件:

mv file_name.txt file_name2.txt

2. 許可權

ls -la:查看目錄下所有文件/文件夾的許可權和所有權

-l:key 擴展輸出

執行文件 file 的許可權:

chmod 777 file.sh

在文件夾 dir_name 中設定所有文件為 R:

chmod -R 777 dir_name - set access 777 recursively

查看更多請點擊: https://ru.wikipedia.org/wiki/Chmod。

3. 所有者/群組

設置文件 file.txt 的所有者和群組:

chown ubuntu:ubuntu file.txt

遞歸地設置文件夾的所有者和群組:

chown -R ubuntu:ubuntu dir_name

4. 查看磁碟空間

查看所有磁碟分區:

df -h

獲取文件夾大小:

du -sh dir_name/

獲取文件夾大小和子目錄大小:

du -h dir_name/*

獲得文件大小:

du -h filename

下面的命令行能獲取主機系統的信息:

查看可用隨機存儲器(RAM)和交換空間(swap)

free

控制台命令行,其顯示當前系統進程與信息的列表

top/htop

現在我們已經在文件系統上運行並獲取了我們需要的信息。不過在大多數情況下,這些並不是人類可讀的信息。因此我們需要一些工具幫助分析數據。

當我們需要分析信息,首先就需要找到它,通常使用命令行:

find / var -name search _name

如果名字太長或未知,同樣可以使用符號*。在該案例中,使用命令行:

find / var -name search_name*

我們可以在主機中查找認證日誌:

一旦我們搜到了所需的文件,通常打開查看是有必要的。我們可以使用以下命令行實現:

文件輸出目錄

cat file_name

file_name1 和 file_name2 合并為 file_name3

cat file_name1 file_name2 > file_name3

從 file_name 開始合并多個文件

cat file_name* > file_name_end

我們不僅同樣可以為文件重定向(redirect)輸出流,同時還能採用命令行用腳本完成:

重定向輸出到複寫文件

./some_script.sh > /path/to/file.txt

重定向輸出到添加文件中

./some_script.sh >> /path/to/file.txt

在 /dev/null 中輸出標準輸出(STDOUT)和誤差流(STDERR)

some command > /dev/null 2>&1

下一步是保存文件目錄

/var/log/auth.log

/var/log/auth.log.1

/home/auth.log

文件中進行更多的分析。

我們可以從輸出看到,有太多的信息我們並不需要。現在我們需要過濾獲得正好需要的信息,而該任務有一個很有用的 grep,句法展示為如下:

修剪 cat 的輸出以得到只有行的文件 some_line。

cat file_name | grep some_line

Grep 同樣能應用於命令行和腳本:

輸出只包含誤差的字元串

python run_sum_script.py | grep error

通過 sshd 濾波器,我們可以列印僅僅和 ssh 相關的授權記錄:

我們同樣能追蹤文件的修訂。當我們測試一個網頁時,該方法是十分有效的。所以當查詢日誌或查看新的授權記錄時,我們能「抓取」它。

該命令行將列印第三方應用的新紀錄到文件中。

tail -f some_web_server_log

該命令同樣能連同 grep 一起使用。

列印包含誤差的新紀錄

tail -f some_web_server_log | grep error

讓我們在操作中查看一下 tail。首先,設置追蹤文件

/var/log/auth.log

並使用命令行 tail

-f /var/log/auth.log | grep sshd

在每一個新連接都通過 ssh 連接到主機後,我們將顯示信息和授權記錄。

另一個高效的文件文本分析工具是 Awk。在該工具的幫助下,我們能輕易地處理任何文本文件格式。Awk 是一種文本語境搜索工具。現有一些方式運行 Awk 程序。如果程序非常短,那麼就很容易將其包含在命令行中來運行 Awk。就如同:

awk program input-file1 input-file2

若需要更多的信息,請閱讀以下指南:http://www.gnu.org/software/gawk/manual/gawk.html

我們能使用 Awk 查看什麼時候用戶使用命令行通過 ssh 取得了連接。

$ awk /sshd/ && /pam_unix/ /var/log/auth.log

同樣還有一個高效的命令 sed。該命令複製文件(默認標準輸入)到標準輸出,並通過放置在 script(批處理文件或行編輯器 [而不是 shell])中的命令編輯它們。在 flag -f 命令下,採取圖像 sfilefile。如果這裡只有一個設置 -e script,那麼-e flag 就能夠省去。Script 由編輯命令組成,一行一條,並以如下格式:

[addr [, addr]] cmd [args]

「Sed」循環地轉變一個輸入字元串為輸出。

例如:

將 report.txt 文件中每一個 John 替換為 Nick。

sed s/Nick/John/g report.txt

移除搜索到的行

who | sed 2,4d

等等

考慮一些有用的命令行幫助遠程主機的操作。Tar 和 zip 文檔常常用於保存空間和流量(traffic)。下面的命令行都是用來處理這些的:

對於 tar:

在壓縮時忽略示值誤差(reading errors)。

--ignore-failed-read

c:創建新的存檔。

z:使用 gzip 壓縮一個文檔。

f:使用文檔文件。

對於多目錄

x:抽取一個文檔

z:使用 gzip 解壓縮一個文檔

f:使用文檔文件

對於 zip:

壓縮文件

zip file-or-folder-to-archive new-zip-file-name.zip

解壓縮文件

unzip -d new-zip-file-name.zip

其中-d destination_folder

當然,在遠程主機上工作不能在沒有文件轉移(在本地計算機和遠程主機間)的情況下完成。為了完成這個,我們能使用以下命令:

下載 tar(從本地機器粘貼)

scp -r (recursive) username@server:(remote location) (local location

上傳文件到遠程伺服器中

scp -r (local location) username@server:(remote location)

上文中我們藉助 awk 命令的幫助通過 ssh 已經接受到了連接與非連接用戶的時間。現在我們可以將其全部保存到文件中,並壓縮為 tar 文件上傳。

結語

在這篇文章中我們想要展示命令行介面(CLI)的多種可能性以及其如何能在數據科學上對我們有所幫助。你肯定在命令行上花了很多時間,本文旨在幫助你理解工作中使用的基本命令。

每個工具都有其用武之地,其與更大流程的結合之也會變得越發強大。現在我們有很好的了解運用 grep、sed 和 awk 等優秀的工具。在利用 SSH 協議的安全通道之後,這些工具變得越發重要,我們也希望各位讀者能高效地利用它們處理數據。

期貨實戰訓練營-第七期(網路課程)

K線組合與均線形態的重疊效果

單日操作倉差與品種關係

均線、K線機會濾網效果

止損五法……

2017年6月5日開始上課

本培訓模式持續一個月(四個星期)

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 大數據實驗室 的精彩文章:

2017 年沃爾夫數學獎得主 Charles Fefferman 自述
25個已被證實的偽科學現象
程序員掉入傳銷用代碼「求救」 ,同事「秒懂」
柯潔輸了會哭,但AlphaGo贏了並不會笑
行情起波瀾,該如何操作——股票與股指期貨日內交易訓練營

TAG:大數據實驗室 |

您可能感興趣

數據科學家必用的25個深度學習的開放數據集!
數據科學家的命令行技巧
數據科學家必備的10種機器學習演算法
工業4.0時代下的數據科學家
智能家:美國50個最棒的工作 數據科學家位居首位
2000多位科學家的「科學秀」
數據分析師、數據科學家、大數據專家三個職位的區別
科學家發現100多個可能擁有生命宜居衛星的氣體巨行星
科學家利用人工智慧發現近6000 種未知病毒
迄今科學家困擾的15種謎團!
科學家有望復活已經滅絕700年的鳥類
人才缺口高達25萬,中位數工資70萬,數據科學家在美國最搶手
閉關4年,投入8億資金,500位頂級數據科學家完成了一個「臟活兒」
殺人機器人被禁止!90多個國家,2000多名科學家共同簽署協議!
科學家新發現939個與人類智力相關的基因
3.8 女神節,致敬中國化學化工界這14位女神科學家
全球最頂尖的1000名計算機科學家,中國大陸竟只有11位
科學家評出最健康的100種食物下
研究報道:科學家有望復活已經滅絕700年的鳥類
數據科學與數據科學家