數據科學家必備的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年的鳥類
※數據科學與數據科學家