2017年7月30日 星期日

用cat指令產生一個文字檔案

在終端機內想要產生一個檔案卻又不想要運任何的文字編輯器,可以只用cat配合上IO redirection,例如說:
  • cat > txt << _END_
  • ABCDEFGHI
  • IJKLMNOP
  • QRSTUVWX
  • _END_
以上每打完一行就要按Enter,如果在某一行內打錯字是可以用backspace的,最後的_END_代表的看到某一行是_END_時候,這個檔案就編輯完成可以寫入一個名叫做txt的文件。內容就會是上面指令藍色的部分:
  • cat txt
    ABCDEFGHI
    IJKLMNOP
    QRSTUVWX

2017年7月29日 星期六

2017年7月28日 星期五

若電腦可以模擬人腦之二

若是電腦可以用上篇的方式模擬人腦的想法,靈魂可被理解成存放在硬碟的資料。那麼要是存放資料的硬碟是:
  • RAID-0:代表靈魂可被分割,放在不同的硬碟上面。但是不管是哪個硬碟都不存在完整的靈魂,必須要將所有硬碟都湊在一起才是一個完整可執行的靈魂
  • RAID-1:代表靈魂可以分開成兩個一模一樣的部分,而且不管是哪個部分都可以單獨另外獨立存在。所以要是把這兩個硬碟放到不同的機器上面,就變成了兩個個體
  • RAID-5:靈魂存放在多個硬碟上面,可以容許任何一個硬碟壞掉。但如果要是一個完整的個體,就必須要蒐集到n-1個硬碟
  • RAID-6:靈魂存放在多個硬碟上面,可以容許任何兩個硬碟壞掉。但若要執行一個完整個體的功能,就必須要搜集到n-2個硬碟
在這種假定下,所謂的個體死亡也就會是資料都無法救回的狀態。所以哈利波特裡面的佛地魔的分靈體,或許可以想像成靈魂中擔任基礎功能的都用RAID-1存放在硬碟(分靈體),所以必須要將所有的分靈體都消滅才能夠完全消滅;但是靈魂中比較高階的功能,或許是用RAID-0方式存在,所以必須要通通都找到才能夠讓整個靈魂執行完整個功能~

_EOF_

2017年7月27日 星期四

若電腦可以模擬人腦

如果電腦可以模擬人腦,運作方式如下:
  1. 電腦開機後,將硬碟裡面儲存的人腦操作方式載入
  2. 每個感官受器背後都有開daemon在收資訊
  3. 感官收到資訊後,產生的想法會另外開個程序(process)
  4. 想法又跳出另外一個想法,就是再開一個process
  5. 每個想法產生的內容,暫時性的就存在記憶體、永久性的久存回硬碟
  6. 睡覺則是將大部分的daemon與processes關閉,只留必要的處理程序
  7. 關機是深度麻醉,所有的想法都存回硬碟
  8. 與其他人的溝通透過網路
如果人腦可以這樣模擬,那麼所謂的意識或許可以理解成運行中的程序
那麼靈魂或許可以理解成為存在硬碟上的東西。當其它硬體不在的時候,就靜靜存放在硬碟上,當開機或是從休眠中回復時,就把意識等等東西再次載回記憶體。

_EOF_

2017年7月25日 星期二

Bash一行文:看script所在資料夾

寫一個Bash script,不管在哪邊執行的時候此腳本都可以印出所在的位置:
  • DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
上面這個一行文給的$DIR會儲存此腳本在系統上的完整路徑。即使是路徑裡面有symbolic link也沒有關係。但若此腳本是個symbolic link,那上述的方法就不行了。解法參考《Getting the source directory of a Bash script from within》裡面Dave Dopson的說明~
_EOF_

2017年7月24日 星期一

設定網路卡的IP address與mask

《檢查網路卡的設定》後,若要暫時的設定IP address:
  1. sudo ifconfig eth0 10.0.0.100 netmask 255.255.255.0
  2. ifconfig eth0
意思是設定eth0這張網卡的IP address是10.0.0.100,遮罩255.255.255.0。第二個指令是來看設定有無成功。設定完後,用下面的指令設定路由(route):
  1. sudo route add default gw 10.0.0.1 eth0
  2. route -n
第一個指令是設定eth0預設從10.0.0.1這個gateway出去,第二個指令是看路由表(routing table)。若是確定上述設定都沒有問題,用ip這個指令將設定寫入:
  • ip addr flush eth0
一般來說這樣就可以動了。在Ubuntu上,若是要開啟或是關閉eth0這張卡:
  • sudo ifup eth0
  • sudo ifdown eth0
真正網路卡的設定會存放在/etc/network/interfaces這個檔案裡面。更多相關的設定像是Bridge、DNS等等餐考Ubuntu的文章《Network Configuration》
_EOF_

2017年7月23日 星期日

檢查網路卡的設定

要看所有的網卡用第一個指令,正在運行的用第二個指令:
  • /sbin/ifconfig -a
  • /sbin/ifconfig
若是要簡單地看到是哪些,用:
  • /sbin/ifconfig -a | grep ^eth
更加多的資訊,像是link mode, speed, duplex, port,用ethtool:
  • sudo ethtool eth0
要檢查網路卡更加詳細的內容,像是供應商、驅動程式與驅動程式版本、韌體版本等等詳細資訊,用lshw:
  • sudo lshw -class network
更多資訊可以參考Ubuntu的《Network Configuration》
_EOF_

2017年7月22日 星期六

安裝CUDA-8.0工具包在Debian8.8

Debian 8.8上安裝Nvidia驅動程式後,再來安裝CUDA toolkit。到官方網站上面下載:
  1. Operation System選Linux
  2. Architecture選x86_64
  3. Distribution選Ubuntu(這邊沒有Debian可選,所以選從Debian改出來的Ubuntu)
  4. Version選16.04
  5. Installer Type選runfile (local)
測試過用deb套件安裝,但無法成功故在此採改成用runfile安裝。下載後會有兩個檔案:
  • Base Installer:cuda_8.0.61_375.26_linux.run
  • cuBLAS Patch 2:cuda_8.0.61.2_linux.run
上面是需要的檔案,以下是安裝步驟,請用root權限做

2017年7月21日 星期五

Debian 8.8上安裝Nvidia驅動程式

在Debian 8.8 (Jessie) 上面安裝Nvidia提供的顯示卡驅動程式,版本381.09。
不使用APT方式安裝是因為提供的driver太舊了,不好搭配CUDA使用。下面的安裝方式是在系統在下面幾個條件下完成的安裝:
  1. 將Debian Jessie升級到目前最新版本 8.8
  2. 讓Debian Jessie開機直接進入文字模式。這點很重要,因為要是圖形模式如果安裝了顯卡驅動失敗以後,就什麼畫面都看不到了~

2017年7月20日 星期四

Debian版本內小升級

前文《看Debian的版本》提到Debian系統版本是8.6,但8系列(暱稱Jessie)裡面,目前已經更新到8.8。想要做這種版本內的升級(minor version upgrade)只要用root權限下兩個指令:
  • apt-get update
  • apt-get upgrade
上文參考了《Upgrade Debian Jessie to 8.8》一系列的討論
_EOF_

2017年7月19日 星期三

看Debian的版本

可以看/etc/debian_version/etc/os-release這兩個檔案,例如:
  • cat /etc/debian_version
    8.6
  • cat /etc/os-release
    PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
    NAME="Debian GNU/Linux"
    VERSION_ID="8"
    VERSION="8 (jessie)"
    ID=debian
    HOME_URL="http://www.debian.org/"
    SUPPORT_URL="http://www.debian.org/support"
    BUG_REPORT_URL="https://bugs.debian.org/"
從上面可以看到某台機器是Debian 8.6,暱稱是jessie

2017年7月18日 星期二

定期更新PDB資料庫

《將整個PDB下載回本機端》說明要怎樣將整個蛋白質資料庫(PDB)下載回自己的機器上。但PDB這個資料庫現在是每個星期三UTC 00:00會更新,台灣是UTC+8,所以就是每個星期三早上八點會更新。考量到每個資料庫一更新完一堆人會去抓、還有週間大家使用資料庫比較頻繁,所以建議週末再來做更新。
  • VISUAL=vim crontab -e
  • crontab -l | grep -v ^#
    3 2 * * 6 /dw/rsyncPDB.sh

2017年7月17日 星期一

Debian 8.6開機直接進入文字模式

Debian 8.6 Jessie開機直接進入文字模式的方法如,首先:
  • sudo systemctl set-default multi-user.target
設定/etc/default/grub,內容參考《Ubuntu 16.04開機直接進入文字模式》
  • sudo update-grub

2017年7月16日 星期日

沒有strings這個指令

想要用strings這個指令來看binary executable裡面有哪些字串,發現系統沒有安裝。原來這個指令包含在binutils這個套件包裡面:
  • sudo apt-get install binutils

2017年7月15日 星期六

編譯Debian的核心(kernel)

這是一篇紀錄在2010年以前某機器d編譯核心的始末:
  • 系統: Debian (Lenny) 5.0.4
  • 核心:kernel 2.6.26-2-amd64升級至2.6.30.3

2017年7月13日 星期四

Mac的ssh -X無法順利接視窗回來

在使用SSH連線遠端機器,將遠端機器的視窗接回本機使用的時候,原本可以用ssh -X USER@REMOTE的指令,最近變成只能夠用ssh -Y USER@REMOTE的時候才能夠將遠端的視窗接回本機使用,操作手冊上對於此兩個參數的的說明是:
  • -X:Enables X11 forwarding. 遠端機器是不可信(untrusted)的X11 client。因為是不可信的X11 client,所以會套用一些安全性政策,某些有安全性考量的操作會被禁止,也就是相對-Y來說-X要安全一點
  • -Y:Enables trusted X11 forwarding. 遠端機器是可信的X11 client,意思就是相信遠端機器管理者是可信任的,但這可能有安全問題,因為遠端機器可以從X11 client竊取數據:像是截圖、鍵盤記錄(keyboard monitoring)等

2017年7月12日 星期三

PyMOL移動列表的順序

在PyMOL的右邊會有分子列表,想要更改順序有兩種方式:
  • 右鍵點住要更改標的上下移動
  • 使用指令order

2017年7月11日 星期二

sshfs:在Mac上透過ssh掛載遠端資料夾

要安全的存取遠端機器的內容,可以透過sftp 也就是FTP over SSH,但這樣每次都要開啟有sftp的軟體才能夠去存取。另外的解決方案就是sshfs,也就是透過ssh加密來掛載遠端機器的資料夾到本機上~
在Mac上,可以用sshfs這個指令,安裝方式有兩種:
  1. FUSE for macOS去抓SSHFS套件直接安裝
  2. 用MacPorts一個指令直接安裝
第一種方式就是抓了pkg檔案回來點兩下,參考GTW的說明
第二種方式則是用MacPorts指令 sudo port install sshfs 

2017年7月7日 星期五

指令列處理文本的工具

在Linux與Mac都提供終端機,並且有一系列的指令用來處理文件:
  1. find, grep
  2. sed, awk
  3. tr, cut, paste
  4. cat, more, less, head, tail, 
  5. fmt, pr
  6. wc, bc
  7. sort, uniq
熟悉上述的指令,運用正規表達式(regular expression)並搭配資料重新導向(I/O redirection),其實許多資料處理根本不需要寫程式,直接用指令就可以處理完成

2017年7月6日 星期四

《港都情人》~濁水溪公社


以下歌詞來自此youtube上面的DictatorBoy1的內容:
濁水溪公社 《港都情人》

2017年7月5日 星期三

根據空格切出欄位

要把純文字檔案每一行的第二個欄位給切出來,以下三個指令都可以用:
  • cut -d\  -f 2    (注意在backslash後面有兩個空格)
  • awk '{print $2}'
  • tr -s ' ' | cut -d ' ' -f 2
上述的指令即使欄位間的空格有很多個也一樣適用,下面的就只適用一個空格:
  • cut -d ' ' -f 2
以上內容參考use space as a delimiter with cut command
_EOF_

2017年7月4日 星期二

GROMACS無法用CUDA加速

系統是Ubuntu 16.04,在跑mdrun的時候出現下面問題
NOTE: Error occurred during GPU detection:
CUDA driver version is insufficient for CUDA runtime version 
Can not use GPU acceleration, will fall back to CPU kernels.
/usr/local/cuda/samples/1_Utilities/deviceQuery測./deviceQuery出現
./deviceQuery Starting... 
CUDA Device Query (Runtime API) version (CUDART static linking) 
cudaGetDeviceCount returned 35 -> CUDA driver version is insufficient for CUDA runtime version Result = FAIL
原本以為是CUDA driver與CUDA runtime version(也就是CUDA toolkit version)搭配不起來(搭配的列表看這裡),測試的指令如下:
  • nvcc --version    (看Cuda compiler driver、CUDA toolkit的版本)
  • nvidia-smi      (看系統安裝的硬體與driver的版本)
  • cat /proc/driver/nvidia/version    (同上,會顯示NVRM version)
但不管怎樣檢查,通通都是可以配合的版本。最後才想到,當初希望機器的顯示用內顯而不要用獨顯,因為這個緣故,造成程式無法去找到GPU來跑。所以下完下面的指令:
  • prime-select nvidia
這樣之後,機器就可以順利用CUDA加速了

2017年7月3日 星期一

大量搬移帳號

在Linux上面想要將A機器上面的帳號搬移到B機器上面,又不想要改密碼,可以藉由修改 /etc/passwd/etc/shadow 兩個檔案來完成。

首先,用下面的指令根據UID來排序A機器上面的帳號
  • sort -n -t ':' -k3 /etc/passwd
假設要移動的使用者帳號的UID從1111到2222,首先用下面的指令來看B機器上面有沒有UID從1111到2222的使用者
  • sort -n -t ':' -k3 /etc/passwd | awk -F ":" '$3>=1111 {print}' | awk -F ":" '$3<=2222 {print}'
確定B機器沒有上述帳號以後,才能安心地把帳號從A機器搬到B機器。這時候要在A機器上面把這些帳號印出來:
  1. sort -n -t ':' -k3 /etc/passwd | awk -F ":" '$3>=1111 {print}' | awk -F ":" '$3<=2222 {print $1}'
  2. sort -n -t ':' -k3 /etc/passwd | awk -F ":" '$3>=1111 {print}' | awk -F ":" '$3<=2222 {print $1}' | tr '\n' '|' | sed s'/.|$/\n/'
上面第1個指令是僅僅印出來帳號名稱、一行一個帳號,第二個指令則是變成egrep可以讀的pattern,這樣才能夠用下面的egrep指令將A機器裡面的 /etc/shadow 裡面的資料給抓出來:
  • sudo egrep -E `sort -n -t ':' -k3 /etc/passwd | awk -F ":" '$3>=1111 {print}' | awk -F ":" '$3<=2222 {print $1}' | tr '\n' '|' | sed s'/.|$/\n/'` /etc/shadow
最後把上述指令印出來的帳號相關資訊附加到到B機器的/etc/shadow檔案後面,這樣就完成從A機器大量搬移帳號到B機器,而且還不需要改密碼~

參考資料

_EOF_

2017年7月2日 星期日

打開與關閉Ubuntu 16.04的服務

以前的作法會是/etc/init.d或是upstart,但是到Ubuntu 15.04以後現在都是用Systemd。這邊分成兩個部分,一是單純的開關某個服務、二是設定系統開機預設要不要開啟服務。以下的服務名稱為ServiceName。比較可能搞混的用詞會是:
  • active, inactive:代表服務當前的狀態,開或是關
  • enabled, disabled:代表服務在重開機後會是開還是關