日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据整理与命令行环境

發布時間:2024/3/24 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据整理与命令行环境 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據整理

正則表達式

介紹

  • 正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等
  • 正則表達式通常以(盡管并不總是) / 開始和結束

簡單字符

  • 沒有特殊意義的字符都是簡單字符,簡單字符就代表自身,絕大部分字符都是簡單字符
/abc/ // 匹配 abc /123/ // 匹配 123 /-_-/ // 匹配 -_- /夢幻/ // 匹配 夢幻

普通字符

字符描述
[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..elove,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\}glegoogle
\{n,\}匹配最少n次go\{2,\}glegoogle,gooogle,goooogle …
\{n,m\}匹配n到m次go\{2,4\}google,gooogle,goooogle
{n}匹配n次go{2}glegoogle
{n,}匹配最少n次go{2,}glegoogle,gooogle,goooogle …
{n,m}匹配n到m次go{2,4}glegoogle,gooogle,goooogle
|以或邏輯連接多個匹配good|bon匹配good或bon
\轉義字符\**
  • 凡是表示范圍的量詞,都優先匹配上限而不是下限
  • 更多關于正則表達式,這里有一份簡單的教程,推薦學習
a{1, 3} // 匹配字符串'aaa'的話,會匹配aaa而不是a a{1, 3}? // 匹配字符串'aaa'的話,會匹配a而不是aaa

修飾符(標記)

  • 標記也稱為修飾符,正則表達式的標記用于指定額外的匹配策略
  • 標記不寫在正則表達式里,標記位于表達式之外
修飾符含義描述
iignore - 不區分大小寫將匹配設置為不區分大小寫,搜索時不區分大小寫: A 和 a 沒有區別
gglobal - 全局匹配查找所有的匹配項
mmulti line - 多行匹配使邊界字符 ^ 和 $ 匹配每一行的開頭和結尾,記住是多行,而不是整個字符串的開頭和結尾
s特殊字符圓點 . 中包含換行符 \n默認情況下的圓點 . 是 匹配除換行符 \n 之外的任何字符,加上 s 修飾符之后, . 中包含換行符 \n

排序命令

sort

sort [-fbnrtuk] [file or stdin]
  • -f:忽略大小寫
  • -b:忽略最前面的空格字符部分
  • -n:使用【純數字】進行排序(默認是以文字形式來排序的)
  • -r:反向排序
  • u:相同的數據中,僅出現一行代表
  • -t:分隔符號,默認是用[Tab]鍵來分隔
  • -k:以哪個區間(field)來進行排序的意思
cat /etc/passwd | sort # 將記錄在/etc/passwd下的個人賬號進行排序 cat /etc/passwd | sort -t ':' -k 3 # 以:來分隔,以第三欄來排序

uniq

  • 排序完成后,將重復的數據僅列出一個顯示
uniq [-ic]
  • -i:忽略大小寫
  • -c:進行計數
last | cut -d ' ' -f1 | sort | uniq # 使用last將賬號列出,僅取出賬號欄,進行排序后僅取出一位 last | cut -d ' ' -f1 | sort | uniq -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

  • 列出當前終端會話中尚未完成的全部任務
  • 基本格式:
jobs [options]
  • 常用選項及含義
選項含義
-l列出進程的 PID 號
-n只列出上次發出通知后改變了狀態的進程
-p只列出進程的 PID 號
-r只列出運行中的進程
-s只列出已停止的進程

&后綴

  • &后綴讓命令直接在后臺運行
  • 一般格式:
./test.sh &
  • 注意,后臺的進程仍然是終端進程的子進程,一旦關閉終端,后臺的進程也會停止

nohup

  • 用于在系統后臺不掛斷地運行命令,退出終端不會影響程序的運行
  • nohup 命令,在默認情況下(非重定向時),會輸出一個名叫 nohup.out 的文件到當前目錄下,如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中
  • 一般格式:
nohup ./test.sh &

終端多路復用

介紹

  • 在終端同時執行多個任務
  • 例如:在終端運行編輯器,同時在終端的另一側執行程序

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

  • 對命令重命名
alias showmeit="ps -aux" # 注意,=兩邊是沒有空格的
  • 解除使用
unaliax showmeit
  • 列出目前已有的命令別名
alias

注意,在默認情況下shell并不會保存別名,為了讓別名持續生效,需要將配置放進shell的啟動文件里

遠端設備

SSH服務

簡介

  • SSH 是 Secure Shell protocol 的簡寫 (安全的殼程序協議),它可以透過數據封包加密技術,將等待傳輸的封包加密后再傳輸到網絡上

連接服務器

  • 一般格式
[root@www ~]# ssh [-f] [-o 參數項目] [-p 非正規埠口] [賬號@]IP [指令] 選項與參數: -f :需要配合后面的 [指令] ,不登入遠程主機直接發送一個指令過去而已; -o 參數項目:主要的參數項目有:ConnectTimeout=秒數 :聯機等待的秒數,減少等待的時間StrictHostKeyChecking=[yes|no|ask]:預設是 ask,若要讓 public key主動加入 known_hosts ,則可以設定為 no 即可。 -p :如果你的 sshd 服務啟動在非正規的埠口 (22),需使用此項目; [指令] :不登入遠程主機,直接發送指令過去。但與 -f 意義不太相同。
  • 直接聯機登陸到對方主機
ssh foo@bar.mit.edu # 嘗試以用戶名foo登陸服務器bar.mit.edu
  • 服務器可以通過URL指定(例如bar.mit.edu),也可以使用IP指定(例如foobar@192.168.1.42)

密鑰

簡介

  • 公鑰 (public key):提供給遠程主機進行數據加密的行為,也就是說,大家都能取得你的公鑰來將數據加密的意思
  • 私鑰 (private key):遠程主機使用你的公鑰加密的數據,在本地端就能夠使用私鑰來進行解密。由于私鑰是這么的重要, 因此私鑰是不能夠外流的!只能保護在自己的主機上
  • 由于每部主機都應該有自己的密鑰 (公鑰與私鑰),且公鑰用來加密而私鑰用來解密, 其中私鑰不可外流。但因為網絡聯機是雙向的,所以,每個人應該都要有對方的『公鑰』
# 產生新的服務器端的 ssh 公鑰與服務器自己使用的成對私鑰 [root@www ~]# rm /etc/ssh/ssh_host* # 刪除密鑰檔 [root@www ~]# /etc/init.d/sshd restart 正在停止 sshd: [ 確定 ] 正在產生 SSH1 RSA 主機密鑰: [ 確定 ] # 底下三個步驟重新產生密鑰! 正在產生 SSH2 RSA 主機密鑰: [ 確定 ] 正在產生 SSH2 DSA 主機密鑰: [ 確定 ] 正在激活 sshd: [ 確定 ] [root@www ~]# date; ll /etc/ssh/ssh_host* Mon Jul 25 11:36:12 CST 2011 -rw-------. 1 root root 668 Jul 25 11:35 /etc/ssh/ssh_host_dsa_key -rw-r--r--. 1 root root 590 Jul 25 11:35 /etc/ssh/ssh_host_dsa_key.pub -rw-------. 1 root root 963 Jul 25 11:35 /etc/ssh/ssh_host_key -rw-r--r--. 1 root root 627 Jul 25 11:35 /etc/ssh/ssh_host_key.pub -rw-------. 1 root root 1675 Jul 25 11:35 /etc/ssh/ssh_host_rsa_key -rw-r--r--. 1 root root 382 Jul 25 11:35 /etc/ssh/ssh_host_rsa_key.pub # 看一下上面輸出的日期與檔案的建立時間,剛剛建立的新公鑰、私鑰系統!

密鑰生成

  • 用戶的密鑰一般都放在主目錄的.ssh目錄里面
ssh-keygen -o -b 4096 [-t rsa|dsa] # 可選 rsa 或 dsa ssh-keygen -o -a 100 -t ed25519 ssh-keygen # 用預設的方法建立密鑰(rsa)

基于密鑰的認證機制

  • 用戶公鑰保存在服務器的~/.ssh/authorized_keys文件。你要以哪個用戶的身份登錄到服務器,密鑰就必須保存在該用戶主目錄的~/.ssh/authorized_keys文件。只要把公鑰添加到這個文件之中,就相當于公鑰上傳到服務器了

  • ssh 會查詢~/.ssh/authorized_keys 來確認哪些用戶可以被允許登陸

cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" # 文件不存在的情況下 cat .ssh/id_ed25519.pub | ssh foobar@remote 'cat >> ~/.ssh/authorized_keys' ssh-copy-id -i .ssh/id_ed25519.pub foobar@remote # 自動將公鑰拷貝到遠程服務器的~/.ssh/authorized_keys文件。如果~/.ssh/authorized_keys文件不存在,ssh-copy-id命令會自動創建該文件
  • 注意,authorized_keys文件的權限要設為644,即只有文件所有者才能寫。如果權限設置不對,SSH 服務器可能會拒絕讀取該文件

通過SSH復制文件

模擬 FTP 的文件傳輸方式: sftp

  • 這個指令的用法與 ssh 很相似,只是 ssh 是用在登入而 sftp 在上傳/下載文件而已
[root@www ~]# sftp student@localhost Connecting to localhost... student@localhost's password: <== 這里請輸入密碼啊! sftp> exit <== 這里就是在等待你輸入 ftp 相關指令的地方了!

針對遠方服務器主機 (Server) 的命令

  • 常規Linux命令

針對本機 (Client) 的命令

  • 在命令前面加上l(L的小寫)

針對資料上傳/下載的命令

將檔案由本機上傳到遠程主機put [本機目錄或檔案] [遠程]
put [本機目錄或檔案]
如果是這種格式,則檔案會放置到目前遠程主機的目錄下!
將檔案由遠程主機下載回來get [遠程主機目錄或檔案] [本機]
get [遠程主機目錄或檔案]
若是這種格式,則檔案會放置在目前本機所在的目錄當中!可以使用通配符,例如:
get *
get *.rpm
亦是可以的格式!

例如:

  • 假設 localhost 為遠程服務器,且服務器上有 student 這個使用者。你想要 (1)將本機的 /etc/hosts 上傳到 student 家目錄,并 (2)將 student 的 .bashrc 復制到本機的 /tmp 底下
[root@www ~]# sftp student@localhost sftp> lls /etc/hosts #先看看本機有沒有這個檔案 /etc/hosts sftp> put /etc/hosts #有的話,那就上傳吧! Uploading /etc/hosts to /home/student/hosts /etc/hosts 100% 243 0.2KB/s 00:00 sftp> ls #有沒有上傳成功?看遠程目錄下的文件名 hosts sftp> ls -a #那有沒有隱藏檔呢? . .. .bash_history .bash_logout .bash_profile .bashrc .mozilla hosts sftt> lcd /tmp #切換本機目錄到 /tmp sftp> lpwd #只是進行確認而已! Local working directory: /tmp sftp> get .bashrc #沒問題就下載吧! Fetching /home/student/.bashrc to .bashrc /home/student/.bashrc 100% 124 0.1KB/s 00:00 sftp> lls -a #看本地端檔案檔名 . .font-unix keyring-rNd7qX .X11-unix .. .gdm_socket lost+found scim-panel-socket:0-root .bashrc .ICE-unix mapping-root .X0-lock sftp> exit #離開吧!

檔案異地直接復制: scp

  • 通常使用 sftp 是因為可能不知道服務器上面有什么檔名的檔案存在,如果已經知道服務器上的檔案檔名了, 那么最簡單的文件傳輸則是透過 scp 這個指令
[root@www ~]# scp [-pr] [-l 速率] file [賬號@]主機:目錄名 <==上傳 [root@www ~]# scp [-pr] [-l 速率] [賬號@]主機:file 目錄名 <==下載 選項與參數: -p :保留原本檔案的權限數據; -r :復制來源為目錄時,可以復制整個目錄 (含子目錄) -l :可以限制傳輸的速度,單位為 Kbits/s ,例如 [-l 800] 代表傳輸速限 100Kbytes/s# 1. 將本機的 /etc/hosts* 全部復制到 127.0.0.1 上面的 student 家目錄內 [root@www ~]# scp /etc/hosts* student@127.0.0.1:~ student@127.0.0.1's password: <==輸入 student 密碼 hosts 100% 207 0.2KB/s 00:00 hosts.allow 100% 161 0.2KB/s 00:00 hosts.deny 100% 347 0.3KB/s 00:00 # 文件名顯示 進度 容量(bytes) 傳輸速度 剩余時間 # 你可以仔細看,出現的訊息有五個字段,意義如上所示。# 2. 將 127.0.0.1 這部遠程主機的 /etc/bashrc 復制到本機的 /tmp 底下 [root@www ~]# scp student@127.0.0.1:/etc/bashrc /tmp

端口轉發

本地端口轉發

  • 通過本地計算機訪問遠程計算機
ssh -L 8080:127.0.0.1:80 user@webserver # -L參數表示本地轉發,8080是本地端口,80是遠程端口 curl http://localhost:8080 # 訪問本機的8080端口,就是訪問webserver的80端口

注意,本地端口轉發采用 HTTP 協議,不用轉成 SOCKS5 協議

遠程端口轉發

  • 通過遠程計算機訪問本地計算機
ssh -R 10123:127.0.0.1:123 user@webserver # -R參數表示遠程端口轉發,10123是遠程端口,123是本地端口

SSH配置

  • 服務器密鑰系統:/etc/ssh/ssh_host*

  • 服務器公鑰記錄文件:~/.ssh/known_hosts

  • sshd 服務器細部設定:/etc/ssh/sshd_config

  • 本機SSH配置:~/.ssh/config

  • 關于SSH服務,這里有一份資料,這里的資源也挺不錯的。更多關于遠程聯機服務器,請看這里。

總結

以上是生活随笔為你收集整理的数据整理与命令行环境的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。