Author: Sam Tang

MySQL 刪除欄位內所有 \n 及 \r 字元

今天在一個系統上除錯, 發現用以下 SQL 指令找不到資料:要用以下 SQL 指令才可以找到:用 phpMyAdmin 檢查那些資料好像沒問題, 再細心找才發現有些資料的欄位結尾有 “\n” 或 “\r”, 出現這個問題的原因大欄是在插入資料時沒有刪除掉 “\n” 這類字元, 插入的部份很容易解決, 再來要將原有的資料內的 “\n” 及 “\r” 刪除。 在處理前先將資料表備份, 然後可以用以下 SQL 指令將所有 “\n” 及 “\r” 空白字元刪除, 以下例子會將 …

解決 mysqldump Access denied …… ‘information_schema’ when using LOCK TABLES

原本用 mysqldump 備份 MySQL 一直沒有問題, 但近日在一台新主機上用 mysqldump 備份所有資庫時, 出現以下錯誤:mysqldump: Got error: 1044: Access denied for user ‘root’@’localhost’ to database ‘information_schema’ when using LOCK TABLES我也肯定輸入的 MySQL 密碼沒有問題, 因為已經將登入資儲存, 而且其他資料庫也可以成功匯出, 解決方法有以下兩個:1. 加入 …

vi / vim 搜尋並取代字串

不管系統管理還是寫程式,在檔案內對字串進行搜尋並取代十分常用,在 Unix Like 環境下常會用 sed 或 perl 做 search & replace.如果在開啟檔案後需要取代字串,其實在 vi 及 vim 內同樣可以做搜查及取代字串,做法跟 sed 差不多,以下是 vi 做搜尋及取代的語法: :%s/search_from/replace_to/g 以上 vi 的語法會將檔案內,所有 “search_from” 的字串替換成 “replace_to”。將上面指令最後加上一個 “c” 字元,可以在取代前,向使用者確認: :%s/search_from/replace_to/gc 除了可以替換輸入的字串,更可以設定搜尋時,略過英文大小寫的差異,以下對 …

用 SSH 在遠端主機執行指令

當需要在兩台主機間執行指令,可以用 SSH 直接傳送要執行的指令,該遠端主機直接執行,而無需登入另一台主機。以下是具體指令的語法:上面的 “user” 是登入帳號的使用者名稱,remote.server 是遠端主機,而 “ls -l” 是要執行的指令。當執行以上指令後,如果系統沒有設定自動免密碼登入,會詢問遠端主機的密碼,輸入密碼後會在遠端執行指令,並輸出執行結果。如果要同時執行多個指令,可以用 “;” 或 “&&” 分隔,例如:或如果需要用 Shell Script 執行遠端指令,當需要在指令加入變數,需要將上面的單引號,改成雙引號,例如:最後是執行類似 top 這類互動模式的指令,只要加入 -t 選項即可:除了 top 後,也可以用在 vi 等文字編輯器。

Linux 刪除 100GB 以上大容量檔案

在 Linux 下要刪除檔案,可以用 rm 指令很簡單地完成,但 rm 指定遇上容量很大的檔案時,例如 100GB 以上,刪除時會佔用很多系統資源,如果系統的資源很緊張,也有可能在執行時當掉。以下會介紹在 Linux 下要刪除大容量檔案, 而不會佔用過多系統資源 (I/O) 的方法。這個方法的原理是先清空檔案內容,然後再用 rm 刪除。Linux 下清空檔案的方法有很多,以下列出其中兩種,並假設要刪除的檔案是 big-file.log: $ echo “” > big-file.log $ cat /dev/null > big-file.log 這時原本很大的檔案已經清空,可以直接用 rm …

Ubuntu 開放 root 登入 ssh

基於保安理由, Ubuntu 預設不能用 root 登入 ssh, 但如果是用作內部測試的主機, 為了方便使用, 可以用以下方法解除限制:首先要重新設定 Ubuntu 的 root 密碼, 輸入以下指令: $ sudo passwd root 修改了 root 密碼後, 開啟 sshd 的設定檔: $ sudo vi /etc/ssh/sshd_config 找到以下一行:PermitRootLogin prohibit-password改為:PermitRootLogin …

CentOS 編譯安裝升級 OpenSSL

CentOS 預設安裝的 OpenSSL 版本很低, 如果需要在 CentOS 安裝較新版本的 OpenSSL, 需要透過編譯原始碼的方法安裝, 以下是 CentOS 7 透過編譯原始碼的方法安裝 OpenSSL 的方法。如果系統內已經安裝了預設的 OpenSSL 版本, 需要先將預設的版本移除, 執行以下指令用 yum 移除: # yum remove openssl openssl-devel -y openssl-1.0.1e-60.el7_3.1.x86_64 openssl-libs-1.0.1e-60.el7_3.1.x86_6下一步是下載 OpenSSL …

Ubuntu 升級/更新新版本 Kernel

升級及更新 Linux kernel, 除了可以增加對新硬體的相容性, 也可以改善的安全性及穩定性, 以下是在 Ubuntu 升級 Linux Kernel 的方法。首先到 Ubuntu 官方的 Kernel 專頁: http://kernel.ubuntu.com/~kernel-ppa/mainline/在那裡選擇要下載的 Kernel 版本, 按下連結後, 會出現 .deb 的連結, 分別下載以下三個檔案, 要註意自己系的位元數:linux-headers-x.x.x-……all.deb linux-headers-x.x.x-generic_……deb linux-image-x.x.x-generic_…….deb以下會以 4.11.3 作為例子: $ wget …

Shell Script 將數值補零

很多時在寫程式時, 需要將一些數值補零, 例如 1 顯示為 001, 以下是 Shell Script 的實現方法:Shell Script 的 printf 函式已經可以做到自動補零, 例如想將 8 顯示為 “008”, 可以這樣寫:除了在數值的前面補零外, 也有一種情況是在小數點補零, 例如數值 “8” 是整數, 但也要強制顯示小數點後一個位, 可以這樣寫:如果想將上面的結果放到變數, 可以這樣寫:上面的程式碼將原來的 $NUM 變數補零, 再放在 $ZERO_NUM …