2015/08/24

Detect Built-in Browser

現在有很多原生 App 會開啟 built-in browser,像是 Facebook、 Line,往往 mobile version 的網頁在 app built-in browser 不會 work,上個專案客戶就希望如果展開軟體的是 built-in browser 的話出現希望 user 打開一般 browser 的提示,好在 built-in borwser 有提供相關的 userAgent,抓取方式如下。

var nu = navigator.userAgent;

// Line
if (nu.match(/safari line/i) !== null) {
    // Do something
}

// Facebook
if (nu.match(/facebook/i) !== null) {
    // Do something
}

2015/08/08

18.媽媽的肩膀

媽媽的肩膀最牢靠了。

我是小恐龍~吼~

我沒有很愛當小瓢蟲~

2015/08/04

User And Group

user and group 主要是設定使用者對資料夾存取的權限,以我的狀況比較少碰到這個設定,memo 一下幾個我覺得比較重要的指令。

User

useradd 新增帳號

  • -d 設定 home 目錄
  • -g 預設群組
  • -G 次群組
  • -m 自動建立 home
  • -M 不自動建立 home
  • -s bash 位置
# 建立帳號 chan
useradd chan
 
# 建立帳號不設定 home 資料夾並設定多組次群組
useradd chan -M -G group1,group2 -s /bin/bash
 
# 建立帳號並指定登入資料夾
useradd chan -d /var/www/test
 
# 幫帳號設定密碼
passwd chan

usermod 修改帳號

  • -d 設定 home 目錄
  • -g 預設群組
  • -G 次群組
  • -m 自動建立 home
  • -M 不自動建立 home
  • -s bash 位置
  • -L lock user
  • -U unlock user

基本上 usermoduseradd 指令不會差太多,主要是用來修改一些當參數。

# 鎖住帳號
usermod -L chan
 
# 解鎖帳號
usermod -U chan
 
# 取代次群組
usermod -G group3 chan
 
# 增加次群組
usermod -aG group3 chan

userdel 刪除帳號

# 刪除帳號
userdel chan

# 刪除用戶的同時,一併把使用者的家目錄及本地郵件存儲的目錄或檔也一同刪除
userdel -r chan

group

groupadd 建立群組

# 建立群組
groupadd group1

gpasswd 設群組成員和密碼

  • -a 增加群組成員
  • -d 刪除群組成員
# 增加使用者到群組
gpasswd -a chan group1
 
# 移除使用者到群組
gpasswd -d chan group1

groupmod 修改群組

  • -g 修改 gid
  • -n 修改群組名稱
# 修改群組名稱
groupmod -n newname oldname

目錄

chmod 修改目錄權限

  • -R 遞迴式修改

Linux 檔案的基本權限就有九個,分別是 owner/group/others 三種身份各有自己的 read/write/execute 權限,檔案的權限字元為:-rwxrwxrwx,r:4 w:2 x:1,每種身份 (owner/group/others) 各自的三個權限 (r/w/x) 分數是需要累加的,例如當權限為: [-rwxrwx—] 分數則是:

  • owner = rwx = 4+2+1 = 7
  • group = rwx = 4+2+1 = 7
  • others= — = 0+0+0 = 0
# 修改檔案或目錄權限
chmod -R 777 DIRECTORY

chgrp 改變所屬群組

  • -R 遞迴式修改
# 修改擁有群組
chgrp -R group1 DIRECTORY

chown 改變檔案擁有者

  • -R 遞迴式修改
# 改變擁有者
chown -R chan DIRECTORY
 
# 改變擁有者加擁有群組
chown -R chan:group1 DIRECTORY

其他

# 查詢 server 有多少使用者
cat /etc/passwd
 
# 由於 server 使用者太多了,比較建議查 /etc/shadow
# 我們設定的帳號都在末端,有密碼的跟沒密碼的一目了然
cat /etc/shadow
tail -10 /etc/shadow
 
# 查詢現在有哪些群組
cat /etc/group
tail -1- /etc/group
getent group
 
# 查詢單一群組有多少 user
getent group group1
 
# 查詢 user 加入了多少群組
groups chan

# 查詢目前登入者 uid gid groups
id

# 查詢某個帳號
id sshd
uid=113(sshd) gid=65534(nogroup) groups=65534(nogroup)

# 查詢某個帳號 uid
id -u sshd
113

# 查詢某個帳號 gid
id -g sshd
65534

# 用 uid 反查帳號
id -un 113
sshd

# 用 gid 反查群組
id -gn 65534
nogroup

2015/08/01

lftp

自己在 DigitalOcean 租了空間,所以我現在習慣把專案上傳到 server,在 server 編輯跟上 git server,只要我有 terminal 的情況下在哪邊都可以工作 QQ,如果客戶的 demo 網站在我這邊的話就很方便,但常常會遇到的情況是客戶有自己的 ftp,所以變成邊改要邊上傳,在本機的 windows 環境下我使用 WinSCP 來作這件事情,他可以 monitor 某個資料夾,監控到有檔案更新便自動上傳 FTP,並且可以設定一些 filter,在 Linux 部分我一直在找最佳解,用了幾個方法以後 lftp 可能是最接近的答案了。

傳統的 ftp 指令必須掛在 server 上,要上傳或下載要自己切換根本不可能,假設不能自動檢查更新,起碼要可以增量備份,於是我用了 rsync 跟 scp 這兩個指令多次測試,都沒有辦法順利完成我要的,lftp 好處是,他可以模擬 http 的辦法進入 ftp,所以你可以打好一堆指令一次執行,也可以把執行腳本寫在文字檔裡去吃,重要的是他有 mirror 功能可以做到增量修改備份上傳這件事,除了自動監控以外沒什麼可以挑剔的了。

簡易參數介紹

  • -c 後面直接加上所需要的指令
  • -e | –delete 沒有檔案就刪除
  • –only-newer 上傳或下載比較新的
  • –parallel 同時使用的序列
  • –verbose 詳盡模式
  • -r | –no-recursion 不遞迴檢查
  • -R 下載變上傳,備分到遠端
  • -u 後面則是接上帳號與密碼,就能夠連接上遠端主機了,如果沒有加帳號密碼, lftp 預設會使用 anonymous 嘗試匿名登入
  • -f 可以將指令寫入腳本中,這樣可以幫助進行 shell script 的自動處理喔!

你可以直接打整行的命令

lftp -e "put /local/path/xxx.mp4 bye" -u username,password ftp.myftp.com

也可以將指令寫在指令中,下面是我自己的工作習慣設訂

upload.lftp
open username:password@ftp.myftp.com # 若要連 sftp 可改成 sftp://username:password@myftp.com
cd /to/path/ # 遠端需要的正確資料夾,如果沒有可以不用
mirror -R /local/path/ --only-newer --verbose –parallel=10 --exclude .git/ --exclude upload.lftp --exclude-glob *.swp
echo done!

這樣只要執行下面的指令就可以上傳了

lftp -f upload.lftp

mirror 介紹

mirror 這個指令可以做到上下傳同步的功能,也可以指定資料夾同步,主要的下法是 mirror source target,假設今天 remote 的目錄是 /www/public/ local 是 /var/www/site/,要下載同步指令為 mirror /www/public/ /var/www/site/,上傳同步則相反,mirror -R /var/www/site/ /www/publc/,假設我們今天是要同步下載 css 資料夾下的檔案,指令為 mirror /www/public/css/ /var/www/site/css/,如果是要同步上傳的話就是 mirror -R /var/www/site/css /www/public/css,如果你確定你是在該資料夾的決對路徑,假設你已經在 /var/www/site/ 下了,你要同步下載的話只要指定 source 路徑即可,mirror /www/public/css,如果你要同步上傳,反過來就是對方路徑是 target,所以你在 config 必須先指定到該資料夾成為 target,然後你在指定自己 source 要同步的目錄,不打的話就是整個目錄。

open username:password@ftp.com
cd /www/public/
mirror -R --verbose css/

vim 的 user 可以裝上 lftp-sync.vim 這個由 c9s 大大寫的套件,可以存檔後上傳所有的 buffer 或者是單檔,然後在寫一個 sync 的檔案拿來跑一些可能是由美術更新的資料夾,每次要做專案前 sync 一次,應該就可以大致解決檔案同步問題。

###參考網站###