發表文章

目前顯示的是 4月, 2018的文章

BASH分割檔案, 切除檔頭

分割檔案 使用split指令,可以用檔案大小來分割 split -b {檔案大小} {輸出的 分割 檔名} 例如:  split -b 100M bigfile split_file_prefix 或是用行數來分割 split -l {最大行數} {輸出的分割檔名} 如果有換行問題, 可以先用dos2unix處理再split 切除檔頭 可以使用dd來處理 dd的skip忽略的單位以bs為準的,也是dd一次的讀寫單位,太低的話效率很差,bs設太高效率也不好 下面這兩個輸出的結果是相同的,只是後者會更快完成。 dd if=orignal.file of=output_bs1.file skip=717824 bs=1 dd if= orignal.file  of=output_bs1024.file skip=701 bs=1024

tar, tar.gz, tar.bz打包與壓縮解壓縮

壓縮z compress {filename} #壓縮檔案 uncompress {zipped file} #解壓.z compress -d {zipped file} 壓縮bz2 bzip {file name} bzip -z {file name} bzip -d {zipped file} #解壓.bz2 bzcat {zipped file} # 顯示bz2檔案內容 壓縮gz gzip {filename} gzip -{number} {filename} #用number指定壓縮比, 大的表示壓縮率高 gzip -d {zipped file} #解壓gz gunzip {zipped file} zcat {zipped file} #顯示gz檔案內容 產生tar tar cvf {created tar file} {directory} tar zcvf {created tar,gz file} {directory} # tar並壓縮gz eg. tar zcvf filename.tar.gz /home/test/* #打包/home/test下的所有檔案 tar zcvf  {created tar,gz file} {directory} --exclude mnt --exclude proc #打包tar.gz不過要排除特定目錄 tar -N '2017/06/25' zcvf {created tar,gz file} {directory} #比 2017/06/25新的檔案才打包 tar zcvfP {created tar.gz file} {directory} # -P會以絕對路徑壓縮目錄, 解tar的時候要小心 tar zcvfp {created tar.gz file} {directory} # -p是保留檔案原始權限 tar ztvf {tar.gz file} #查看tar.gz內容 tar jtvf {tar.bz file} #查看tar.bz內容 tar xvf {tar file} #解tar tar zxvf {tar.gz file} #解tar.gz tar jxvf {tar.bz} #解tar.bz

ffmpeg加密串流檔案及即時播放解密

ffmpeg支援crypoto模組加解密 查詢是否有編入crypto模組 ffmpeg -protocols | grep crypto crypto模組文件 https://ffmpeg.org/ffmpeg-protocols.html#crypto crypto模組介面 http://www.ffmpeg.org/doxygen/3.1/crypto_8c.html 加密串流檔案 ffmpeg -i content.ts -c copy -f mpegts -key "527930d9bab56a1ed763991c159d41fa" -iv "a084a4e635e5b32830bdb901089ac0c3" crypto:crypted.mpegts -key 指定加密的AES key -iv 指定加密的Initialization Vector 產生key和iv可以用openssl openssl rand -hex 16 解密串流檔案 ffmpeg -i crypted.ts -c copy -f mpegts -key "527930d9bab56a1ed763991c159d41fa" -iv "a084a4e635e5b32830bdb901089ac0c3" crypto:decrypted.mpegts 直接播放加密檔案 ffplay -key "527930d9bab56a1ed763991c159d41fa" -iv "a084a4e635e5b32830bdb901089ac0c3" -i crypto:crypted.mpegts 參考資料 http://bbs.chinaffmpeg.com/forum.php?mod=viewthread&tid=430

打包好OpenCV2的Visual C++ 2017專案

這是打包好的OpenCV Visual C++ 2017專案,內含OpenCV 2.4.13版本,可用於Visual C++ 2017 15.6.2版本。和 之前提供下載的VC++2010專案 一樣,使用static library,編譯完成的執行檔案較大,但是不需要額外的DLL即可運行。 更新的部分 1. 更新OpenCV至2.4.13版本以便讓VC2017編譯 2. 更新Header目錄:專案屬性→一般→VC++目錄→Include目錄 3. 更新Library目錄:專案屬性→一般→VC++目錄→程式庫目錄 4. 更新Linker的其他相依性:專案屬性→連結器→輸入→其他相依性 5. 加入x64 Release/Debug編譯選項 內容物 VC++專案檔在MyProgram\MyProgram.sln 執行檔會產生在MyProgram\bin內 Header檔案在OpenCV\include\opencv,OpenCV\include\opencv2 Library檔案在OpenCV\x86和Opencv\x64 下載(GoogleDrive) 編譯Release版本用靜態函數庫 IlmImf.lib libjasper.lib libjpeg.lib libpng.lib libtiff.lib opencv_calib3d2413.lib opencv_contrib2413.lib opencv_core2413.lib opencv_features2d2413.lib opencv_flann2413.lib opencv_gpu2413.lib opencv_highgui2413.lib opencv_imgproc2413.lib opencv_legacy2413.lib opencv_ml2413.lib opencv_nonfree2413.lib opencv_objdetect2413.lib opencv_ocl2413.lib opencv_photo2413.lib opencv_stitching2413.lib opencv_superres2413.lib opencv_ts2413.lib opencv_video2413.lib openc

DesignPattern: Null Object, Singleton

Null object pattern/空物件模式 我認為空物件模式是讓程式碼保持乾淨,並且語意明確的一種方法。 為了好debug,在寫C時我已養成加上要檢查函數參數中的指標是否為NULL,不然可能程式執行到一半就會crash掉,然後找半天都不知道錯誤在哪裡;不過在寫Java時,這習慣就會變成不檢測,直接讓程式crash反正最後也會有jvm會幫我印出錯誤位置點。 Christopher Okhravi教學影片 https://www.youtube.com/watch?v=rQ7BzfRz7OY 如何實現 Null Object Pattern ? (使用PHP展示) http://oomusou.io/design-pattern/nullobject/ Null Object 模式並非出自 設計模式 一書,而是出現在 重構 的 Ch 9.7,教大家將  null  值重構成  null  物件,因為只要有  null  值,就必須去  if  判斷是否  null ,甚至於去  try catch ,這樣的 API 並不好用,而且只要忘記判斷就可能出錯。 Singleton pattern/單例模式 這個類別在整個世界中只會存在一個實體, 不論如何取得都是同一個實體。 Christopher Okhravi教學影片 https://www.youtube.com/watch?v=hUE_j6q0LTQ 良葛格和RunNoob.com都有用java語言寫幾種範例 這個影片動態的展示了未保護的singleton在multithread狀態會有問題 https://www.youtube.com/watch?v=iyfqDV4wKAQ 1. 實作單例基本精神, 並具備multithread保護的能力 public class Singleton {   private static Singleton instance;   private Singleton (){}   public static synchronized Singleton getInstance() {     if (instance == null) {       instance = new Singleton();

wireshark封包檔案分割

如果想研究pcapng和pcap檔案格式可以看wireshark原始碼 tcpdump預設使用的pcap https://github.com/wireshark/wireshark/blob/master/wiretap/libpcap.h wireshark預設使用的pcapng https://github.com/wireshark/wireshark/blob/master/wiretap/pcapng.h 老陳獨白: pcap檔案格式解析 http://myblog-maurice.blogspot.tw/2012/02/pcap.html 以封包數分割檔案 Linux   editcap -c 1000 test.pcapng out.pcapng Windows 10 PowerShell e.g.   &"C:\Program Files\Wireshark\editcap.exe" -c 1000 test.pcapng out.pcapng 合併分割的封包檔案 mergecap -w merged.pcapng source_files_*  選取特定封包內容 editcap -r capture.pcap select.pcap 1 5 10-20 30-40 選取1, 5, 10到20, 30到40號封包 pcapng轉換成pcap editcap -F libpcap .pcapng out.pcap 顯示所有封包的MD5 Linux   editcap -v -D 0 capture.pcap /dev/null Windows   editcap.exe -v -D 0 capture.pcap NUL Windows 10 PowerShell e.g.   &"C:\Program Files\Wireshark\editcap.exe" -v -D 0 test.pcapng NUL 參考資料 wireshark文件分割與合併 https://blog.csdn.net/qq_20480611/article/details/50774686 Editcap Guide: 11 Exa