数据整理与命令行环境
數據整理
正則表達式
介紹
- 正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等
- 正則表達式通常以(盡管并不總是) / 開始和結束
簡單字符
- 沒有特殊意義的字符都是簡單字符,簡單字符就代表自身,絕大部分字符都是簡單字符
普通字符
| [ABC] | 匹配 [...] 中的所有字符,例如 [aeiou] |
| [^ABC] | 匹配除了 [...] 中字符的所有字符,例如 [^aeiou] |
| [A-Z] | [A-Z] 表示一個區間,匹配所有大寫字母,[a-z] 表示所有小寫字母 |
| . | 匹配除換行符(\n、\r)之外的任何單個字符,相等于 [^\n\r] |
| [\s\S] | 匹配所有。\s 是匹配所有空白符,包括換行,\S 非空白符,不包括換行 |
| \w | 匹配字母、數字、下劃線。等價于 [A-Za-z0-9] |
元字符
| ^ | 匹配行首字符 | ^x | 以字符x開始的字符串 |
| $ | 匹配行尾字符 | x$ | 以字符x結尾的字符串 |
| . | 匹配除換行符之外的任意單個字符 | l..e | love,life,live … |
| ? | 匹配任意一個可選字符 | xy? | x,xy |
| * | 匹配前面字符零次或多次重復 | xy* | x,xy,xyy,xyyy … |
| + | 匹配前面字符一次或多次重復 | xy+ | xy,xyy,xyyy … |
| […] | 匹配任意一個字符 | [xyz] | x,y,z |
| () | 對正則表達式進行分組 | (xy)+ | xy,xyxy,xyxyxy … |
| \{n\} | 匹配n次 | go\{2\}gle | |
| \{n,\} | 匹配最少n次 | go\{2,\}gle | google,gooogle,goooogle … |
| \{n,m\} | 匹配n到m次 | go\{2,4\} | google,gooogle,goooogle |
| {n} | 匹配n次 | go{2}gle | |
| {n,} | 匹配最少n次 | go{2,}gle | google,gooogle,goooogle … |
| {n,m} | 匹配n到m次 | go{2,4}gle | google,gooogle,goooogle |
| | | 以或邏輯連接多個匹配 | good|bon | 匹配good或bon |
| \ | 轉義字符 | \* | * |
- 凡是表示范圍的量詞,都優先匹配上限而不是下限
- 更多關于正則表達式,這里有一份簡單的教程,推薦學習
修飾符(標記)
- 標記也稱為修飾符,正則表達式的標記用于指定額外的匹配策略
- 標記不寫在正則表達式里,標記位于表達式之外
| i | ignore - 不區分大小寫 | 將匹配設置為不區分大小寫,搜索時不區分大小寫: A 和 a 沒有區別 |
| g | global - 全局匹配 | 查找所有的匹配項 |
| m | multi line - 多行匹配 | 使邊界字符 ^ 和 $ 匹配每一行的開頭和結尾,記住是多行,而不是整個字符串的開頭和結尾 |
| s | 特殊字符圓點 . 中包含換行符 \n | 默認情況下的圓點 . 是 匹配除換行符 \n 之外的任何字符,加上 s 修飾符之后, . 中包含換行符 \n |
排序命令
sort
sort [-fbnrtuk] [file or stdin]- -f:忽略大小寫
- -b:忽略最前面的空格字符部分
- -n:使用【純數字】進行排序(默認是以文字形式來排序的)
- -r:反向排序
- u:相同的數據中,僅出現一行代表
- -t:分隔符號,默認是用[Tab]鍵來分隔
- -k:以哪個區間(field)來進行排序的意思
uniq
- 排序完成后,將重復的數據僅列出一個顯示
- -i:忽略大小寫
- -c:進行計數
Sed
介紹
- Sed是一種功能強大的流式文本編輯器
- 每次僅讀取一行內容
- Sed 默認不會直接修改源文件數據,而是會將數據復制到緩沖區中,修改也僅限于緩沖區中的數據
- Sed 主要用來自動編輯一個或多個文件、簡化對文件的反復操作、編寫轉換程序等
常用命令
替換
sed 's/book/books/' file # book部分是我們需要使用的正則表達式 # books是用于替換匹配結果的文本文本注入
sed -i 's/book/books/g' file # 使用后綴 /g 標記會替換每一行中的所有匹配 # 匹配file文件中每一行的所有book替換為books打印特定的行
sed -n 's/test/TEST/p' file # 表示只打印那些發生替換的行命令行環境
任務控制
-
Shell使用Unix提供的信號機制執行進程間通信
-
當一個進程接收到信號時,它會停止執行、處理該信號并基于信號傳遞的信息來改變其執行
-
<Ctrl-C>:結束進程
-
<Ctrl-Z>:暫停進程
-
fg:前臺繼續
-
bg:后臺繼續
jobs
- 列出當前終端會話中尚未完成的全部任務
- 基本格式:
- 常用選項及含義
| -l | 列出進程的 PID 號 |
| -n | 只列出上次發出通知后改變了狀態的進程 |
| -p | 只列出進程的 PID 號 |
| -r | 只列出運行中的進程 |
| -s | 只列出已停止的進程 |
&后綴
- &后綴讓命令直接在后臺運行
- 一般格式:
- 注意,后臺的進程仍然是終端進程的子進程,一旦關閉終端,后臺的進程也會停止
nohup
- 用于在系統后臺不掛斷地運行命令,退出終端不會影響程序的運行
- nohup 命令,在默認情況下(非重定向時),會輸出一個名叫 nohup.out 的文件到當前目錄下,如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中
- 一般格式:
終端多路復用
介紹
- 在終端同時執行多個任務
- 例如:在終端運行編輯器,同時在終端的另一側執行程序
tmux
- 我們每次打開一個 終端窗口 (screen),可以看作在終端窗口和用戶之間建立了一次 會話 (session),用戶在終端窗口中輸入命令執行會創建 進程 ,默認情況下窗口和會話是“綁定的”,也就是說窗口關閉,會話及會話下面的所有進程都會結束。我們經常通過ssh遠程連接到服務器,并且執行一些長時間運行的程序,如果網絡斷開,終端窗口關閉,那么與該窗口關聯的會話及其下面的進程都會關閉,這是十分不方便的。
- tmux可以允許我們基于面板和標簽分割出多個終端窗口,這樣便可以同時與多個shell會話進行交互
- tmux可以將窗口和會話分離,窗口的關閉不會影響到會話的狀態,會話中運行的進程也不會被中止,在合適的時候,可以新建窗口連接到之前的會話 。
結構和工作流
會話(session)
- 每一個會話都是一個獨立的工作區,其中包含一個或多個窗口
- tmux 開始一個新的會話
- tmux new -s name 以指定名稱開始一個新的會話
- tmux ls 列出當前所有會話
窗口(window)
- 相當于編輯器或是瀏覽器中的標簽頁,從視覺上將一個會話分割為多個部分
- <Ctrl-B> c 創建一個新窗口,使用<Ctrl-D> 關閉
- <Ctrl-B> N 跳轉到第N個窗口
- <Ctrl-B> p 切換到前一個窗口
- <Ctrl-B> n 切換到下一個窗口
- <Ctrl-B> ,重命名當前窗口
- <Ctrl-B> w 列出當前所有窗口
面板(pan)
-
像Vim中的分屏一樣,面板使我們可以在一個屏幕里顯示多個shell
-
<Ctrl-B> " 水平分割
-
<Ctrl-B> % 垂直分割
-
<Ctrl-B> <方向> 切換到指定方向的面板
-
<Ctrl-B> z 切換當前面板的縮放
-
<Ctrl-B> <space> 在不同的面板排布間切換
-
tmux快速入門教程請看這里,以及這里(包含screen命令)
別名
alias
- 對命令重命名
- 解除使用
- 列出目前已有的命令別名
注意,在默認情況下shell并不會保存別名,為了讓別名持續生效,需要將配置放進shell的啟動文件里
遠端設備
SSH服務
簡介
- SSH 是 Secure Shell protocol 的簡寫 (安全的殼程序協議),它可以透過數據封包加密技術,將等待傳輸的封包加密后再傳輸到網絡上
連接服務器
- 一般格式
- 直接聯機登陸到對方主機
- 服務器可以通過URL指定(例如bar.mit.edu),也可以使用IP指定(例如foobar@192.168.1.42)
密鑰
簡介
- 公鑰 (public key):提供給遠程主機進行數據加密的行為,也就是說,大家都能取得你的公鑰來將數據加密的意思
- 私鑰 (private key):遠程主機使用你的公鑰加密的數據,在本地端就能夠使用私鑰來進行解密。由于私鑰是這么的重要, 因此私鑰是不能夠外流的!只能保護在自己的主機上
- 由于每部主機都應該有自己的密鑰 (公鑰與私鑰),且公鑰用來加密而私鑰用來解密, 其中私鑰不可外流。但因為網絡聯機是雙向的,所以,每個人應該都要有對方的『公鑰』
密鑰生成
- 用戶的密鑰一般都放在主目錄的.ssh目錄里面
基于密鑰的認證機制
-
用戶公鑰保存在服務器的~/.ssh/authorized_keys文件。你要以哪個用戶的身份登錄到服務器,密鑰就必須保存在該用戶主目錄的~/.ssh/authorized_keys文件。只要把公鑰添加到這個文件之中,就相當于公鑰上傳到服務器了
-
ssh 會查詢~/.ssh/authorized_keys 來確認哪些用戶可以被允許登陸
- 注意,authorized_keys文件的權限要設為644,即只有文件所有者才能寫。如果權限設置不對,SSH 服務器可能會拒絕讀取該文件
通過SSH復制文件
模擬 FTP 的文件傳輸方式: sftp
- 這個指令的用法與 ssh 很相似,只是 ssh 是用在登入而 sftp 在上傳/下載文件而已
針對遠方服務器主機 (Server) 的命令
- 常規Linux命令
針對本機 (Client) 的命令
- 在命令前面加上l(L的小寫)
針對資料上傳/下載的命令
| 將檔案由遠程主機下載回來 | get [遠程主機目錄或檔案] [本機] get [遠程主機目錄或檔案] 若是這種格式,則檔案會放置在目前本機所在的目錄當中!可以使用通配符,例如: get * get *.rpm 亦是可以的格式! |
例如:
- 假設 localhost 為遠程服務器,且服務器上有 student 這個使用者。你想要 (1)將本機的 /etc/hosts 上傳到 student 家目錄,并 (2)將 student 的 .bashrc 復制到本機的 /tmp 底下
檔案異地直接復制: scp
- 通常使用 sftp 是因為可能不知道服務器上面有什么檔名的檔案存在,如果已經知道服務器上的檔案檔名了, 那么最簡單的文件傳輸則是透過 scp 這個指令
端口轉發
本地端口轉發
- 通過本地計算機訪問遠程計算機
注意,本地端口轉發采用 HTTP 協議,不用轉成 SOCKS5 協議
遠程端口轉發
- 通過遠程計算機訪問本地計算機
SSH配置
-
服務器密鑰系統:/etc/ssh/ssh_host*
-
服務器公鑰記錄文件:~/.ssh/known_hosts
-
sshd 服務器細部設定:/etc/ssh/sshd_config
-
本機SSH配置:~/.ssh/config
-
關于SSH服務,這里有一份資料,這里的資源也挺不錯的。更多關于遠程聯機服務器,請看這里。
總結
以上是生活随笔為你收集整理的数据整理与命令行环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LVGL开发 | lv_lib_100a
- 下一篇: 南邮 ctf