發表文章

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

BASH Snippet

自動找出mediaserver的pid,並印meminfo和該pid的memory map while [ true ] do   top -n 1 | grep mediaserver   cat /proc/meminfo   cat /proc/`ps | grep -i mediaserver | awk {'print $2'}`/maps   echo ' '   echo ' ' done 顯示指定檔案的size和md5 #!/bin/bash if [ "$#" -lt 1 ] || ! [ -f "$1" ] then     echo 'should assian a valid file';     exit -1; fi file=$1 if [ -f "$file" ] then     fsize=`ls -l $file | awk {'print $5'}`;     md5val=`md5sum $file | awk {'print $1'}`;     echo "filename=$file size=$fsize md5sum=$md5val"; else     echo "$file not found."     exit -1; fi 顯示環境變數PATH中的各個目錄 #!/bin/bash (IFS=':' idx=0 for p in $PATH; do   echo "PATH[$idx]=$p"   idx=$((idx+1)) done) 產生短版日期 #!/bin/bash echo "$(date +%y%m%d)" 2016/8/24執行時會產生結果160824 印出目前主機的login使用者 w w -h # ignore table header w -

BASH snippet 2

圖片
取得網路卡IP-方法1 #!/bin/bash if [ $# -lt 1 ]; then   ifname="eth0" else   ifname=$1 fi ifconfig "$ifname" > /dev/null 2> /dev/null if [ $? -eq 0 ]; then   ifconfig "$ifname" | awk '{print $2}' | xargs | awk '{print $2}'| cut -d ':' -f 2 fi 取得網路卡IP-方法2 ifconfig | grep 'inet addr:' | grep Bcast | awk '{print $2}' | awk -F: '{print $2}' 取得網路設備名稱 cat /proc/net/dev | awk -F: '/eth.:|wlan.:/{print $1}' 取得系統記憶體大小 cat /proc/meminfo | awk '/MemTotal/{print $2}' cat your.csv | awk -F, 'BEGIN{OFS=","}{print $1,$4,$3,$2,$5}' > new.csv

BASH取得目錄名, 檔案名及副檔名及參數抽換功能

指令取得檔案名稱 basename /etc/sysconfig/network   #會得到檔案名稱network 指令取得目錄名稱 dirname /etc/sysconfig/network     #會得到路徑 /etc/sysconfig 取得檔案路徑中的檔名和副檔名 FILENAME=$(basename "${path}") EXTENSION="${FILENAME##*.}" FILENANE_WITHOUT_EXT="${FILENAME%.*}" 關於上面這個用法是 Bash Parameter Substitution 的功能 ${parameter##pattern}是從前端開始移除符合pattern的最長內容 所以符合*.的意義就是檔案路徑與名稱到點的部分都要移除,因此只剩下副檔名。 ${parameter%pattern}是從尾端開始移除符合pattern的最短內容 所以符合.*的意義就是點與副檔名的部分要被移除掉,因此只剩下檔名的部分。 長短的部分對於pattern中沒有*的時候,%表示移除最後一個符合的內容,而#表示移除最前一個符合的內容。 $ FILE=".tar.gz.xcache-1.3.0.tar.gz" $ echo ${FILE%.tar.gz} .tar.gz.xcache-1.3.0 $ echo ${FILE#.tar.gz} .xcache-1.3.0.tar.gz $ echo ${FILE##.tar.gz} .xcache-1.3.0.tar.gz $ echo ${FILE%%.tar.gz} .tar.gz.xcache-1.3.0 應用這個功能就能快速完成轉換副檔名的工作 for f in *.bin do      mv "${f}" "${f%%bin}txt" done 衍伸的相關用法可以參考下面這些網站 1.  Advanced Bash-Scripting Guide:Chapter 10. Manipulating Variables 2.  HowTo: Use Bash Parameter S

Bash Script除錯與檢測

圖片
shell script可以用內建的-n 參數檢測語法 -x顯示每一個指令執行前的內容 -v在script執行前將整份script輸出, 一般比較少用, 除非是有寫template script用sed之類的函數及時替換內容 Ubuntu安裝方式 sudo apt-get install shellcheck 檢測Script的方式 shellcheck {your-shell-script-path} Shellcheck官方github https://github.com/koalaman/shellcheck Sublime裏面可以安裝shellcheck的plugin - SublimeLinter https://github.com/SublimeLinter/SublimeLinter-shellcheck Sublime package manager的sublimelinter套件頁 https://packagecontrol.io/packages/SublimeLinter-shellcheck 安裝方法可以參考 http://ephrain.pixnet.net/blog/post/59641837-%5Bmac%5D-%E5%9C%A8-sublime-text-3-%E4%B8%AD%E5%AE%89%E8%A3%9D-shellcheck-plugin 參考資料 http://www.tecmint.com/shellcheck-shell-script-code-analyzer-for-linux/?utm_content=buffer3a176&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer

硬體解碼真4K影片

圖片
真4K的完整規格是影片使用HEVC編碼,畫面解析度3820x2160,每秒60個畫楨,HDR10則是指每個像素的RGB色彩使用10bit表示(Full HD是8bit)。 要真正解碼並輸出到真4K電視需要下面三者配合,缺一不可 1. 處理器內顯/顯示卡 2. 輸出介面的規格和線材 3. 使用的播放器 使用顯示卡 已知確認支援真4K的GPU(不完整列表): Nvidia GTX 950/960/1060/1070/1080 雖然官方網站上有列出支援4K的GPU,但是因為技術細節面並沒有提到HDR,所以我會建議買之前請店家用本文下面提到的DXVA checker檢查是否可以支援真4K硬解 http://www.geforce.com.tw/hardware/technology/4k/supported-gpus 使用處理器內顯 Intel在15.36.14.4080版的HD Graphics Driver納入硬體解碼功能,細節請看 這裡 已確認支援真4K的CPU(不完整列表): Intel第五代的Core處理器並要使用內顯HD graphics 5500/6000或是Iris graphics 6100;筆記型電腦處理器需要能使用HD Graphics 520/620 提醒!! 如果電腦有裝GPU則是要看GPU是否支援真4K解碼而不是看CPU哦! 在 Wikipedia的Intel Quick Sync Video條目 中有整理Intel各架構下的硬體codec支援程度 確認你的電腦硬體是否可以硬解真4K DXVA checker 應該要有HEVC_VLD_Main10這個項目 http://www.coolpc.com.tw/phpBB2/viewtopic.php?f=19&t=224212 像是下圖我電腦的nVideia GTX 960就有HEVC_VLD_Main10這個項目 輸出介面的規格和線材 真4K的影片內容因為所需頻寬過高,所以需要HDMI 2.0介面,如果想要看Netflix 4K更是需要HDCP 2.2版以上的內容保護協定。舊有的HDMI 1.4介面只能播放假4K,解析度3820x2160,每秒30畫楨。如果要使用DisplayPort,則是要使用DP1.