2014/01/19

用 grub 更新開機選單

安裝第二套作業系統並作多重開機,但把原來的開機程式蓋掉,開機選單一團亂,只好手動改。

Ubuntu 的開機選單設定放在 /boot/grub/grub.cfg,可以先用 update-grub (grub-mkconfig) 掃描現有可以開機的位置,並更新到 grub.cfg 設定檔:
$ sudo update-grub

# or
$ sudo grub-mkconfig -o /boot/grub/grub.cfg

接個編輯 grub.cfg,改成需要的樣子存檔。存檔後還需要寫入 MBR,設定才能生效:
$ sudo grub-install /dev/sda

2014/01/15

在 grep 搜尋「-」符號

用 grep 搜尋檔案中出現的文字,通常會這樣寫:
$ grep STR fileToSeatch

不過當要搜尋的字串有特出符號,像是「-」,就會出現錯誤訊息:
$ grep "->getVal()" *
grep: invalid option -- '>'

原因是 grep 將「-」開頭的字串視為命令選項 (command option),去尋找「>get()」這個選項,而這個選項並不存在,所以導致錯誤。

在命令輸入前加上「--」,表示之後的參數都當作一般輸入而非選項 (end of option):
$ grep -- "->getVal()" *

要搜尋的字串,就算沒有空白,也建議用引號括起來。像是「>」、「&」等,沒加上引號會在 bash 解析時就發生錯誤:
$ grep > *  # shoud be: grep ">" *
bash: *: ambiguous redirect

2014/01/14

使用 ini_set() 設定 Xdebug function calls trace

Xdebug 是一個在 PHP 上很好用的除錯工具,特別是 function calls tracing,可以很完整的列出執行流程。Xdebug 的介紹可以參考 Crboy 的文章:

要讓 Xdebug 在 PHP 開始執行時自動 trace function calls,只需要在 ini file 加上 xdebug.auto_trace = On 即可。若沒有系統權限,仍可以使用 PHP 的 ini_set() 設定 Xdebug 各項參數:
<?php

ini_set('xdebug.trace_output_dir', '/tmp/xdebug');
xdebug_start_trace();  // start tracing

// beginning of program

要注意的是,tracing 的設定會在 PHP 開始執行前便載入,所以使用 ini_set() 設定 xdebug.auto_trace 是不會起作用的:
<php

ini_set('xdebug.auto_trace', 'On');  // 沒有作用
ini_set('xdebug.trace_output_dir', '/tmp/xdebug');

// beginning of program


ps. 若 auto trace 已啟動,要記得定期清理 log,免得硬碟被吃光導致機器故障。







2014/01/08

GNU screen Session Rename

screen 可以在建立時,為 session 命名:
$ screen -S name

若日後需要修改名稱,可以先 attach session 以後,按下 C-a,在輸入指令:
:sessionname newName

之後 screen -r 就可以看到新的名稱。