2018年6月7日 星期四

diskpart - Windows 管理硬碟與分割區的工具

diskpart是Windows下用以管理及操作磁碟與分割的CLI工具。

assign

指派一個磁碟機代號或掛接點到所選擇磁碟區。


clean

清除磁碟上所有資訊,可以用以清除磁碟上的分割區。


create

建立一個磁碟區、磁碟分割或虛擬磁碟。

partition - 建立一個磁碟分割。
efi - 建立一個EFI系統磁碟分割。
extended - 建立一個延伸磁碟分割。
logical - 建立邏輯磁碟區。
msr - 建立一個Mircrosoft保留的磁碟分割。
primary - 建立主要磁碟分割。

volume - 建立一個磁碟區。
vdisk - 建立虛擬磁碟檔案。


exit

離開diskpart。


format

格式化磁碟區或磁碟分割。

OPTIONS
fs=<FS> - 指定檔案系統的類型。ex: fs=ntfs。
label=<"LABEL"> - 指定磁碟區標籤。ex: label=D。
quick - 執行快速格式化。


list

列出物件的清單。

disk - 列出磁碟。
partition - 列出所選磁碟上的分割。
volume - 列出磁碟區。
vdisk - 列出虛擬磁碟。


select

將襙作移至所選物件。

disk - 將操作移至所選磁碟。
partition - 將操作移至所選分割。
volume - 將操作移至所選磁碟區。
vdisk - 將操作移至所選虛擬磁碟。


shrink

縮小所選磁碟區。

OPTIONS
desired=<N> - 指定要縮減的磁碟區空間大小(MB)。ex: desired=100000。
querymax - 回傳所選磁碟區可縮減的空間最大值(磁碟區上的可用空間),但如果
  應用程式正在存取磁碟區,此值可能會改變。



diskpart批次檔


diskpart也能寫成批次檔形式,可以參考:
diskpart-scripts-and-examples

執行diskpart script
diskpart /s example.txt

Batch script 筆記

參考網頁
windows-commands
https://ss64.com/nt/
https://en.wikibooks.org/wiki/Windows_Batch_Scripting

  • 參數

Batch的參數使用 %n (%0、%1、%2、%3 ...) 來代表第n個參數,%0 代表batch檔本身。

%n 還可以使用下列擴充語法,詳細內容可以使用 call /? 來參考:
%~1 - 展開 %1 並移除包圍的引號(")
%~f1 - 展開 %1 為一個完整合格路徑名稱
%~d1 - 只展開 %1 為磁碟機代號
%~p1 - 只展開 %1 為路徑
%~n1 - 只展開 %1 為檔名
%~x1 - 只展開 %1 為副檔名
%~z1 - 顯示 %1 的檔案大小

常見應用

%~dp0
batch檔所在的目錄,常與%CD%作為比較,%CD%代表的是當前的工作目錄。


  • 動態變數

cmd.exe下可使用的動態變數,不會出現在set 命令的環境變數列表中,在每次展開時
都會重新計算一次。


%CD%
展開當前工作目錄的字串。

%RANDOM%
展開一個範圍0到32767間的整數。

%ERRORLEVEL%
展開目前ERRORLEVEL的值。

參考範例
在Batch 中取出字元的ASCII Number


  • 輸出命令重新定向

COMMAND > FILENAME
清除原有內容後再寫入

COMMAND >> FILENAME
在原有內容後寫入

COMMAND < FILENAME
將FILENAME的內容傳入COMMAND

COMMAND_A | COMMAND_B
將COMMAND_A的output傳入COMMAND_B

常見應用

COMMAND > nul
不印出輸出命令結果


  • cd

切換目錄

/d
同時切換磁碟機


  • del

刪除一或多個檔案

/q
Quiet Mode。不會再次詢問是否刪除檔案。


  • endlocal

復原setlocal前的環境變數


  • exit

結束cmd.exe或目前的batch script。

/b
結束目前的batch script而不是cmd.exe。

/b [exitCode]
將ERRORLEVEL variable設為exitCode所設的數字。


  • findstr

搜尋檔案中的字串

/c:string
所要逐字搜尋的字串。若要搜尋多個字串,可用空白字元分隔。

/r /c:string
將string視為regular expression來使用。


  • for 迴圈


使用for 迴圈iterate 項目
for %%PARAMETER in (ITEM1 ITEM2 ITEM3 ...) do COMMAND

一次讀出字串並將其分成獨立的項目(tokens)
for /f ["OPTIONS"] %%PARAMETER in ("Text string to process") do COMMAND

一次讀出command的輸出並將其分成獨立的項目(tokens)
for /f ["OPTIONS"] %%PARAMETER in ('COMMAND_TO_PROCESS') do COMMAND

使用一段範圍的數字iterate
for /l %%PARAMETER in (start,step,end) do COMMAND
start - 起始數字
step - 迴圈數字所要增加的值,可為負數
end - 結束數字


OPTIONS
Key   Description  
delims=xxx   設定分隔字元(預設為空白字元),xxx表示可設定多個字元。  
token=x,y  
token=z*  
token=m-n  
用來決定要取出的item,並且放到parameter中。 
若token=x,就取出第x項item。  
token=x,y,若parameter設為%a,便取出第x與y項item分別置於%a和%b自動變數中。 
token=z*,若parameter設為%a,取出第z項置於%a中,並將第z項後的所有item置於%b中。 
若token=m-n,便取出第m至第n項。 


  • if 判斷式


判斷檔案存在與否
if [not] exist FILENAME COMMAND if [not] exist FILENAME (COMMAND) else (COMMAND)
判斷文字字串是否相符 if [not] STRING1==STRING2 COMMAND
使用數值進行判斷 if [not] ITEM1 compare-op ITEM2 COMMAND if [not] ITEM1 compare-op ITEM2 (COMMAND) else (COMMAND)
/i
忽略大小寫。

compare-op:
EQU - Equal
NEQ - Not Equal
LSS - Less Than
LEQ - Less Than or Equal
GTR - Greater Than
GEQ - Greater Than or Equal


  • set

顯示、設定或移除cmd.exe的環境變數。若不加任何參數,就會顯示所有環境變數。

將變數設為文字字串
set VARIABLE=STRING
將變數設為數學運算後的值
set /a "VARIABLE=expression"

常見應用

set VARIABLE=
VARIABLE初始化

set /a VARIABLE=HEX_NUMBER or OCT_NUMBER
可將十六進位數字(ex: 0x2F) 或八進位數字(ex: 057) 轉換成十進位數字。


  • setlocal

將環境變數帶入到Batch 的local變數中,在Batch執行完或endlocal時結束。

設定或取消延遲變數展開
setlocal {EnableDelayedExpansion | DisableDelayedExpansion}
EnableDelayedExpansion - 延遲變數展開
DisableDelayedExpansion - 取消延遲變數展開

補充說明
延遲變數展開 (EnableDelayedExpansion)


2018年6月5日 星期二

Docker 命令列介面筆記

本篇文章參考來源:
https://docs.docker.com/get-started/part2/
https://docs.docker.com/engine/reference/commandline/docker/

  • docker pull

從 registry取得 image

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

docker pull python


取得 python的image

docker pull python:3.8.16


取得 python版本為3.8.16的image

  • docker build

使用Dockerfile建立image

docker build [OPTIONS] PATH | URL | -
OPTIONS
Name, shorhand   Description  
--tag, -t   指定image的命名及tag,格式為name:tag,tag為optional  


  • docker image

管理操作image

docker image COMMAND

docker image ls


列出image

OPTIONS
Command   Description  
--all, -a   列出所有images  

docker image rm


刪除 image


  • docker run

在新的container中執行命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS
Name, shorhand   Description  
--detach, -d   讓container在背景執行  
--interactive, -i   保持 container中的 STDIN開啟  
--publish, -p   將container的port映射到host端  
--rm   在container exit後自動移除  
--tty, -t   分配一個 pseudo-TTY給 container  

docker run --rm -i -t python:3.8.16


python的交互模式在 container中執行


  • docker container

管理操作container

docker container COMMAND

docker container ls


列出container

OPTIONS
Command   Description  
--all, -a   列出所有container  

docker container stop


docker container stop [OPTIONS] CONTAINER [CONTAINER...]
終止執行中的container

2018年5月31日 星期四

Dockerfile 指令筆記

本篇文章參考來源:
https://docs.docker.com/get-started/part2/
https://docs.docker.com/engine/reference/builder/

使用者可以透過Dockerfile來定義Docker container的開發環境。

Dockerfile的基本格式:
# comment
INSTRUCTION arguments

引用官方範例如下:
# Use an official Python runtime as a parent image
FROM python:2.7-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]


FROM


FROM <image>[:<tag>]

引入container所需要的Base Image。


WORKDIR


WORKDIR /path/to/workdir

指定docker執行指令的工作目錄


ADD


ADD <src>... <dst>

將<src>的檔案及目錄複製到image的<dst>中


RUN


RUN <command>
RUN ['executable', 'param1, 'param2']

在當前的image上會再建立新的一層image,並在新的image執行RUN的command


EXPOSE


EXPOSE <port> [<port>/<protocol>...]

指定container對外部開放的port


ENV


ENV <key> <value>
ENV <key>=<value> ...

建立build stage時的environment variable


CMD


CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

image被啟動時所執行的command,在Dockerfile中只有最後一個CMD會被執行。


2018年5月28日 星期一

在 Ubuntu下安裝 Docker CE

本篇文章參考來源:https://docs.docker.com/install/linux/docker-ce/ubuntu

  • 移除舊版的 Docker

在Docker較新的版本中,將Docker區分為CE(Community Edition)與EE(Enterprise Edition)的版本, 所以在安裝前,最好先移除舊版的Docker。

$ sudo apt-get remove docker docker-engine docker-io

  • 透過 Docker的 repository來進行安裝


設定 Docker的 repository


1. 更新 apt的套件資訊

apt會使用 /etc/apt/sources.list來更新套件資訊,讓套件與相關 repository同步。

$ sudo apt-get update

2. 安裝相關套件讓 apt能透過 HTTPS使用 repository

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

3. 加入Docker的 GPG key

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
接下來,確認剛加入的key是否含有以下fingerprint
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

搜尋fingerprint最後8個字元為0EBFCD88 $ sudo apt-get fingerprint 0EBFCD88 pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-0222

4. 使用Docker Stable 的 repository

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"


安裝Docker CE


1. 再次更新 apt的套件資訊

$ sudo apt-get update

2. 安裝Docker CE

$ sudo apt-get install docker-ce

3. 運行 hello-world image來確認Docker是否安裝成功

$ sudo docker run hello-world

2018年5月14日 星期一

使用 Virtualenv 開發 Python



  • 安裝 Virtualenv

使用pip指令安裝Virtualenv

Windows:
> python -m pip install virtualenv


  • 使用 Virtualenv 建立虛擬環境

將路徑切換至Python需要建立虛擬環境的目錄下,並執行

Windows:
> python -m virtualenv [env_name]
env_name為所要建立虛擬環境的名稱,之後就會在目錄下產生名為[env_name]的資料夾


  • 運行虛擬環境

執行env_name/Scripts中的activate檔案

Windows:
> .\venv\Scripts\activate.bat

執行成功後,命令視窗就會出現目前正運行在虛擬環境中的提示字樣
(env_name)


  • 離開虛擬環境

執行env_name/Scripts中的deactivate檔案

Windows:
> .\venv\Scripts\deactivate.bat

若命令視窗中的提示字樣消失,就代表已經成功離開虛擬環境

2017年12月1日 星期五

Windows「執行」指令筆記

  • Windows執行指令快捷鍵 Win + R
  • 在C:\Windows的目錄下可加入應用程式的捷徑,便可以從「執行」啟動

常用程式
calc 小算盤
mspaint 小畫家
snippingtool 剪取工具
notepad 記事本
write WordPad
cmd 命令提示字元
powershell Windows PowerShell
explorer 檔案總管

系統目錄
shell:startup 系統啟動資料夾
shell:sendto 傳送到(send to)資料夾

系統資訊
msinfo32 系統資訊
msconfig 系統設定
regedit 登錄編輯程式
control 控制台
dcomcnfg 元件服務
winver 顯示windows版本

系統配置
tpm.msc TPM管理
devmgmt.msc 裝置管理員
diskmgmt.msc 磁碟管理
eventvwr.msc 事件檢視器
taskschd.msc 工作排程器

2017年10月30日 星期一

Shell script 筆記

Parameter Expansion

${parameter#word}
${parameter##word}
${parameter%word}
${parameter%%word}
#跟##是從parameter前面開始匹配word,並移除成功匹配的部分,而%與%%則是從後面開始匹配。 "*"可用以表達任意長度字元。#與##的差別在於#為non-greedy而##則是greedy,%跟%%差別亦然。


Command

read [variable]
將鍵盤輸入值存入variable
-s 不在terminal顯示鍵盤輸入值
-r 不使用escape character
-p [prompt] 顯示字串prompt
-n [nchars] 讀取nchars個字元

read -rsp $'Press any key to continue...\n' -n 1
"按任意鍵以繼續"的功能實作,可用來當作batch中的pause

2017年6月11日 星期日

Regular Expression Cheat Sheet

Metacharacter Description
^ Matches the beginning of a line
$ Matches the end of the line
. Matches any character
\s Matches whitespace
\S Matches any non-whitespace character
\d Matches any digit
\D Matches any non-digit
\w Matches any word
\W Matches any non-word
* Repeats a character zero or more times
*? Repeats a character zero or more times(non-greedy)
+ Repeats a character one or more times
+? Repeats a character one or more times(non-greedy)
[aeiou] Matches a single character in the listed set
[^XYZ] Matches a single character not in the listed set
[a-z0-9] The set of characters can include a range
(pattern) Defines a marked subexpression to extract
(?:pattern) Defines a marked subexpression not to extract
x|y Matches any one of several subexpressions
? Matches the preceding subexpression zero or one time
{n} Matches the preceding subexpression n times
{n,} Matches the preceding subexpression at least n times
{n,m} Matches the preceding subexpression at least n and not more than m times

Assertion Lookbehind Lookahead
Positive (?<=pattern) (?=pattern)
Negative (?<!pattern) (?!pattern)


regex101
https://regex101.com/

2017年6月10日 星期六

在Blogger中添加CSS樣式


在Blogger中添加可以應用在所有文章內容的CSS樣式。以在其他部落格中常見的code block為例, 便於我們在張貼程式碼能時有特別的樣式highlight出來。

首先,進入Blogger的控制面板。並點選左列的「主題」,接者點選「自訂」按鈕。

接著會進入到Blogger主題設計工具的頁面。點選最左列的「進階」,接著點選「新增CSS」。 在「新增自訂CSS」中就能添加自己的CSS了!


將下面的CSS樣式輸入進去,並點選「套用至網誌」,再把要套入樣式的HTML標籤加上class='code_seg', 就能獲得跟下面樣式一樣的效果。
.code_seg {
    display: block;
    font-family: Courier New;
    font-size: 8pt;
    overflow: auto;
    background: #f0f0f0;
    border: 1px solid #ccc;
    padding: 10px 10px 10px 15px;
    max-height: 200px;
    line-height: 1.2em;
}

display: block
每個HTML的element都會有個預設的display屬性。例如:
div、p、form等的預設display為block,block的特性是會讓其內容在新的一行開始顯示,並盡可能把容器撐滿。 a、span、img等為inline,inline的element會連在一起,不會換行。

font-family: Courier New
字型設為Courier New

font-size: 8pt
字型大小設為8pt

overflow: auto
若文字超過block則自動產生捲軸

background: #f0f0f0
背景顏色設為#f0f0f0

border: 1px solid #ccc
邊框的寬度1px、樣式solid及顏色#ccc。

padding: 10px 10px 10px 15px
邊框內的內距,padding-top 10px、padding-right 10px、padding-bottom 10px及padding-left 10px。

max-height: 200px
element的最大高度200px。

line-height: 1.2em
行間距為1.2em