2017年6月30日 星期五

Ubuntu 16.04設定DNS

以前手動設定DNS是在把DNS server加在 /etc/resolv.conf 這個檔案裡面,但在Ubuntu 16.04(Xenial Xerus)卻不是直接編輯/etc/resolv.conf 這個檔案,因為這個檔案會被 一個叫做 resolvconf 的程式所控制。以下提供兩種解法:

解法1:

現在則是直接將dns-nameserver加入到 /etc/network/interfaces 裡面
在每一張interface裡面,分別加入下面的設定:
  • dns-nameserver 8.8.8.8 8.8.4.4
這樣就會加入兩個dns servers了

2017年6月29日 星期四

Ubuntu 16.04僅更新安全性套件

Ubuntu登入時,都會通知是否有套件需要更新、其中有幾個屬於安全性更新。若想要知道究竟哪些套件屬於安全性更新,下指令:
  • apt-get -s dist-upgrade |grep "^Inst" |grep -i security 
若要安裝這些安全性更新套件,則是以root的身份下指令:
  • apt-get -s dist-upgrade | grep "^Inst" | grep -i security | awk -F " " {'print $2'} | xargs apt-get --yes install

2017年6月28日 星期三

Mac開啓SSD的TRIM

在Mac OS X 10.9.5 (Mavericks) 上面想用terminal直接開啟非Apple原廠SSD的TRIM功能:
  1. 備份原來的driver
    sudo cp /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage-backup
  2. 修改driver的內容
    sudo perl -pi -e 's|(^\x00{1,20})[^\x00]{9}(\x00{1,20}\x54)|$1\x00\x00\x00\x00\x00\x00\x00\x00\x00$2|sg' /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage
  3. 更新系統的快取、讓系統用新的driver
    1. sudo kextcache -system-prelinked-kernel
    2. sudo kextcache -system-caches
    3. sudo touch /System/Library/Extensions/
  4. 重新開機後,用指令確認有沒有TRIM support
    system_profiler SPSerialATADataType | grep 'TRIM'

2017年6月26日 星期一

GNU time:計算程式執行時間

UNIX-like系統上(像是Linux或BSD或Mac),用來計算執行程式的時間的指令是time,或叫做GNU time。使用方法:
  • time command
這個指令會回傳三個時間,參考What do 'real', 'user' and 'sys' mean in the output of time(1)?的說明:
  • real:實際上從開始執行指令到結束指令花的時間,包含CPU處理的時間、系統做I/O的時間等。一般來說我們說跑多久指的就是這個時間
  • user:CPU花在跑這個程式的時間。"The amount of CPU time spent in user-mode code (outside the kernel)"
  • sys:因為跑這支程式系統核心使用的CPU時間。"The amount of CPU time spent in the kernel within the process."
所以說 User+Sys 就是整個程式在CPU裡面跑的時間。由於現在多核心的出現,所以有時候會出現CPU跑的時間比整個程式執行的時間還長的情況。

2017年6月25日 星期日

簡介iperf測量連線速度

測量兩台電腦之間的連線速度可以用iperf。例如說兩台機器S與C,想要看C到S的連線速度,那麼就在S機器(假設IP是192.168.1.1)上面輸入:
  • iperf -s
設定好後,在C機器上面輸入:
  • iperf -c 192.168.1.1
這樣就可以看每秒從C到S的連線速度平均是多少了。另外要注意的是,iperf用的是port 5001,所以要是不通的話,記得要開這個port給iperf,在Linux上可輸入:
  • iptables -I INPUT 1 -p tcp --dport 5001 -j ACCEPT

2017年6月24日 星期六

Ubuntu 16.04開機直接進入文字模式

在Ubuntu 16.04 Desktop版本裝好後想要關閉圖形登入介面
若僅僅用只想要用文字模式,那就直接用下面指令後重開機:
  • sudo systemctl set-default multi-user.target
若是希望又回到圖形模式,那就是下指令後重開機:
  • sudo systemctl set-default graphical.target

2017年6月23日 星期五

PyMOL做序列比對(sequence alignment)

因為有結構,所以PyMOL可以直接根據結構來做structure alignment,參考之前的文章:
但若要比較的兩個結構其實序列很像,拿其實可以做序列比對後,結構再根據序列比對結果來重疊(superposition)。下面用人類的lysozyme(1lz1)與火雞蛋的lysozyme(1lzy)來做這種序列比對:
  • fetch 1lz1 1lzy
  • align 1lzy////CA, 1lz1////CA, object=seqalign

2017年6月20日 星期二

《深夜拾獲大哥大》~濁水溪公社


以下歌詞來自此youtube上面的巴頓芬克的內容:
收錄《濁水溪公社:專輯三─臭死了》(水晶唱片,2001)

2017年6月19日 星期一

一秒賺一元要多久才能夠變成億萬富翁

首先要定義什麼叫做億萬富翁。對於百萬富翁(millionaire),理解是實際擁有一百萬(1,000,000=1E6)元;但是對於億萬富翁,我的理解是只要擁有一億(100,000,000=1E8)元就可以稱作億萬富翁,但如果用英文billionaire,代表必須要擁有十億(1,000,000,000=1E9)。為求方便,在這邊把億萬富翁分成兩種:
  • 億元君
  • 十億元君(billionaire)
假設某君可以日日夜夜每秒賺到一元,那麼可以知道:
  • 一分鐘賺 60元
  • 一小時賺 60*60 = 3,600元
  • 一天賺 60*60*24 = 86,400元
  • 一個月賺 60*60*24*30 = 2,592,000元 ≈ 260萬(一個月就變成百萬富翁了)
  • 一年賺 60*60*24*365 = 31,536,000元 ≈ 3154萬
  • 要變成億元君,只要3.17年
  • 要變成十億元君,只要32年

2017年6月17日 星期六

timeout:指定指令執行的時間

若想要執行top指令看系統狀態,然後希望10秒後就自己跳出,那這時候可以用timeout:
  • timeout 10 top
若是搭配《一行指令做CPU壓力測試》《Bash產生亂數》,那用下面指令:
  1. for i in $(seq 4); do (timeout 10 yes > /dev/null &); done
  2. for i in $(seq `grep -c ^proc /proc/cpuinfo`); do (t=$((10 + RANDOM%10)) && echo "Run:$i timeout $t seconds" && timeout $t yes > /dev/null &); done
第1個指令是說同時丟 個程式塞滿CPU,10 秒後停止
第2個指令是說,產生跟邏輯核心一樣多的工作,每個都跑10~20秒左右

2017年6月16日 星期五

SSH對遠端下含有檔案重導向的指令

雖說ssh很方便可以直接對遠端的機器下指令,但如果指令command裡面含有檔案重導的符號,像是 >, <, | 等等符號,那這樣就無法用下面的方式下指令:
  • ssh remoteIP command
這種狀況的解法就是,用'(command)'將指令給括號起來 :
  • ssh remoteIP '(command)'

2017年6月15日 星期四

Bash產生亂數

很多時候都會需要用到亂數,在Linux下面可以用下面的指令得到亂數
echo $RANDOM
echo $((1+RANDOM%10))
echo $((78+RANDOM%10))
while true; do echo $RANDOM; sleep 0.5; done
watch -n 1 '(echo $RANDOM )'
在這邊$RANDOM這個變數的值會介於 0到32767 的整數,所以上述的指令意思會是:
  1. 產生一個介於0-32767的亂數
  2. 產生一個介於1到10之間的亂數
  3. 產生一個介於78到87之間的亂數
  4. 不斷在螢幕上面跳出介於0-32767的亂數

2017年6月14日 星期三

將整個PDB下載回本機端

目前整個PDB大小約436G,要下載前請先注意自己的硬碟大小

首先編寫 rsynPDB.sh 如下

#!/bin/sh
MIRRORDIR=/dw/rcsb           # your top level rsync directory
LOGFILE=/dw/rsyncPDB.log/rsyncPDB.`/bin/date +"%Y%m%d"`  # file for storing logs
RSYNC=/usr/bin/rsync         # location of local rsync
SERVER=rsync.wwpdb.org::ftp  # RCSB PDB server name
PORT=33444                   # port RCSB PDB server is using
${RSYNC} -rlpt -v -z --delete --port=$PORT ${SERVER}/ $MIRRORDIR > $LOGFILE 2>/dev/null

上面這個腳本會把整個PDB都放在 /dw/rcsb 這個資料夾之下
每次執行rsynPDB.sh,只會用rsync做更新,而不會每次都要重新下載整個PDB
整個更新的紀錄會放在 /dw/rsyncPDB.log/rsyncPDB.更新日期 這個檔案裡面

2017年6月13日 星期二

在Blogspot中插入高亮程式碼

PRISM這個網站下載程式碼想要呈現的風格。簡單說,選完THEME之後,就直接去下載網頁最下方的兩個檔案,改名成:
  • prism.js:到後台的 Layout > Sidebar > 新增一個HTML/Javascript的Gadget
    在content裡面加入,<script>上面這個檔案的內容</script>
  • prism.css:到後台的Theme > Customize > Advanced > Add  CSS
    把上面這個檔案的內容貼上去

然後在編寫程式的時候,到HTML模式內輸入
<pre><code class="language-bash line-numbers">#!/bin/sh
for i in {1..10}; do echo $i; done
</code></pre>

這樣就會現下面的內容
#!/bin/sh
for i in {1..10}; do echo $i; done

參考資料

_EOF_

2017年6月12日 星期一

Linux上看CPU型號與資訊

在指令模式下有四種方式可以看CPU型號與內容,下面兩種不需要root權限:
  • lscpu
  • less /proc/cpuinfo
另外兩種需要root權限,但有比較多資訊:
  • sudo lshw -C processor
  • sudo dmidecode -t processor
個人覺得要快用 lscpu
要詳細資訊用 sudo dmidecode -t processor

2017年6月10日 星期六

2017年6月7日 星期三

mdadm修復磁碟陣列

假設用mdadm做的/dev/md2裡面有個組成硬碟磁區/dev/sdb1壞了,想要用/dev/sdx1來取代。下面是修復過程:
  1. mdadm --detail /dev/md2
  2. mdadm /dev/md2 --fail /dev/sdb1
  3. mdadm --add /dev/sdx1 --remove /dev/sdb1
  4. cat /proc/mdstat

2017年6月6日 星期二

修補sudo在selinux下的漏洞

《Sudo爆本地端最高權限漏洞,各家Linux相繼修補更新》提到下述的漏洞:
如果linux系統啟用SELinux,並支援Sudo,擁有Sudo權限的使用者將能利用此一漏洞以任意檔案覆蓋系統,或取得系統的最高權限。
這個漏洞描述在《Qualys Security Advisory - CVE-2017-1000367 in Sudo's get_process_ttyname() for Linux》這篇文章內。根據《CentOS 7.3 修補最新 sudo 漏洞 (CVE-2017-1000367)》的說法,受到影響的sudo版本會是:
簡單來說,只要 sudo 套件版本是 1.8.6p7 ~ 1.8.20 都會受到此漏洞的影響,必須採用 sudo 1.8.20p1 套件版本才順利修復此漏洞。對應到 RHEL 7 / CentOS 7 的話版本則是 sudo-1.8.6p7-22.el7_3.x86_64 才對

2017年6月4日 星期日

架設L2TP/IPSec的VPN

參考秋水逸冰寫的文章,依照說明,在CentOS 7上面設定成功:
這邊的IPSec用的是 libreswan
這邊的L2TP用的是 xl2tpd

2017年6月3日 星期六

手動安裝Python到指定目錄

若要自己安裝Python到自己的目錄,可以按照下面的做法(在這邊作業系統是Linux,安裝的Python版本是2.7.13,安裝的位置是 /opt/Python-2.7.13/ ):
  1. wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz
  2. tar zxvf Python-2.7.13.tgz && cd Python-2.7.13/
  3. ./configure --prefix=/opt/Python-2.7.13 --enable-optimizations
  4. make install
  5. /opt/Python-2.7.13/bin/python -V
    Python 2.7.13
  6. wget https://bootstrap.pypa.io/get-pip.py
  7. /opt/Python-2.7.13/bin/python get-pip.py --prefix=/opt/Python-2.7.13
  8. /opt/Python-2.7.13/bin/pip list --format=columns
    Package    Version
    ---------- -------
    pip        9.0.1
    setuptools 36.0.1
    wheel      0.29.0 
  9. /opt/Python-2.7.13/bin/pip install matplotlib

2017年6月2日 星期五

TypeError: 'numpy.float64' object cannot be interpreted as an index

在跑python的時候出現標題這個錯誤訊息 “TypeError: 'numpy.float64' object cannot be interpreted as an index”,這是因為numpy 1.12.0 這個版本不再支援 float index。解法就是將 numpy 1.12 版降回 1.11 版。用下面的指令即可:
  • sudo pip install -U numpy==1.11.0
上述解法參考 Microos 對這個議題的回應
_EOF_