Hightlight.js-9.15.6

2019年2月17日 星期日

[Google] 用Linux CLI操作google drive雲端硬碟

最新的流程需重新編譯gdrive,請參考 https://tigernaxo.github.io/blog/post/tools/gdrive/

介紹一個好用的工具:Gdrive CLI Client,可以透過指令列在Linux主機上和google雲端硬碟之間執行上傳、下載、同步,要將資料分享給其他人時特別好用,如果有教育版的帳號那基本上雲端空間是沒有限制的,不用白不用,下面流程的使用的版本是2.1.0:

設定Gdrive CLI Client


下載與設定

需要先從瀏覽器下載gdrive-linux-x64版本之後上傳Linux,假設放在${HOME}/gdrive-linux-x64:
# 建立${HOME}/bin
$ mkdir -p ${HOME}/bin
# 把gdrive-linux-x64放進去重新命名為gdrive
$ mv ${HOME}/gdrive-linux-x64 ${HOME}/bin/gdrive
# 賦予gdrive執行權限
$ chmod u+x ${HOME}/bin/gdrive

# 如果PATH裡面找不到${HOME}/bin就新增並重新讀取環境設定
$ echo ${PATH} | grep -qE ${HOME}/bin[^/] && \
> echo "PATH=\${HOME}/bin:\${PATH}" >> ~/.bashrc && \
> . ~/.bashrc

連結google帳戶

安裝好Google drive CLI後需要取得雲端硬碟帳戶授權,gdrive預設會在${HOME}/.gdrive底下找授權檔,由於目前我們沒有任何授權,所以需要先下簡單的指令觸發token請求,取得token之後會出現一個檔案叫做${HOME}/.gdrive/token_v2.json,並且在終端機出現雲端硬碟所有檔案及資料夾清單(預設最多出現30筆):
# 以list命令觸發token請求
# 這裡會得到一個網址,貼到瀏覽器的網址列enter,之後選擇你要連結的帳戶,按照步驟授權後貼上授權碼,成功的話就會出現清單。
$ gdrive list
Authentication needed
Go to the following url in your browser:
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=...

Enter verification code:7/4wDh2A_4vtaFR9JibaVC-l-lv2sV7SSCj0QsWL-J2-mcTGY9xrTi9rU



查詢檔案


gdrive除了一些特殊資料夾,像是根目錄沒有ID直接叫做root之外,對於檔案跟資料夾的操作都基於id,而獲得檔案與資料夾id常用的方式有三種:
  1. 資料夾網址觀察id:https://drive.google.com/drive/u/1/folders/1D8kkabcEecxxxxxxNSAy8ho97gTRuyNa
  2. 檔案右鍵後選擇"取得檔案共用連結,貼到文字編輯器觀察id:https://drive.google.com/open?id=1QJUxAzep1s4xxxxxxxUWUxf1H3KBrTNO
  3. 透過gdrive list指令配合搜尋參數(重要!可參閱文件)查詢,就是以下要介紹的方法。

查詢雲端檔案清單

# 列出雲端硬碟最上層資料夾(root)的內容
$ ./gdrive-linux-x64 list -q "'root' in parents"
Id                                             Name         Type   Size   Created
1zY5UMnx-xxxxxxfuetg7cyrY5MU-k8w4              tmp          dir           2018-05-29 02:32:33
1D8kkabcEecxxxxxxNSAy8ho97gTRuyNa              Backup       dir           2018-03-27 05:14:21
1gFOCwss-xxxxxxKF5td-g-Ovj_z4JoEcqpVHq1t5u4Y   Google 相簿    dir           2017-07-07 14:02:17

# 列出特定資料夾的內容,1D8kkabcEecxxxxxxNSAy8ho97gTRuyNa是資料夾id
$ ./gdrive-linux-x64 list -q "'1D8kkabcEecxxxxxxNSAy8ho97gTRuyNa' in parents"
Id                                  Name        Type   Size      Created
1sqZTRRd5ucxxxxxx7l4ApnlLs4kVOsyF   note0001    bin    196.0 B   2018-07-18 06:41:12
1V-CvduOE9exxxxxxAflObt2wbGbD49zz   note0002    bin    199.0 B   2018-07-18 06:41:11
1SOq0opXxXQxxxxxxiCy5eY3ivO-KFVLy   back        dir              2018-07-18 06:40:56
1tyJcRaO9Dfxxxxxxo6yvndSkr8zpos_D   test.sh     bin    4.6 KB    2018-07-18 06:38:25



上傳/下載


下載
# 下載某個檔案
$ gdrive download 1tyJcRaO9Dfxxxxxxo6yvndSkr8zpos_D
Downloading myTestFile1 -> myTestFile1
Downloaded 1tyJcRaO9Dfxxxxxxo6yvndSkr8zpos_D at 402.0 B/s, total 402.0 B

# 下載整個資料夾
$ gdrive download -r 1D8kkabcEecxxxxxxNSAy8ho97gTRuyNa
Downloading myTestFile1  -> myTestFolder /myTestFile1
Downloading myTestFile2  -> myTestFolder /myTestFile2
Downloading myTestFile3  -> myTestFolder /myTestFile3
Downloading myTestFile4  -> myTestFolder /myTestFile4

上傳
# 上傳某個檔案到某個資料夾
$ gdrive upload -p 1D8kkabcEecxxxxxxNSAy8ho97gTRuyNa myTestFile4
Uploading myTestFile5
Uploaded 1tyJcRaO9Dfxxxxxxo6yvndSkr8zpos_D at 87.8 KB/s, total 151.3 KB

# 上傳整個資料夾到某個資料夾底下
$ gdrive upload -r -p 1D8kkabcEecxxxxxxNSAy8ho97gTRuyNa myTestFolder
Creating directory myTestFolder
Uploading myTestFolder/myTestFile1
Uploading myTestFolder/myTestFile2
Uploading myTestFolder/myTestFile3
Uploading myTestFolder/myTestFile4




資料夾同步


資料夾同步到雲端
# 建立一個空資料夾並上傳雲端,作為雲端同步資料夾
$ mkdir syncTest
$ gdrive upload -r syncTest

# 查詢剛剛上傳的空資料夾ID
$ gdrive -q "name = 'syncTest'"
Id                                  Name       Type   Size   Created
1Uv5MxUXcxxxxxxcjM2nT_3hcuz-SMNnV   syncTest   dir           2019-02-18 09:52:26

# 把本地資料夾的內容同步到雲端
$ gdrive sync upload local_folder 1Uv5MxUXcxxxxxxcjM2nT_3hcuz-SMNnV
Starting sync...
Collecting local and remote file information...
Found 7 local files and 0 remote files

1 remote directories are missing
[0001/0001] Creating directory syncTest/ae006468

6 remote files are missing
[0001/0006] Uploading ae006468/0.error -> syncTest/ae006468/0.error
...
Sync finished in 13.435891267s

雲端同步到資料夾
# 建立一個空資料夾準備接收雲端資料
$ mkdir syncTest2

# 把雲端內容同步到本地資料夾
$ gdrive sync download 1Uv5MxUXcxxxxxxcjM2nT_3hcuz-SMNnV syncTest2
Starting sync...
Collecting file information...
Found 0 local files and 7 remote files

1 local directories are missing
[0001/0001] Creating directory syncTest2/ae006468

6 local files are missing
[0001/0006] Downloading ae006468/result.ok -> syncTest2/ae006468/result.ok
Sync finished in 7.269982268s

2019年2月15日 星期五

[台灣杉] 善用module切換python環境

台灣杉有module載入的功能,module可以快速幫我們在台灣杉上面切換執行環境,台灣杉預設載入的${HOME}/.bashrc有一行module load gcc,如果你沒更動過的話那預設就可以找到gcc6.3.0 (以gcc開頭的module只有gcc/6.3.0才可以這樣載入),要注意有些module間並不相容。

module常用功能


  取得module功能的說明:module -H
  列出當下已載入的module:module list
  載入特定module:module add/load modulefile [modulefile ...]
  卸載特定module:module rm/unload modulefile [modulefile ...]
  清空當前環境所有module:module purge

$ module list
Currently Loaded Modulefiles:
  1) gcc/6.3.0



範例


掛載python3


# 台灣杉預設的python版本是2.7.5
$ python -V
Python 2.7.5

# 原本是沒有python3的
$ which python3
/usr/bin/which: no python3 in ...

# 掛載python3/3.5.6模組
$ module load python3/3.5.6
$ module list
Currently Loaded Modulefiles:
  1) gcc/6.3.0       2) python3/3.5.6

# 測試掛載後是否可使用python3及pip
$ which python3 && python3 -V
/pkg/python3/bin/python3
Python 3.6.5
$ which pip3 && pip3 -V
/pkg/python3/bin/pip3
pip 9.0.3 from /pkg/python3/lib/python3.6/site-packages (python 3.6)

掛載anaconda3/5.1.10


我們可以透過掛載anaconda3/5.1.10管理虛擬環境,並且使預設的python指令指向掛載的python3:
# 未掛載anaconda3/5.1.10模組之前台灣杉預設的python是版本2.7.5
$ python -V
Python 2.7.5

# 掛載anaconda3/5.1.10
$ module load anaconda3/5.1.10
$ module list
Currently Loaded Modulefiles:
  1) gcc/6.3.0          2) anaconda3/5.1.10

# 掛載anaconda3/5.1.10模組之後python指向版本3.6.4
$ python -V
Python 3.6.4 :: Anaconda, Inc.

2019年2月12日 星期二

[台灣杉] 利用(Access Control List)權限設定團隊專屬資料夾

在大型主機上會發生多團隊並共用某個資料夾,一般來說自己資料夾只有自己可以存取倒是沒什麼問題,但是如果有資料只想要分享給所屬團隊成員,偏偏這些團隊又都隸屬同個Linux群組,單純只是把權限改成750又會被別的團隊看到。這時候就需要額外的ACL (Access Control List)權限設定了:

# 建立分享資料夾並先關閉group、other的權限
$ mkdir share && chmod 700 share

# 逐一設定設定使用者id1 id2 id3
setfacl -m d:u:id1:rx,d:u:id2:rx,d:u:id3:rx share

# 查看ACL資料夾設定
$ getfacl share
# file: share/
# owner: myId
# group: myGroup
user::rwx
user:id1:r-x
user:id2:r-x
user:id3:r-x
group::---
mask::r-x
other::---
default:user::rwx
default:user:id1:r-x
default:user:id2:r-x
default:user:id3:r-x
default:group::---
default:mask::r-x
default:other::---
設定完成!現在只有剛剛設定的使用者可以讀、進入該資料夾,並且新增的資料夾可以繼承權限設定,所以使用者id1~id4也都可以讀取新增的資料夾,現在可以開始把資料放進去了,但是資料本身的權限要打開喔!