2012/04/21

sudo: no valid sudoers sources found, quitting

犯了一個天大的錯誤,就是編輯 sudoers 的時候,忘記把權限改回來,於是就失去了 sudo 的權限了...
sudo: /etc/sudoers is mode 0640, should be 0440
sudo: no valid sudoers sources found, quitting

如果你的機器就在旁邊的話,可以進入 recovery mode 或用 liveCD 把權限改回來。

如果是在 AWS呢?找到一篇教學:
Fixing Files on the Root EBS Volume of an EC2 Instance - Alestic.com

步驟
1. 把 Server A 的 EBS Volume detach,然後 attach 到另外一台 Sever B
2. 進入 Server B 把 device node mount,開始修復檔案
3. 最後再 attach 回原本的 Server A


後來才知道,要用 visudo 這個指令去修改才對...

2012/04/18

Linux下如何偵測網路介面是否有插上線

如果一台主機上有8個 network interface (eth0 - eth7),要怎麼知道我現在插上的網路線是對應到ethN?


$ sudo ethtool eth0
Settings for eth0:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full
                            100baseT/Half 100baseT/Full
                            1000baseT/Full
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    Supports Wake-on: umbg
    Wake-on: g
    Current message level: 0x00000007 (7)
    Link detected: yes

Link detected: yes 表示是有插上線的,但前提是一定要先把 interface 叫起來 (ifconfig eth0 up),這個偵測才有用。


參考資料中還有提到其他的方法
$ grep "" /sys/class/net/eth0/*
...
/sys/class/net/eth0/carrier:1
...
/sys/class/net/eth0/operstate:up
...


參考資料
linux - How to detect the physical connected state of a network cable/connector? - Stack Overflow

Nginx 加速 web 存取速度

對於靜態資料不外乎就是 cache、CDN (Content delivery network),減少後端 server 的 loading。

讓 static content 去別台抓
location ^~ /static {
    proxy_pass http://cdn.server/static;
}

讓 static conetent 由 nginx 處理,不透過後端 http server
location ^~ /static {
    root /var/www
}

承上,並加入 cache 機制,第一次會去檔案讀取,之後就從 cache 讀取 (要注意 cache refresh的問題)
location ^~ /static {
    root /var/www;
    proxy_buffering on;
    proxy_cache_valid 200 120m;
    expires 30d;
}

如果 static file 在多個目錄,用 OR 的方式去match
location ~* (/images|/css|/js) {
   ...
}

如果 static file 分佈在各個目錄,可以利用下面的 rule 去 match 附檔名
location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
   ...
}