ref: https://www.hwchiu.com/ping-implementation.html
本篇文章是難得的自產文章,該文章分享一下自己觀察不同 ping 指令與不同發行版本下的實作方式,主要探討的點是 ICMP 封包是如何產生的。
就我目前認知,目前至少有三種常見方式來設定 ping 指令讓其能夠順利收送 ICMP 封包。
常見的 TCP/UDP 應用程式實際上都是讓 Kernel 幫忙處理底層的 L3/L4 封包,使用者的應用程式則是專注於資料的交換與處理,簡單的說法就是專心處理 L7 資料。
但是 ICMP 封包不同於上述的 TCP/UDP 封包,一種方式就是透過 RAW Socket 的形式自行去拼湊組裝 ICMP 格式,自行處理一切封包的處理。
RAW Socket 本身也不允許每個使用者都能輕易開啟,必須要有相關的權限才可以執行,因此一種 PING 的實作方式就是透過 SetUID 的方式,讓所有能夠執行 ping 指令的使用者會短暫瞬間提權變成 Root 的身份
也因為是 Root 就可以順利的開啟 RAW Socket。
SetUID 強大且方便,簡簡單單就可以讓使用者瞬間變成 Root,但是也因為簡單好像就安全角度來看會覺得不太嚴謹,畢竟我想要的只是一個能夠開啟 RAW Socket 的權限,你去把整個 Root 都送給我。
因此第二種實作方式就是透過 Linux Capability 來達到更細緻化的權限控管,讓任何可以執行 ping 指令的使用者都可以短暫獲得 cap_net_raw 的權限,最終順利的開啟 RAW Socket
而第三種方式則是跳脫的權限的概念,與其透過 RAW Socket 來自行打造 ICMP 封包,不如讓 Linux Kernel 幫忙處理 ICMP 封包,ping 的程式只要跟 Kernel 要求建立一個基於 ICMP 協定的 socket 即可。
透過第三種方式最終可以達到 setuid-less 的架構,ping 的應用程式再也不需要任何的特殊權限,每個使用者都可以順利執行來收送 ICMP 封包。
文章內會針對三種方式進行實驗跟觀察,對 PING 指令有興趣別忘了參考看看
同時也有1部Youtube影片,追蹤數超過44萬的網紅MakeLearningFun,也在其Youtube影片中提到,Programming become more and more important nowadays. Some people may think it is different to learn, but actually it is not! With the right tools and ...
「linux less」的推薦目錄:
- 關於linux less 在 矽谷牛的耕田筆記 Facebook 的最佳貼文
- 關於linux less 在 矽谷牛的耕田筆記 Facebook 的最佳解答
- 關於linux less 在 Kewang 的資訊進化論 Facebook 的最佳解答
- 關於linux less 在 MakeLearningFun Youtube 的最讚貼文
- 關於linux less 在 How to use the more and less commands: 2-Minute Linux Tips 的評價
- 關於linux less 在 The 'less' command-line equivalent of 'tail -f' 的評價
- 關於linux less 在 Linux - 查看Log 的指令tail、multitail、less - 古古's Blog 的評價
- 關於linux less 在 linux - Less - search in multiple files at once - Stack Overflow 的評價
- 關於linux less 在 sharkdp/bat: A cat(1) clone with wings. - GitHub 的評價
linux less 在 矽谷牛的耕田筆記 Facebook 的最佳解答
本篇文章是個經驗分享文,作者分享使用 Docker 作為開發環境時值得注意的 Best practices,透過這些經驗分享希望能夠讓開發者少走一些冤枉路。
原文提出了 15 個經驗談,這邊幫大家節錄幾個,有興趣的可以點選原文瞭解更多!
1. One thing at a time
2. Be ephemeral
3. Utilize .dockerignore
4. Less is more
5. Secrets should be secret
6. PID 1 is your birth right
7. Share and Care
8. Vulnerability Scan
9. Tag like you mean it
10. Permissions are costly
11. Source of Truth
12. Always official
13. Don’t include debug
14. Use entry point script smartly
15. Size does matter
One thing at a time
建置 Image 的時候專注做好一件事情,每個 Image 應該有一個專心要解決的問題,譬如一個應用程式,一個小工具等。對於 Nginx 這類型的 Image 來說,應該沒有人會期望於裡面看到有 Apache 的應用程式吧?
Be ephemeral
這個主要探討的是該 Image 本身建置時應該要以 stateless 的概念去處理,未來不論是透過 docker 或是 Kubernetes 來管理部署時,Contaienr 都很有機會被重啟,每次的重啟都意味該容器是重新啟動。所以千萬不要讓你的 Image 變成多次重啟會導致應用程式出問題的形式,任何的這類型資料應該都要透過外部取得,不要塞到你的 Image 內
Utilize .dockerignore
善用 .dockerignore 這個檔案來將不必要的檔案從 build 過程給排除,使用方法與 .gitignore 類似。透過這個檔案的設定可以避免 docker build 的時候不會把一些過大或是完全不需要的檔案都送給 docker daemon,不當浪費時間也浪費空間。
Less is more
避免安裝任何無關或是非必要的套件到你的 image 中,特別是那些 "nice to have" 的理由。
註: 我個人是滿討厭把 Image 弄得很乾淨的,除錯什麼工具都沒有,連 ash/sh/busybox/bash 都沒有的 image 更是我討厭中的排行榜冠軍
Secrets should be secret
任何機密資訊都應該要於運行期間動態載入,而不是建置期間塞入。請使用其他工具譬如 Vault 來管理這些機密資訊,並且執行期間讓 Container 能夠存取到正確的值。
PID 1 is your birth right
Linux 環境下會使用 SIGTERN, SIGKILL 等相關的 Singal 來戳你的應用程式,請確保你運行的應用程式要能夠攔截這些訊號來處理並完成有效的 Graceful shutdown.
Share and Care
如果環境中有多個 Image 彼此有共享相同的工具與功能,與其每個 Image 都單獨建置維護不如建置一個 Base Image,接者讓所有要使用的 image 去載入使用即可。
透過這種方式可以讓整體的維護性與管理性更為簡單,每個 image 可以減少重複的程式碼,同時要升級時只要針對 base Image 處理即可。
https://medium.com/pradpoddar/avoid-costly-mistakes-using-advanced-docker-development-best-practices-acd812784109
linux less 在 Kewang 的資訊進化論 Facebook 的最佳解答
TL;DR
如果發現 hbase shell 在 scan 或 count 的筆數與你預期筆數不一致的話,就 split region 看看吧。
--- 以下是前言,還真長 XD ---
最近都在忙著新版本上線,所以小編也好一陣子沒發文了。不過這幾天有個有趣的案例,想跟大家分享一下。
有在看小編文章的大概會知道我們產品的資料庫是以 HBase 建置而成的,而 HBase 最重要的組成就是 rowkey 了。若 rowkey 設計錯誤輕微可以使用 column 來救,嚴重的甚至要砍掉整筆 row,重新設計 rowkey 才能解決。
兩年前在設計某 table 的 rowkey 時,不小心忘了對 rowkey 做 salt (HBase 基礎之一,避免 scan 時產生 hotspotting),如果又沒切 region 的話 (HBase 基礎之一,避免 scan 時產生 hotspotting),這些資料在建立時都會跑到同一個 region,在 scan 的時候效能會超差。
像這種例子就算使用 column 來救也完全沒辦法,所以小編就打算把整筆 row 砍掉重新把 salt 加上去。
--- 以下是追蹤過程 ---
原 rowkey 開頭及加上 salt 之後的新 rowkey 開頭如下:
* 原:A000001、新:DNhA000001
* 原:A000002、新:dMfA000002
* 原:A000003、新:p9OA000003
* 以此類推
原 rowkey 相同 pattern (A000XXX) 的 row 有 2000 萬筆 (在 hbase shell 內使用 count 來計算 table 的資料量),所以這次 rebuild 總共會刪除原 rowkey 共 2000 萬筆,新增新 rowkey 共 2000 萬筆。
在使用 HBase 的 Java API 執行增刪 rebuild 後,在 hbase shell 使用 count 計算 table 的資料量時卻只有 900 萬筆。一開始小編還以為是 compaction 跟 flush 的問題,所以強制對 table 做了下面幾個動作,以確保資料有在 HFile 裡面正確地寫入及刪除:
* 確認資料都會刪除:compact、major_ compact
* 確認資料都會寫入:flush
但執行完後再跑一次 count 也是一樣只有 900 萬筆,所以就開始找問題點了。
後來又使用 HBase 的 exists API,確認有找到 2000 萬筆的資料。一開始小編以為是 MapReduce 的問題,因為 HBase 計算 row count 是使用 MapReduce 來執行的,但找了一堆資料都沒人說有類似問題。後來想說在 hbase shell 內使用 scan {COLUMNS => "cf:XX"} 將所有的資料都拿出來,發現也是只有 900 萬筆,所以初步排除是 MapReduce 的問題。
後來比對了新增的 rowkey 及目前 scan 出來的 rowkey,發現 scan 出來的 rowkey 只有到 GbVA000017 而已,後面的 H-Z、a-z 開頭的全部都沒出現。所以小編使用 hbase shell 的 get 指令,確認在 Java API 新增的 rowkey (A-Z、a-z 開頭的) 是否存在於 table 內,發現用 get 可以拿的到資料。討論後用 scan 加 start rowkey 試試,結果如下:
* STARTROW => "GbVA000017":只找到一筆
* STARTROW => "H":可以找到 H 之後的所有資料
看了這結果,真的覺得非常奇怪啊!!!
後來大神 Cowman Chiang 說要不要試著用 split 讓 HBase 重切 region 看看,等於是 rebuild region 的意思,因為 split 會使用字母順序切分成不同的 region,讓 row 重新分散。split 完之後再做一次 count 果然就找到 2000 萬筆資料了啊。
感恩 Cowman Chiang 讚嘆 Cowman Chiang!!!
--- 以下是結論 ---
目前看起來就是 region 發生異常,還不知道是什麼原因會造成這次事件的發生。但如果發現 scan 或 count 的筆數與你預期的內容不一致的話,就 split region 看看吧。
--- 本次追蹤使用工具 ---
* Linux: grep, cat, cut, sort, sed, comm, wc, less, head
* Java: exists, scan, get, put, BufferedReader
* hbase shell: snapshot, split, compact, major_compact, flush, restore_snapshot, scan, get, disable, enable, clone_snapshot, list_snapshots
--- 20180112 後記 ---
後來把 snapshot 還原之後,重新做了一次 rebuild 再做 count,結果還是一樣只有 900 萬筆,然後用 hbase hbck -repair 試著看看是否能把 region 修復 (有 4 個 inconsistencies),修復完後一樣是 900 萬筆。
也有同事說到會不會是資料塞太快的關係,造成 region 無法 split 完整才會發生這個問題。對於這個說法,小編也還在研究看看,有什麼進度會再分享給大家知道。
#hbase #hadoop #mapreduce #hotspotting
linux less 在 MakeLearningFun Youtube 的最讚貼文
Programming become more and more important nowadays. Some people may think it is different to learn, but actually it is not! With the right tools and resources, we believe every one can learn programming!
In this video, we explain hello world c++ program in detail such as iostream,
cout, less than operators, end , main function and return value of the program.
We also demonstration how the compiler can help us and some experiments about the return value.
If you want to watch more video from us, please
-do subscribe us!
-like the video and share to you friend who have kid on the facebook, tweeter, google+....etc
how to learn math
https://www.youtube.com/playlist?list...
stem projects
https://www.youtube.com/playlist?list...
Anpanman Educational Toys
https://www.youtube.com/playlist?list...
Learn Shapes for kids
https://www.youtube.com/playlist?list...
Learn letter A to Z
https://www.youtube.com/playlist?list...
Learn names of fruits and vegetables
https://www.youtube.com/playlist?list...
Learning street vehicles names and vehicle sounds
https://www.youtube.com/playlist?list...
Learn names of animal with animal sound
https://www.youtube.com/playlist?list...
linux less 在 The 'less' command-line equivalent of 'tail -f' 的推薦與評價
Linux is a registered trademark of Linus Torvalds. UNIX is a registered trademark of The Open Group. This site is not affiliated with Linus ... ... <看更多>
相關內容
linux less 在 Linux - 查看Log 的指令tail、multitail、less - 古古's Blog 的推薦與評價
Linux - 查看Log 的指令tail、multitail、less. By 古古 2018/07/25 Linux. tail -f catalina.log : 實時看log,會自動把新增的log直接顯示出來. ... <看更多>
linux less 在 How to use the more and less commands: 2-Minute Linux Tips 的推薦與評價
In this Linux tip, learn how to use the more and less commands. They each allow you to browse the content of text files. ... <看更多>