<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>James Wang's Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/jameswang/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/jameswang/feed.xml</link>
    <description>All about Microsoft Azure</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:39:47 GMT</lastBuildDate>
    <language>zh_TW</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Azure Machine Learning 分享 @ CS+X</title>
      <link>https://docs.microsoft.com/archive/blogs/jameswang/azure-machine-learning-%E5%88%86%E4%BA%AB-csx</link>
      <pubDate>Sat, 26 Nov 2016 13:41:42 GMT</pubDate>
      <dc:creator><![CDATA[James(Fan) Wang]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jameswang/?p=205</guid>
      <description><![CDATA[上禮拜二 (11/15) 回台大擔任 CS+X 社團系列講座第一場的講者，題目是「利用 Azure Machine Learning...]]></description>
      <content:encoded><![CDATA[<div id="doc" class="markdown-body container-fluid">

<img src="https://i.imgur.com/HF0wHwR.jpg" alt="" width="532" height="400" class="aligncenter" />

上禮拜二 (11/15) 回台大擔任 CS+X 社團系列講座第一場的講者，題目是「利用 Azure Machine Learning 輕鬆預測」，在短短的一個半小時和大家分享機器學習的基本觀念還有好用的平台工具，也趁這難得的機會把分享內容跟一些心得整理下來和大家交流分享。
<h2 id="當-cs-遇上-x"><a href="#當-cs-遇上-x" class="anchor hidden-xs" title="當-cs-遇上-x"><span class="octicon octicon-link"></span></a>當 CS 遇上 X</h2>
什麼是 CS+X？ CS+X 是希望透過結合電腦科學 (Computer Science) 以及專業知識領域 (X) 培養跨領域的人才，透過 CS 的知識解決其他專業領域的問題，目前在台大在共同教育中心開設了 CS+X 的學分課程，也另外成立了 CS+X 社團，每個月會辦講座以及工作坊的形式，讓非電資理工科系的同學可以掌握資訊領域的基本概念，進而用在其他專業領域上。CS+X 社團約一個月多前正式成立，一群熱血的老師及幹部馬上熱血籌辦系列講座跟工作坊，所以才有了這次的講座。
<h2 id="csx-月月系列講座一-machine-learning"><a href="#csx-月月系列講座一-machine-learning" class="anchor hidden-xs" title="csx-月月系列講座一-machine-learning"><span class="octicon octicon-link"></span></a>CS+X 月月系列講座(一) Machine Learning</h2>
這次分享的是機器學習 (Machine Learning) 的基本概念以及如何利用 Azure Machine Learning Studio 快速嘗試機器學習的實驗。

首先我們看一個很經典的數據集 (dataset) --鐵達尼號，裡面包含了當年遇難者1514人其中891筆資料，包含最後生還與否、年齡、性別、姓名、艙等等等。我們想要嘗試透過機器學習的方法預測出其他乘客、或是假想如果當年我們也在船上能否生還。

首先可以透過<a href="https://demos.datasciencedojo.com/demo/titanic/">這個網站</a>來做一些簡單的測試，輸入乘客資料後便可以預測生存的機率。它是怎麼做到的呢? 背後是利用資料集裡面乘客的各項數據來訓練模型，模型可以描述這些資料，同時也能對我們輸入的數據做出預測。透過已知資料訓練模型，來對預測未知的資料進行預測，這正是機器學習的精神。這邊我們稱資料集裡面已知的資料為訓練資料(training data)，而沒看過的資料則為測試資料(testing data)。

依據手上的資料以及想要解決的問題，我們常將機器學習問題分成以下三類：
<ol>
 	<li>Classification 分類
當手上的資料跟以及要回答的答案是某個已知的類別，通常會再分為只有兩類問題的 binary classification 跟多纇別的 multi-class classification。</li>
 	<li>Regression 迴歸
當手上的資料跟以及要回答的答案是一個數值，這時就會是迴歸問題。例如:明天的氣溫、某間公司的股價等等。</li>
 	<li>Clustering 分群
如果資料沒有明確類別 (label)，依然可以照他們的特徵表現將行為相似的資料分成一類。
最常見的演算法是 K-means，首先要決定好要分的群數 k，演算法會隨機挑 k 個點作為資料群中心點，接著將所有資料點依照離各資料群中心的距離，歸類成距離中心最近的該群資料，再重新找出各資料群的中心點，如此便完成一輪，一直跑直到資料群收斂不再改變或是足夠多輪時便結束得到最後分群的結果。</li>
</ol>
<h2 id="azure-machine-learning-studio"><a href="#azure-machine-learning-studio" class="anchor hidden-xs" title="azure-machine-learning-studio"><span class="octicon octicon-link"></span></a>Azure Machine Learning Studio</h2>
這裡我們用 Azure Machine Learning Studio（以下簡稱 AML Studio) 作為機器學習範例的平台，為甚麼選擇它呢? 因為透過AML Studio 我們可以透過元件拖拉的方式快速處理資料、建立模型進而發布成應用，對於初次接觸機器學習或是程式設計的朋友相對容易入門，而對於有一定基礎的朋友也可以透過這樣的工具加速驗證想法，甚至可以更進階地加入 Python 或 R 腳本來更可製化自己的數據實驗。

同時可以在 <a href="https://gallery.cortanaintelligence.com/">Cortana Intelligence Gallery</a>載入官方的示範案例，或著將自己的發佈到分享實驗。

透過 AML Studio 的實驗流程大概如下：
<ol start="0">
 	<li>下載並檢查資料 Data Inspecting
我們從 Kaggle 官網下載 <a href="https://www.kaggle.com/c/titanic/data">Titanic Dataset</a> ，train.csv 裡面總共891筆乘客資料，包含以下欄位：</li>
</ol>
<table>
<thead>
<tr>
<th>欄位</th>
<th>性質</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>PassengerId</td>
<td>numeric
(not used as feature)</td>
<td>在資料集裡面我們給的編號</td>
</tr>
<tr>
<td>Survived</td>
<td>categorical label</td>
<td>乘客最後生還與否 (0=罹難； 1=生還)</td>
</tr>
<tr>
<td>Pclass</td>
<td>categorical feature</td>
<td>艙等 (1=頭等艙； 2=商務艙； 3=經濟艙)</td>
</tr>
<tr>
<td>Name</td>
<td>string</td>
<td>乘客稱謂及姓名</td>
</tr>
<tr>
<td>Sex</td>
<td>categorical feature</td>
<td>性別 (0：男性 / 1：女性)</td>
</tr>
<tr>
<td>Age</td>
<td>numer feature</td>
<td>年齡</td>
</tr>
<tr>
<td>SibSp</td>
<td>numeric feature</td>
<td>Sibling + Spouse，同行兄弟姊妹以及配偶的總數</td>
</tr>
<tr>
<td>Parch</td>
<td>numeric feature</td>
<td>Parent + Children，同行父母以及小孩的總數</td>
</tr>
<tr>
<td>Ticket</td>
<td>string
(not used as feature)</td>
<td>船票編號</td>
</tr>
<tr>
<td>Fare</td>
<td>numeric feature</td>
<td>總共支付的費用</td>
</tr>
<tr>
<td>Cabin</td>
<td>string
(not used as feature)</td>
<td>船艙座位</td>
</tr>
<tr>
<td>Embarked</td>
<td>categorical feature</td>
<td>上船地點 (C=Cherbourg; Q=Queenstown; S=Southampton)</td>
</tr>
</tbody>
</table>
<ol>
 	<li>資料預處理 Data preprocessing
若資料沒有做過適度的預處理直接丟下去訓練模型，除了資料格式的問題，也可能會數據缺失 (missing data) 或是雜訊 (noise)等等問題。我們發現這個資料集欄位中有不少缺失，過於嚴重的欄位包含 Cabin 及 Ticket 選擇直接拿掉不用。而像是 Name 較不具鑑別度的欄位我們也是直接拿掉。另外，Age 欄位有將近 1/4 的資料沒有資料，但是 Age 相對有重要性而也不可能拿掉那 1/4 的資料，因此在這邊我們把遺失的欄位補上平均的年齡作為訓練資料。
P.S. 一般而言姓名與生存機率並無太大相關，而且將姓名作為特徵一起訓練也非常容易造成過適 (overfitting)，例如決策樹中可能會出現名叫 Rose 的都會存活等等。值得注意的是直，Name 欄位包含特殊稱謂例如 Captain 船長等可能與存活機率有關的稱謂，在這邊就暫時不討論而把姓名欄位刪除。
<ul>
 	<li>作法
將下載來的 train.csv 檔上傳到 AML Studio dataset，開啟新的實驗 (experiment) 便可以直接拉進資料集。
透過"Select Columns in Dataset" 把 Cabin、Ticket、Name欄位拿掉。“Clean missing data” 把年齡遺失的欄位補上平均年齡，再透過"Edit metadata"元件，把Survived、Pclass、Sex、Embarked這些特整該為類別(categorical)欄位。以上步驟便完成了資料預處理，得到乾淨的資料集。
<img src="https://i.imgur.com/8yxEhXW.png" alt="" width="250" class="aligncenter" /></li>
</ul>
</li>
 	<li>模型建立 Model Training
在這個例子中我們要預測的是乘客最後的生還與否，屬於二元分類 (Binary Classification) 的問題，在 AML Studio 中共有10幾種模型提供直接使用，模型的選擇可以參考<a href="https://docs.microsoft.com/zh-tw/azure/machine-learning/machine-learning-algorithm-choice">這篇文章</a>，針對不同的特徵數量及屬性選擇適合的模型。這邊我們先使用 Two-Class Logistic Regressin 作為例子來訓練模型。
<ul>
 	<li>作法
這邊我們保留 80% 的資料作為訓練用，剩下 20% 保留作為測試模型表現用。因此拉進 “Split Data” 元件，將資料依比例分成兩類。
把 Initialize model 與 training data 連上Train model 元件，便可以開始訓練模型，訓練完的結果可以在 Train model 按右鍵視覺化出來，如下圖:
<img src="https://i.imgur.com/WKo1Oxc.png" alt="" width="400" class="aligncenter" /></li>
</ul>
</li>
 	<li>模型表現評估 Model Evaluation
透過 Evaluation Model 我們可以拉近 Score Model 的結果視覺化呈現，或是拉進並同時拉進至多兩個 Score Model 的結果進行比較，點進 Score Model 可以看到多了兩個 label 及 label probablity。以分類問題為例，Evalation Model 幫助我們直接得到 Accuracy、Precsion、Recall 甚至 f1 score 等等資訊，同時可以畫出混淆矩陣 (Confusion Matrix)，二元分類的 ROC 曲線等等。
<ul>
 	<li>作法
在 “Evaluated Model” 右鍵選擇 “visualize” 視覺化模型的表現，如下圖包含 ROC 曲線、Accuracy、Precision、Recall、F1 score 等等數值。
<img src="https://i.imgur.com/wLMrskW.png" alt="" class="aligncenter" /></li>
</ul>
</li>
 	<li>發佈應用 Deploy to web service
比較過不同模型的表現後，就可以選擇表現較好的模型發布成應用，AML Studio 可以將模型發布成 web service 讓自己的 app 可以透過 HTTP Request 的方式將資料上傳，得到回傳預測的結果。
<ul>
 	<li>作法
當我們選擇好最終要使用的模型，選擇以後點選 “Set Up Web Service”，這時候會把 data preprocessing 相關元件變成 transformation、把 train model 相關元件變成 trained model，畫面中會出現 “Web service input” 及 “Web service output”。
<img src="https://i.imgur.com/jr5bGhl.png" alt="" class="aligncenter" /></li>
</ul>
重新 Run 一次點選 “Deploy to web service” 便會跳到 Web Service 的頁面。我們可以透過 Request/Response一次處理一筆資料或是透過 Batch Execution 配合 Azure Storage 上傳大量資料批次處理。網頁上可以看到透過C#、python、R 等語言將資料整理成 json 格式透過 HTTP request 取得模型預測的結果。</li>
</ol>
透過以上這些步驟，我們便做完了一個完整的機器學習。從資料的預處理、模型訓練、評估模型表現到最後發佈成應用。同時也可以把自己的實驗發佈在 <a href="https://gallery.cortanaintelligence.com/">Cortana Intelligence Gallery</a> 與其他人分享。
<h2 id="qampa-補充"><a href="#qampa-補充" class="anchor hidden-xs" title="qampa-補充"><span class="octicon octicon-link"></span></a>Q&amp;A 補充</h2>
整理一下當天的問題，問題大致分成以下兩類：一是機器學習理論問題，這部分建議看<a href="https://www.csie.ntu.edu.tw/~htlin/course/mlfound16fall/">軒田老師的機器學習課程</a>；二是 Azure Machine Learning Studio 相關，在以下回答：
<ol>
 	<li>資料集裡面 Age 這個欄位有1/4左右的 missing data ，直接填入年齡的平均值是好做法嗎?不管填入中位數、平均值或 PPCA (probabilistic PCA) 都只能說這是委曲求全的作法，Titanic 這個資料集有趣但並不完整有過多的 missing data，針對年齡這樣的生物特徵我們也不容易從其他特徵推論得知，但我們又不想把欄位整個刪除的情況下，只能藉由這樣的方法減少 missing data 造成的影響。
若為類別資料，我們可以將。類似的問題像是我們把 Cabin 座艙欄位拿掉究竟正不正確?鐵達尼號因為撞擊的位置，在右舷獲救的人數比在左舷獲救的多，所以全知的我們當然知道 Cabin 應該與生存率有關係等結論。但當資料筆數過少，很容易造成過適的問題，因此在這邊我們選擇把它拿掉，</li>
 	<li>如果想要自己寫 model 或是改 model 的 cost function 該如何在 AML Studio 裡面做到?
AML Studio 裡面可以插入元件撰寫自己的 python 或 R的腳本，但而若要自訂 cost function 則沒辦法拿 AML Studio 現有的 model 來使用。</li>
 	<li>所以 Titanic Dataset 到底是二元分類問題還是迴歸問題?
看怎麼定義，如果今天問題是生存與否，那是二元分類問題；如果今天問題是存活的機率，那便是迴歸問題而答案正是我們算出來的 label probability。但剛好在二元分類問題中，我們可以依照 label probability 把0.5以上回答 yes，反之0.5以下回答 no。</li>
</ol>
<h2 id="last-but-not-least"><a href="#last-but-not-least" class="anchor hidden-xs" title="last-but-not-least"><span class="octicon octicon-link"></span></a>Last but not least</h2>
上一次走進博雅202應該是大二的通識課，這次一走進202發現整個大爆滿不少人坐到地上，台下除了正在準備期中考周的台大學生，也有不少外校及業界人士，真的很開心大家晚上的時間一起來討論交流，也希望之後有機會能繼續和大家分享。

最後非常感謝熱血的 Pecu 學姊、很罩的同事 Jade 一起推動 CS+X 這麼棒的社群，也謝謝社團非常有熱誠有理想的幹部們付出的努力，希望這個社團能夠一直持續下去。
<h2 id="reference"><a href="#reference" class="anchor hidden-xs" title="reference"><span class="octicon octicon-link"></span></a>Reference</h2>
<a href="https://studio.azureml.net/">Azure Machine Learning Studio</a>

<a href="https://mva.microsoft.com/ebooks#9780735698178">Azure Machine Learning 免費電子書</a>

<a href="https://docs.google.com/presentation/d/1dleyq2JIXxZe_arbKFcOEqJY-B-va3IBBjc5FFAa7AA/edit?usp=sharing">CS+X 講座投影片</a>

<a href="https://www.facebook.com/ntu.csx/?fref=ts">CS+X Facebook Fan Page</a>

</div>]]></content:encoded>
    </item>
    <item>
      <title>初探Bash on Ubuntu on Windows及Linux子系統(WSL)介紹</title>
      <link>https://docs.microsoft.com/archive/blogs/jameswang/wsl_intro</link>
      <pubDate>Thu, 04 Aug 2016 10:14:43 GMT</pubDate>
      <dc:creator><![CDATA[James(Fan) Wang]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jameswang/?p=25</guid>
      <description><![CDATA[今年三月底在舊金山的 //Build 開發者大會展示了 Bash on Ubuntu on Windows，透過與 Canonical 合作開發的Windows Subsystem for...]]></description>
      <content:encoded><![CDATA[<p style="padding-left: 30px"><img width="400" height="392" class="wp-image-35 aligncenter" alt="Windows Subsystem for Linux" src="https://msdnshared.blob.core.windows.net/media/2016/08/Untitled-picture.png" /></p>
今年三月底在舊金山的 //Build 開發者大會展示了 Bash on Ubuntu on Windows，透過與 Canonical 合作開發的Windows Subsystem for Linux (WSL) 讓原生的 bash 及眾多 Linux 程式可以直接執行在 Windows 10 上，雖然目前還是beta 版但藉由廣大使用者測試以及意見回饋，相信這項功能可以變得更佳穩定且完整。在 Windows 10周年(Redstone) 更新之際，想藉由這篇文章和大家介紹 Bash on Ubuntu on Windows 同時分享使用上的一些心得。
<h4>Bash on Ubuntu on Windows是什麼?</h4>
Bash 是大部分 Linux distro 預設的 shell，也是一般 Unix/Linux 使用者所熟悉的介面，透過 bash 可以方便使用shell script 及 GNU tools。雖然 Windows 上有 Powershell 等強大 shell 環境，但如果開發遇到上需要用到 Linux 環境或工具的時候，只能開 Linux VM、連線遠端主機，或是打開 Cygwin terminal。而現在 Bash on Ubuntu on Windows 的出現，讓開發者可以在 Windows 環境下執行原生的 bash，在 Windows 10上開發時既可以使用 Ｗindows 的工具，也可以使用 Linux 生態系的各種工具，減少開發時在不同工具不同平台間切換造成額外的負擔("Remove a bit of friction from developers' dialy workflow" by Pete Brown)。
不同於透過 VM 把程式跑在 Linux系統上，以及Cygwin把基本的 Unix 指令包在 cygwin1.dll 內跑在 Windows 系統上，Bash on Ubuntu on Windows 則是在 Windwos NT kernels 加入 Ｗindows Subsystem for Linux(WSL)實作 linux system calls，所以不必透過虛擬機(VM)或是透過 Linux kernel 的重新包裝，user mode 的程式透過 WSL 可以如同跑在 Linux 上直接執行原生 ELF64 執行檔，比起 VM 相對輕量快速而且更方便共用檔案目錄，比起Cygwin則擁有更完整的套件管理，可以透過 apt/apt-get 管理套件及或是執行原有 Linux 套件。
若為初次安裝時在"執行(Run)"輸入"optionalfeatures"，開啟"Turn Windows Features On or Off"視窗，勾選"Windows Subsytem for Linux(beta)"便可透過命令列執行bash.exe及lxrun.exe來設定及使用WSL。lxrun.exe用來設定Ubuntu環境，指令如下：
<p style="text-align: left;padding-left: 60px">lxrun /install
lxrun /uninstall
lxrun /uninstall /full</p>
<p style="text-align: left;padding-left: 90px">完整移除 WSL (包含 /root 及 /home)</p>
<p style="text-align: left;padding-left: 60px">lxrun /setdefaultuser (username)</p>
<p style="text-align: left;padding-left: 90px">設定開啟 Bash 預設登入使用者(若使用者不存在，則創建新使用者及其家目錄)</p>
<p style="text-align: left;padding-left: 60px">lxrun /udate</p>
<p style="text-align: left;padding-left: 90px">更新 WSL 套件</p>
bash.exe 本身是隻 win32 程式用來作為 Bash on Ubuntu on Windows 的入口，接著啟動 lxss manager service 來和 Kernel mode 的 lxss, lxcore 溝通，lxss 的主要作為 user mode linux 程式及 kernel mode NT kernel 溝通的橋樑，接著再啟動 init 及 /bin/bash 等等 Linux instance，便進入到熟悉的原生 Bash shell。

<img width="434" height="200" class="alignleft wp-image-65" alt="LXSS-diagram-1024x472" src="https://msdnshared.blob.core.windows.net/media/2016/08/LXSS-diagram-1024x472-1024x472.jpg" />

<img width="291" height="200" class="alignnone wp-image-85" alt="syscalls" src="https://msdnshared.blob.core.windows.net/media/2016/08/syscalls-300x206.png" />
<h4>WSL System call(系統呼叫)</h4>
User mode的程式若要和系統核心(kernel)溝通必須透過系統呼叫(syscalls)。Linux/WindowsNT 兩種系統在 user mode與kernel mode 之間介面 (Application Binary Interface, ABI) 的差異則是由 lxss.sys(Pico drivers)來解決，lxss.sys 本身本身不包含 Linux kernel code 而僅僅作為ABI的轉換介面，收到來自NT kernel請求時以及暫存器的狀態lxss.sys會處理完相對應的linux syscall會跳回NT kernel把回傳值放到正確的暫存器再跳回user mode。例如上圖在bash中ls會調用getdents來取的檔案目錄資訊，而 NT kernel 則有對應的 NtQueryDirectoryFile，因次lxss.sys 處理完暫存器位置後可以直接調用。我們可以把 Linux syscalls，依照與 NT syscall 的對應關係分為以下三大類﹔
<ul>
 	<li value="1">有 NT syscalls 可以直接對應，只需依照 ABI 做對應處理後直接調用。例如：getdents/NtQueryDirectoryFile，sched_yield / ZwYieldExecution。</li>
 	<li value="&quot;2">有功能類似的 NT syscalls，但因為性質差異太大而沒辦法直接做對應，WSL 仍需要自己實作 syscalls。例如：pipe。</li>
 	<li value="&quot;3">沒有直接對應的NT syscalls，WSL 自己實作 syscalls。例如：fork，Windows 沒有與 fork 對應的功能。這時WSL 需要透過 NT 內部 API 創建一個擁有相同暫存器內容的新的執行緒來來完成 fork syscalls。</li>
</ul>
Linux kernel 共有約300個 syscalls，而目前 WSL 約完成235個 linux syscalls，陸續的更新可以參考 <a href="https://msdn.microsoft.com/en-us/commandline/wsl/release_notes">WSL Release Notes</a>。
<h4>WSL File System(檔案系統)</h4>
<img width="500" height="267" class="aligncenter wp-image-55" alt="fs" src="https://msdnshared.blob.core.windows.net/media/2016/08/fs-1024x547.png" />

WSL 透過虛擬檔案系統(Virtual File System, VFS)整合NTFS以及其他linux使用的檔案系統，同時提供Linux檔案系統權限等功能支持。
VolFs
<p style="padding-left: 30px">VolFs 主要使用在Linux系統檔案以及家目錄，並支援權限/symbolic link/FIFO等操作，Linux檔案系統會掛載在%LocalAppData%\lxss\rootfs之下(%LocalAppData%是隱藏資料夾，預設路徑在C:\Users\%UserName%\Appdata\Local)，因為是在各自Windows使用資料夾之下，所以安裝套件等環境設定也不會影響到其他使用者。值得注意的是\root以及\home 則是分別另外掛載在%LocalAppData%\lxss\root及%LocalAppData%\lxss\home之下，這樣設計目的在於解除安裝WSL時，可以選擇保留root資料夾以及home資料夾(lxrun /uninstall，若要全部移除則執行lxrun /uninstall /full)。
目前還不完全支援Windows程式對VolFs的檔案存取修改，例如用檔案總管在%LocalAppData%\lxss\home\user下建立新資料夾，bash中ls會無法看到創建的資料夾；或是在沒有開啟bash的情況下用Windows程式編輯檔案，重新啟動時那個檔案會從會從VolFs消失等等。總之，VolFs是用於Linux系統檔案盡量不要從Window程式進去更改。</p>
DriveFs(DrvFs)
<p>另外要注意的是在 WSL 中的 root 權限，root 權限只會影響linux檔案系統下的權限，對於 Windows檔 案操作是受限於 bash.exe 的權限的，假設想改某些其他 Windows 使用者資料夾檔案或是 Windows系統檔案只有 root 權限是無法的，要透過 administrator 權限打開 bash.exe 才能做到。舉例來說，使用管理員權限權限開啟bash.exe 可以透過 ls /mnt/c/Users/Administrator 檢視 admin 資料夾，但一般權限開啟的 bash 即便透過sudo ls /mnt/c/Users/Administrator 也檢視權限，因此在管理員權限開啟 bash 操作 Ｗindows 檔案系統時要特別注意(例如在rm -rf之前千萬要三思)。</p>
<img width="354" height="180" class="alignnone wp-image-75" alt="sudo" src="https://msdnshared.blob.core.windows.net/media/2016/08/sudo-300x153.png" /><img width="374" height="180" class="alignnone wp-image-46" alt="admin" src="https://msdnshared.blob.core.windows.net/media/2016/08/admin-300x144.png" />
<h4>動手玩 Bash</h4>
<ul>
<ul>
<ul>
 	<li value="1">使用 Zsh 或是其他 shell
如果還是習慣用 zsh 或是其他 shell，可以透過 .bash.rc的設定讓 Bash on Ubuntu onWindow 開啟 bash.exe 時直接開啟進入的shell，以zsh為例﹔
<code>
sudo apt-get install zsh
Vim ~/.bashrc
輸入
# Launch Zsh
if [ -t 1 ]; then
exec zsh
fi
</code></li>
 	<li value="2">X11-apps
雖然 WSL 最初目的在減少在工具間切換方便開發，並非為圖形化桌面(Gnome,KDE 等等)而設計，但我們還是可過 X11-Forwding 在 Linux 子系統執行圖形化程式。這邊我們安裝Xming作為Windows上的X server，在 bash 中 export DISPLAY=:0 重新導向後，便可以開啟 x11-apps 或是其他圖形化程式。</li>
</ul>
</ul>
</ul>
<img width="1024" height="652" class="aligncenter size-large wp-image-95" alt="x11_apps" src="https://msdnshared.blob.core.windows.net/media/2016/08/x11_apps-1024x652.png" />

更多WSL的資訊請參考<a href="https://msdn.microsoft.com/commandline/wsl/about">WSL MSDN Blog</a>，使用遇到的問題可以在<a href="https://github.com/Microsoft/BashOnWindows">Github頁面</a>回報，或是在<a href="https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/category/161892-bash">Windows developer feedback </a>發表回饋與建議讓WSL可以帶來更好的使用與開發體驗。]]></content:encoded>
    </item>
  </channel>
</rss>