10 days ago

改變 Ubuntu 的時區,請使用以下指令

$ sudo dpkg-reconfigure tzdata

接著會跳出一個畫面讓你選時區,選好之後會看到以下資訊

$ sudo dpkg-reconfigure tzdata

Current default time zone: 'Asia/Taipei'
Local time is now:      Mon 20 Mar 22:32:45 CST 2017.
Universal Time is now:  Mon Mar 20 14:32:45 UTC 2017.

再 date 看一下時間是否正確

$ date
Mon 20 Mar 22:32:48 CST 2017

Reference

http://unix.stackexchange.com/questions/110522/timezone-setting-in-linux

 
10 days ago

在 AWS 上新開的一台 EC2 主機,ssh 登入操作時跳出一些語系相關的警告訊息

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en_GB.UTF-8",
LC_MONETARY = "en_GB.UTF-8",
LC_ADDRESS = "en_GB.UTF-8",
LC_TELEPHONE = "en_GB.UTF-8",
LC_NAME = "en_GB.UTF-8",
LC_MEASUREMENT = "en_GB.UTF-8",
LC_IDENTIFICATION = "en_GB.UTF-8",
LC_NUMERIC = "en_GB.UTF-8",
LC_PAPER = "en_GB.UTF-8",
LANG = "en_US.UTF-8"
  are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
locale: Cannot set LC_ALL to default locale: No such file or directory

原因是在 ssh login 時,傳送過去的編碼資料不存在於遠端主機所導致

解決方法很簡單,把編碼的資料建立起來就可以了

$ sudo locale-gen en_GB.UTF-8
Generating locales (this might take a while)...
  en_GB.UTF-8... done
Generation complete.

Reference

https://ubuntuforums.org/showthread.php?t=1346581
http://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue

 
13 days ago

在調整伺服器設定時,一度不小心改錯設定,讓自己無法登入。因為沒有備份,一開始還以為沒救了,打算花時間重新來過

還好意外翻到官方文件上有一篇可以解決方案可以試試。最後成功了,救回不少時間

這個做法的感覺就像是把電腦的硬碟拔下來裝到別台去讀取資料,詳細流程如以下記錄:

記錄

  1. 查看 Instance 的資訊,把 instance ID, AMI ID, Availability Zone, Root device 記錄下來
  2. 點擊 Root device,把 EBS ID 記錄下來
  3. 把 Instance 關機,選 Actions -> Instance State -> Stop

建立新的 Instance

  1. 點擊 Launch Instance
  2. 選擇跟剛剛記錄下來一樣的 AMI
  3. 在 Configure Instance Details 要選一樣的 Availability Zone
  4. 在 Add Tags 加上 Name=Temp
  5. 到 Review 頁面點擊 Launch Instances

將虛擬硬碟裝到新的 Instance 上

  1. 到 console 左側的功能列表選 Volumes
  2. 找到原 instance 的 volume 卸載,選 Actions -> Detach Volume,然後等它處理完畢
  3. 把同個 volume 掛載到 temp instance 上,選 Actions -> Attach Volume -> 選 temp instance -> 記錄 Device name (ex. /dev/sdf) -> 點 Yes, Attach

登入 Instance 掛載硬碟

  1. 登入 temp instance
  2. 接下來要 mount volume
  3. 使用 lsblk 指令,看到 /dev/sdf 的 device name 以 xvdf 顯示,然後磁區名稱會是 xvdf1 (/dev/xvdf1)
  4. 下 mount 指令
    $ sudo mkdir /mnt/tempvol
    $ sudo mount /dev/xvdf1 /mnt/tempvol
    
  5. 接下來就可以進 /mnt/tempvol ,解救資料,備份資料,修正設定,都可!

硬碟裝回原 Instance

  1. 資料解救完畢後 umount
    $ sudo umount /mnt/tempvol
    
  2. Detach Volume 再重新 Attach Volume 掛回原 instance 的 /dev/sda1
  3. 重新 Start instance

Reference

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#replacing-lost-key-pair

 
16 days ago

RDS (Relational Database Service) 是 Amazon 提供的關聯式資料庫服務

建立一台 MySQL 資料庫

進入 RDS console

  1. 點選 Launch DB Instance
  2. 進入 Select Engine 畫面,RDS 支援至少六種資料庫,其中有免費的,也有要付費的 ex. Amazon Aurora
  3. 選擇我們要使用的 MySQL,點擊 Select
  4. 進入 Specify DB Details 畫面,有一些設定就造預設的不動,以下是要調整的
    • DB Engine Version: MySQL 5.6.27
    • DB Instance Class: db.t2.micro (有 Free tier)
    • Multi-AZ Deployment: No
    • Storage Type: Magnetic
    • DB Instance Identifier: 幫 instance 取個名字
    • Master Username & Password
  5. 進入 Configure Advanced Settings 畫面,以下是要調整的,其他可以用預設
    • VPC: 選一個 VPC
    • Subnet Group: 確認你的 VPC 下有兩個屬於不同 zone 的 subnet,他就會自動建立
    • Availability Zone: 選用跟 EC2 同一個 zone
    • DB Security Groups: 建立一個屬於 DB 用的 security group 然後選擇他
    • Database Name: 幫資料庫取名字
  6. 點選 Launch DB Instance,AWS 會開始建立你的資料庫,可以在 console 上看到進度,status 變成 available 時,就可以開始用資料庫了

登入資料庫

  • 選個自己合意的 MySQL client
  • 資料庫的 Host 是使用 console 上的 Endpoint 那串網址
  • 帳號密碼是剛才建立時輸入的 Master Username & Password
  • 以 mysql-client 為例:
    mysql -h <endpoint> -P 3306 -u <mymasteruser> -p
    

Reference

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.MySQL.html

 
18 days ago

最近在使用 vim 處理文字時,想要刪掉特定的幾行,試了幾個方法後,發現一個好像很方便的 :g 指令

global command :g

:[range]g/pattern/cmd

針對特別的 range (預設是整個檔案),找出符合 pattern 的每一行,執行 cmd 的處理

Example

刪掉符合的每一行

:g/pattern/d

刪掉「不」符合的每一行

:g!/pattern/d
:v/pattern/d

刪掉所有的空白行

:g/^\s*$/d

符合的每一行移到檔案結尾

:g/pattern/m$

反轉整份文件

:g/^/m0

在符合 pattern 的每一行行尾加上「mytext」

:g/pattern/s/$/mytext

Reference

http://vim.wikia.com/wiki/Power_of_g

 
20 days ago

EC2 是 AWS 提供的虛擬主機服務,應該算是 AWS 眾多的服務中我覺得最基本款的,建立好之後就等同擁有一台新主機,之後就是操作主機了

開始建立 EC2 instance 之前,有幾個東西可以先設定好方便建立 instance,分別是:

  • Key Pair
  • VPC
  • Security Group

建立 Key Pair

Key Pair 是登入 EC2 instance 會使用的驗證 key ,設定方式請參考 AWS - 建立 EC2 Key Pairs

建立 Virtual Private Clound (VPC)

VPC 完整名稱是 virtual private cloud
簡單的說,VPC 就是有在 AWS 中的個人專屬虛擬網路,可以讓 EC2 主機運行在 VPC 下

進入 VPC console

  1. 點選 Start VPC Wizard
  2. 選擇 VPC with a Single Public Subnet,點選 Select
  3. 輸入 VPC nameSubnet name
  4. 點選 Create VPC

等待 AWS 處理完畢,便會拿到新的 VPC 跟一個 Subnet

建立 Security Group

Security Group 即是 AWS 裡的防火牆,控制虛擬主機的網路進出

在 VPC 或是 EC2 的 console 都可以設定

  1. 點選 Create Security Group
  2. 輸入 Security group nameDescription
  3. 從 VPC 列表中選擇你要使用的 VPC
  4. 切換 Inbound 分頁,設定規則 (以 web server 為例):
    • Type: HTTP, Source: Anywhere
    • Type: HTTPS, Source: Anywhere
    • Type:SSH, Source: My IP
  5. 點選 Create

建立 EC2 Instance

終於要真正的開始建立 EC2 instance 了

進入 EC2 的 console,點選 Launch Instance 開始建立

  1. Choose AMI,選擇想要使用的 OS image
    • 選用: Ubuntu Server 16.04 LTS (HVM)
  2. Choose an Instance Type,選擇虛擬主機的能使用的資源
    • 選用免費的: t2.micro (free tier)
  3. Configure Instance,一些 EC2 的細節設定,
    • Network: 選一個 VPC
    • Subnet: 選一個 Subnet
    • Auto-assign Public IP: Enable (開啟後 AWS 會自動分配 IP)
  4. Add Storage,設定虛擬主機的儲存裝置,系統預設會建立一顆 10GB 的 SSD
  5. Add Tags,幫主機加上標籤
  6. Configure Security Group,可以使用已經設定好的 Security Group,或是馬上建立一個新的
  7. Review,查看所有選好的設定
  8. 檢查完點選 Launch,接著需要選一組 key pair
  9. 接著就等待 AWS 建立好 Instance,可以回到 Instance 列表中看目前的處理進度

登入 EC2 Instance

當 Instance state 為 running 的時候,你便可以開始試試看登入你的主機了

  1. 選擇要登入的 instance
  2. 選擇 Action -> Connect,會跳出一頁連線的說明對話框,裡面有 ssh 的指令範例
  3. 把範例貼上 terminal 執行,就可以連到 Instance 了

簡化 ssh 登入指令

如果覺得每次登入都要貼很長的指令會很麻煩,可以在 ssh config 裡建立一組設定來簡化 ssh 指令

修改 .ssh/config,加上:

Host computer.aws.com
  Hostname ec2-xxx-xxx.xxx.compute.amazonaws.com
  User ubuntu
  IdentityFile xoxoxox

之後直接執行 ssh computer.aws.com 即可

Reference

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html
https://aws.amazon.com/documentation/vpc/

 
21 days ago

Amazon EC2 在 linux 的主機上,是採用 ssh 連線服務,並以 public key 登入,所以需要為 EC2 主機準備 key pair

設定 Key pair 的位置就在 EC2 Console 裡
開啟 EC2 Console,在功能選單的 NETWORK & SECURITY 下面選 Key Pairs 就是了

以下為兩種基本的設定方法

在 EC2 Console 建立

  1. 點選 Create Key Pair
  2. 在對話框的 Key pair name 裡,輸入名稱給新的 Key pair
  3. 點選 Create,接著 private key 檔案(xxx.pem)會自動下載到電腦中,找個位燈存放好
  4. 將 private key 的權限設定成只有你能看
    $ chmod 400 my-key-pair.pem
    

自行匯入

  1. 自己找個工具(ex. ssh-keygen)產生 key pair
  2. 點選 Import Key Pair
  3. 點選 Browse,然後選擇要匯入的 public key 檔案
  4. 點選 Import

Reference

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html

 
26 days ago

今天要來和 linux 約會(誤


date 是用來看時間或是設定時間用的指令

不加任何的參數可以直接看目前的時間

$ date
Sat  4 Mar 23:52:51 CST 2017

參數

-d STRING 輸出字串所描述的日期

$ date -d 'yesterday'
Sat  4 Mar 00:29:53 CST 2017

-I[FMT] 用 ISO 8601 的格式輸出
FMT 預設為 date 輸出日期而已,FMT 為 s 時會輸出到秒

$ date -Is
2017-03-05T01:08:35+08:00

+FORMAT 輸出指定格式

$ date +'%F %a'
2017-03-05 Sun

然後就可以用來製造你想要的日期列表了

$ MYLIST=("next sun" "next sat" " next fri" "next thu" "next wed" "next tue" "next mon");
for i in 0 1 2 3 4 5 6; do date -d "${MYLIST[$i]}" +"%F %a"; done;
2017-03-12 Sun
2017-03-11 Sat
2017-03-10 Fri
2017-03-09 Thu
2017-03-08 Wed
2017-03-07 Tue
2017-03-06 Mon

Reference

man date

 
2 months ago

面對生活跟工作上的大小事,常常會遇到一個情況:你當下正在處理某一項工作,突然想到一個點子,或是有其他事情來打斷,讓你分心而沒辦法好好的工作。如果這個情況嚴重的話,會讓你感到焦慮,無法好好思考。

我最一開始的解決方法是把這些中斷我工作的事情都寫下來,不過單只有寫下來沒什麼太大的做用
寫久變成一堆凌亂的筆記,被我丟在一旁遺忘掉。

直到我看到 GTD。
這個方法的第一步,跟我原本做的事情是一樣的:把所有事情寫下來。這讓我好奇的往下研究他後續是怎麼做的。

Getting Things Done,縮寫成 GTD,是由 David Allen 提出的一套個人的時間管理方法。用來管理你的生活中跟工作上的大小事,讓你可以排除干擾進而專心做事。

GTD 原則

Your mind is for having ideas, not holding them.
你的大腦是用來思考,而不是用來記憶的。
將所有事情放在手邊,而不是放在大腦裡。

五個步驟

1. Capture - 捕捉

  • 選擇一個適合自己的地方當收件匣,把所有會搶走你注意力的事情都收集記錄進收件匣裡,清空大腦

2. Clarify - 理清

  • 清理收件匣裡的每一件事情,是否為可以執行的任務
  • 不可執行的事情如果是參考資料就存檔,如果沒用處就丟垃圾桶
  • 可以執行的任務要去思考它的下一步行動是什麼
  • 如果可以在兩分鐘內解決的話,就馬上去完成它,如果不行則放到一個清單等待執行

3. Organize - 整理

  • 整理每一件任務,進行分類移到適合的清單中

4. Reflect - 檢視

  • 經常查看你整理的清單,確認你安排的下一個任務,並且更新、清理它
  • 至少每週進行回顧

5. Engage - 執行

  • 依照你建立好的系統,挑出上面的每項任務放心執行

應用

網路上有很多 GTD 跟各種工具的組合運作,目前我是使用 Evernote 來安排我的 GTD 方法,之前則試用過 Trello、Zim、Google Keep 等工具

目前選 Evernote 是因為 Evernote 有 Web 版跟 Android 版,這樣很方便隨時的記錄事情跟查看下一步任務清單。

後記

最近我重新回顧一次 GTD 的原則,跟我的使用方法。發現到我原本的方法很少回顧任務清單,整理的分類也有點復雜,使用起來很沒有效率。這一次的回顧對原來的方法進行了一些調整,目標是讓執行方法更簡單,並且更集中注意力。有沒有效就要運作一段時間才知道了。

Reference

David Allen's Getting Things Done® Methodology
搞定! GTD | ihower { blogging }
儘管去做 - 維基百科,自由的百科全書
Evernote GTD 方法教學:我的「搞定」時間管理實踐 2016 版 - 電腦玩物

 
9 months ago

2010 年剛接觸 Git 時,自己做了一個陽春的介紹網頁,最近才放上 Github 上。

之後有機會再改版。

連結

web page: https://nyogjtrc.github.io/howtobegit/
github: https://github.com/nyogjtrc/howtobegit