跳至主要内容

5 篇文章 含有標籤「software engineering」

檢視所有標籤

如何在 Windows 打造 Python Web 開發環境入門教學 Part2

· 閱讀時間約 1 分鐘

如何在 Windows 打造 Python Web 開發環境

所謂工欲善其事,必先利其器。我們開發程式之前我們最重要的就是要設定好開發環境,接下來我們將帶領讀者體驗如何在 Windows 打造 Python Web 開發環境。

撰寫第一個 Python Django 程式

  1. 創建虛擬開發環境:conda create -n <自定義虛擬環境名稱> python=3.5
  2. 觀看已建立的虛擬環境:conda info -e
  3. 進入虛擬環境:activate <自定義虛擬環境名稱>
  4. 安裝套件:pip install django
  5. 觀看已安裝套件:pip list
  6. 建立第一個 django 專案:django-admin startproject my_first_app
  7. 啟動伺服器:python manage.py runserver
  8. 到瀏覽器觀看成果!http://localhost:8000http://127.0.0.1:8000

其他常用指令

  1. 離開虛擬環境:deactivate
  2. 移除虛擬環境:conda remove <自定義虛擬環境名稱> -n --all
  3. pip uninstall 套件名稱

影片教學

如何在 Windows 打造 Python Web 開發環境入門教學 Part1

· 閱讀時間約 2 分鐘

如何在 Windows 打造 Python Web 開發環境

所謂工欲善其事,必先利其器。我們開發程式之前我們最重要的就是要設定好開發環境,接下來我們將帶領讀者體驗如何在 Windows 打造 Python Web 開發環境。

安裝軟體步驟

  1. 下載安裝 google chrome 瀏覽器
  2. 下載安裝 Visual Studio CodeSublime text 文字編輯器
  3. 下載安裝 cmder terminal 終端機程式 (請下載含 git 的 full 完整版本)
  4. 下載安裝 anaconda for windows (請依你的作業系統位元 32/64 下載對應程式,記得安裝時要勾選加入環境變數)
  5. 在終端機輸入 (若正確顯示版本即為安裝成功):python -V
  6. 輸入 python 可進入互動式對話環境,可以執行 python 程式

撰寫第一個 Python 程式

  1. 打開 Visual Studio Code 或 Sublime text 並建立一個 hello.py 檔案:
print('hello python')
  1. 到 cmder 終端機移動到 hello.py 資料夾下輸入 python hello.py

就可以看到你撰寫的第一個 Python 程式 hello python 啦!

影片教學

如何在 Windows 打造 JavaScript Web 開發環境入門教學

· 閱讀時間約 2 分鐘

如何在 Windows 打造 JavaScript Web 開發環境

所謂工欲善其事,必先利其器。我們開發程式之前我們最重要的就是要設定好開發環境,接下來我們將帶領讀者體驗如何在 Windows 打造 JavaScript Web 開發環境。

安裝軟體步驟

  1. 下載安裝 google chrome 瀏覽器
  2. 下載安裝 Visual Studio CodeSublime text 文字編輯器
  3. 下載安裝 cmder terminal 終端機程式 (請下載含 git 的 full 完整版本)
  4. 下載安裝 Node.JS 選擇左邊穩定版本,按照指令安裝完成
  5. 在終端機輸入 node -v 若成功顯示版本,代表安裝完成
  6. 安裝 http-server 套件:npm install http-server -g

撰寫第一個 JavaScript 程式

  1. 打開 Visual Studio Code 或 Sublime text 並建立一個 index.html 檔案:

  2. index.html 輸入:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Test</title>
    <script>
    console.log(‘hello JS!);
    </script>
    </head>
    <body>
    </body>
    </html>
  3. 儲存後在終端機移動到該檔案資料夾下,輸入 http-server -p 7777 啟動伺服器

  4. 打開瀏覽器輸入網址:http://127.0.0.1:7777http://localhost:7777

  5. 開發者工具,可以在 console 中看到 hello JS!

  6. 恭喜讀者完成第一個 JavaScript 應用程式啦!

影片教學

自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

· 閱讀時間約 17 分鐘

自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

要成為一個真正的軟體工程師(Software Engineer)除了掌握基礎開發能力外,更重要的是和其他工程師和開發者團隊合作和溝通的能力,所以若你能培養出掌握 Git 等版本控制操作和 Git server 架設的能力,你會更容易參與開放原始碼(open source)的社群和提昇自己在職場上的價值。關於相關環境工具若你還沒準備好,可以參考 如何在 Windows 打造 Python 開發環境設定基礎入門教學 這篇教學文章。好,那我們就準備開始吧!

什麼是版本控制系統(Version Control System)?

自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

版本控制系統是一種軟體工程的開發技巧,可以透過這個系統讓每位成員的軟體版本可以方便同步和維護管理(不然要用 email 或是其他工具傳送和管理十分麻煩,尤其程式又常常會有不同版本修改的問題!)。在沒有版本控制系統時,我們常會在編輯檔案前複製一個備份,或是在更新檔案後產生許多重複檔案,非常不便且難以維護。因此,使用版本控制系統的需求就應運而生啦!

自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

一般在軟體開發中又分為中央式系統(例如:SubversionCVS 等)與分散式系統(例如:GitBitKeepermercurial 等),中央式版本控制系統的工作主要在一個伺服器進行,由中央管理存取權限「鎖上」檔案庫中的檔案,一次只能讓一個開發者進行工作。而分散式系統讓不同開發者直接在各自的本地檔案庫工作,並容許多個開發者同時更動同一個檔案,而每個檔案庫有另外一個合併各個改變的功能。分散式系統讓開發者能在沒有網路的情況下也能繼續工作,也讓開發者有充分的版本控制能力,而不需經中央管理者的許可,但分散式系統仍然可以有檔案上鎖功能。

自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

什麼是 Git?什麼是 Github?

Git 是一個分散式版本控制軟體,最初由 Linus Torvalds 創作(也是作業系統 Linux 系統的開發者),其最初目的是為更好地管理 Linux kernel 開發而設計,其具備優秀的 merge tracing 合併程式碼的能力(使用程式碼 snapshot 來比較歷史版本差異)。

Github 則是一個支援 git 程式碼存取和遠端托管的平台服務,有許多的開放原始碼的專案都是使用 Github 進行程式碼的管理。若是讀者未來有志於從事程式設計相關工作的話,建議可以熟悉掌握 Git 和 Github 的使用,並建立自己的 Github profile 作品集。

Git 基本觀念

自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

Git 可以分為 Local(本地)和 Remote(遠端)兩個環境,由於 Git 屬於分散式的版本控制系統,所以開發者可以在離線 local 環境下開發,等到有網路時再將自己的程式推到 Remote 環境或 pull 下其他開發者程式碼進行整合。在 Local 中我們又分為 working directory(工作資料夾)、staging area(暫存區)和 repositories(檔案庫)。

當自己開發時會在工作資料夾工作,當要進入檔案庫之前會先將檔案加入暫存區,確認沒問題則 commit 到檔案庫中,最後 push 上去 remote 環境。在 Git 中若是有和其他開發者一起合作,則會需要處理不同 branch 之間 conflict 和 merge 的問題。

自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

Git 與 Github 實戰操作入門教學

接下來我們用一個實際的實戰範例讓讀者可以快速的掌握那些基礎必知必會的 Git/Github 操作技能:

  1. 安裝並且設定 Git

    任務 1:安裝 Git 到你的電腦上,並且設定好 Git 內部的使用者名稱和電子信箱

    Linux 若是使用 Debian 基礎的作業系統可以在終端機輸入以下指令安裝 git:

    $ apt-get install git

    若是 Fedora 系列可以輸入:

    $ yum install git-core

    若是 windows 可以下載安裝 cmder 這個模擬 Linux terminal 終端機時選擇完整版本就會順便安裝或是到 Git 官網安裝。當然在市面上有許多免費 GUI 圖形化的 Git 操作軟體,若是初學者則建議先熟悉整個 git 工作模式和指令,再去使用圖形化工具會比較好,這樣你才比較知道圖形化程式背後做了什麼事情。Mac 則是可以到 Git 官方網站 選擇對應作業系統,按照步驟完整下載安裝。另外也可以參考中文安裝教學

    由於我們會選擇 Github 當作遠端托管程式的環境,所以我們也可以根據作業系統安裝 Github 桌面版當作操作工具(內建安裝 Git)。

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    若是安裝完成,打開終端機(terminal)或 cmder 輸入以下指令,若成功顯示版本(建議 Git 版本在 2 以上),代表安裝成功囉!terminal(終端機)是一個可以下指令讓電腦做事情的互動介面(例如:新增檔案、移動到資料夾等)

    // 其中 $ 為提示字元,在輸入指令時不用輸入該符號,否則會錯誤,若是使用 windows cmder 預設是 λ
    $ git --version

    接下來設定你的帳戶,讓 Git 知道這台電腦做的修改要連結到哪一個使用者(待會我們要在 Github 上註冊帳號,建議使用一致的帳號和電子信箱):

    $ git config --global user.name "<Your Name>"

    設定電子郵件:

    $ git config --global user.email "<your@gmail.com>"
  2. 建立一個本機的 repository

    任務二:在自己的電腦上建立一個新的 local repositories(本地檔案庫)

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    repository(檔案庫)是一個什麼樣的概念呢?事實上 repository 就是一個專案,又簡稱 repo。以電腦的檔案資料管理來看,我們通常會把同一個專案的資料放到同一個資料夾下,所以我們也可以把 repository 看成一個資料夾。

    // 建立一個 hello-git 資料夾
    $ mkdir hello-git
    // 移動到 hello-git 資料夾
    $ cd hello-git
    // 將專案資料夾建立成 git repository
    $ git init
    // 列出專案資料夾下的檔案和資料夾(-l 參數為列出詳細資料,-a 為列出隱藏資料夾)
    $ ls -la

    當你執行 git init 後,你可以發現多出了 .git 這個隱藏資料夾,可以看到裡面檔案和資料夾如下:

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    到這邊恭喜讀者,完成你第一個 git 專案資料夾改造計畫!

  3. 檢視狀態、新增或修改 commits

    任務三:在你的 repository 檔案庫中建立一個新檔案,新增一些內容到該檔案並且將那些檔案修改提交 commit 到 Git 中

    接著我們使用文字編輯器,新增一個 hello.py 的檔案(裡面是一個會印出 hello python & git 字串的 python 程式):

    print('hello python & git')

    然後在終端機的專案資料夾下輸入 git status 顯示目前工作環境狀態:

    $ git status
    On branch master

    Initial commit

    Untracked files:
    (use "git add <file>..." to include in what will be committed)

    hello.py

    nothing added to commit but untracked files present (use "git add" to track)

    我們會發現因為我們有新增新的檔案,但是還沒進到 git 追蹤範圍中/暫存區,所以我們要使用 git add hello.py 加入追蹤,這樣之後檔案有修改就可以追蹤到。

    $ git add hello.py
    $ git status
    On branch master

    Initial commit

    Changes to be committed:
    (use "git rm --cached <file>..." to unstage)

    new file: hello.py

    若是確認沒問題我們就準備 commit 進去 repository 囉!

    // 比較現在檔案和上次 commit 之間的差異,也就是說你做了哪些修改
    $ git diff
    // -m 為輸入 commit message,也就是說這個 commit 內做了哪些事情
    $ git commit -m "Init hello.py"
    [master (root-commit) ad6d328] Init hello.py
    1 file changed, 1 insertion(+)
    create mode 100644 hello.py

    // commmit 完成
    $ git status
    On branch master
    nothing to commit, working tree clean

    若是想反悔不想把檔案加入追蹤呢?

    // 檔案尚未加入過追蹤時使用,即可恢復到檔案尚未加入暫存區
    $ git rm --cached hello.py

    // 若檔案已經在 repository 內,則使用以下指令
    // repository 與 stage 的檔案都會被還原到 HEAD,但 working directory 內的檔案不變
    $ git reset HARD

    當你追蹤後修改了檔案,例如把 hello.py 的內容改成:

    print('hello python & git rock')

    若有檔案修改,記得要再 add 修改的檔案(這是新手比較容易忘記的部分),若是要放棄修改可以使用 git checkout -- 檔案名稱

    // 比較現在檔案和上次 commit 之間的差異,也就是說你做了哪些修改
    $ git diff
    // 查看目前工作狀態
    $ git status
    Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)

    modified: hello.py

    commit 這個修改時簡寫會寫成這樣(-a 是 add,-m 為 message 簡寫,後面接訊息資訊):

    $ git commit -a -m "修改了 hello.py"
  4. 註冊 GitHub 帳號

    任務四:建立一個 GitHub 帳號,並在 Git 設定中加入使用者帳號

    到目前為主我們程式主要是在我們 local 工作環境中操作,但還記得我們在 Git 基本觀念中有提到,git 分為 local 和 remote,若是我們想要和全世界其他開發者合作或是貢獻開放原始碼的話,我們可以透過 github 來當作我們 remote 工作環境,去管理我們程式碼,同樣的也可以透過 github 平台和其他開發者一起合作,參與開放原始碼的開發。github 若是公開的 repo 是無限制數量免費的,但是若是想使用 private repo 可以參考付費方案

    // 注意大小寫要一致
    $ git config --global user.username <你的 github 使用者名稱>

    先到 github.com 註冊帳號:

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    註冊成功後登入,可以點選右上顯圖下拉式選單進到個人頁面(profile),觀看個人頁面:

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    點選右上角 + 來新增 new repository(檔案庫):

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    輸入 repository name(你要取的專案名稱),最好跟電腦 local 專案一致,我們這邊輸入 git-example。然後輸入簡短專案描述並先不勾選初始化 README 和,也先不要選擇 .gitignore 和 License 授權(不然會造成本地端和遠端不一致會需要額外一些處理):

    .gitignore:要忽略的檔案清單,這是用來告訴 Git,當在做版本控制記錄的時候,忽略這些檔案。通常一些機密資料,如資料庫帳號密碼或是 server IP 位置等,記得要加入。也可以參考 github 上面的一些範本 在新增 repository 時選取對應的程式語言

    README.md:repository 介紹和使用方式說明(例如:使用方法、參與專案方式等),使用 markdown 語法撰寫。另外通常有 CONTRIBUTING.md 額外說明如何參與貢獻。

    LICENSE:專案使用何種授權方式,例如:MIT、BSD 等

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    接著按 create 按鈕!恭喜你新增成功,創建了自己第一個 github repository(遠端檔案庫)!

  5. 將 repository 做本機和遠端的連結

    任務五:把電腦裡 Local(本地端)的 repository(檔案庫)和 remote(遠端)的 repository(檔案庫)連結起來,並 push 電腦上的修改

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    因我們已經在專案有把 hello.py 修改加入追蹤並 commit 到 local 檔案庫,所以我們可以參考下方的指令說明把 remote 網址加入:

    // 本地端專案知道 origin 對應到遠端網址
    $ git remote add origin <remote 網址>

    接者準備將本地端程式 push 到遠端檔案庫:

    // 觀看情況
    $ git status
    // 將本地端程式 push 到遠端檔案庫
    $ git push -u origin master
    Counting objects: 3, done.
    Writing objects: 100% (3/3), 239 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To https://github.com/happycodergit/git-example.git
    * [new branch] master -> master
    Branch master set up to track remote branch master from origin.

    參數 -u 等同於 --set-upstream,設定 upstream 可以使分支開始追蹤指定的遠端分支。事實上,只要做過一次 $ git push -u <remote name> <branch name>,並且成功 push 出去;本機端的 master 就會被設定去追蹤遠端的 <remote name>/<branch name> 分支。只要成功設定好 upstream 後,第二次以後要上傳分支時,就只需要透過 git push 就可以了,不必再帶 <remote name><branch name> 等參數。例如:$ git push

    事實上,$ git push -u origin master 可以拆解成:

    $ git push origin master
    $ git checkout master
    $ git branch -u origin/master

    恭喜你成功把你的專案推送上去 github 啦!

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

  6. Fork 和 clone 一個 open source(開源)的計畫

    任務六:從 GitHub.com 建立專案,複本 fork,並下載 clone 到電腦上

    點選左上角 github icon 回到首頁,我們從上面搜尋欄搜尋 react:

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    點選右上角 fork 按鈕,複製一份專案到我們這:

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    等待 fork 中:

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    點選右邊綠色按鈕 clone download 複製 HTTP 網址:

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    // 複製到本地端
    $ git clone https://github.com/happycodergit/react.git
    // 移動到 react 資料夾
    $ cd react
    // 切出自己的新分支(使用 -b)
    $ git checkout -b happycoder@feature_branch
    // 做一些 README.md 檔案修改,然後 commit 到自己 fork 過來的專案
    $ git commit -a -m "Update README"
    $ git push origin happycoder@feature_branch

    事實上,每個開放原始碼都有他自己貢獻的方式,記得要先了解。例如可以參考 react 貢獻說明

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

    你可以透過將自己的修改 commit 到自己 fork 過來的專案,然後到原始專案頁面點選 new pull request 按鈕發 pull request(會比對程式碼的差異)。若對方 review 完後接受就可以將自己的程式碼合併到原始專案中,為開放原始碼做出第一步貢獻!

    // 若完成 pull request 記得讓 master(或是合併進去的 branch)保持同步
    $ git pull upstream master
  7. 練習建立一個 feature branch

    任務七:回來原來的 git-example 專案新增 feature branch(分支)

    // 建立一個名為 dev 的 branch
    $ git checkout -b dev

    hello.py 最上面多加一行 # hi, this is comment 註解後存檔

    // commit 到本地端更新
    $ git commit -a -m "Init dev branch"
    $ gut push origin dev
  8. 邀請別人和你合作

    任務八:在專案新增夥伴 collaborator

    在右上角進入 setting 可以選擇到 collaborator 新增合作者:

    自學程式設計與電腦科學入門實戰:Git 與 Github 版本控制基本指令與操作入門教學

  9. 利用 push 和 pull 來和 GitHub.com 同步

    任務九:用 pull 來和其他 collaborators(合作者)同步更新,確保程式是最新的版本

    請其他開發者 git colone 下來你的 git-example 專案並 checkout 到 dev branch,並完成新增一個 README.md 檔案後發 pull request 過來,若沒問題就按同意並合併。我們則透過 git pull 來保持本地端和遠端程式碼同步:

    $ git pull origin dev
  10. Merge(合併)和刪除 branches

    任務十:在本機上 merge 合併你的 branch(分支),刪除舊的 branch(分支)

    // 移動到 master branch
    $ git checout master
    // 合併 dev 到 master
    $ git merge dev
    // 刪除 dev branch
    $ git branch -d dev
    // 將合併後的 master 推送到遠端
    $ git push origin master

總結

以上就是 Git 與 Github 版本控制基本指令與操作入門教學!希望讀者可以動手一起操作,漸漸就能感受到 git 的威力和好處,同時也有能力參與開放原始碼(open source)的社群和提昇自己在職場上的價值,朝成為一個真正的軟體工程師(Software Engineer)邁進!

參考文件

  1. 30 天精通 Git 版本控管
  2. Git 官方網站
  3. Try Git
  4. Git-it
  5. GitHub Guides
  6. 如何將檔案從 stage 移除?
  7. Git 教學

(image via git-scmqboxquoracdnytimglinuximgurmartinfitzpatrick

自學程式設計與電腦科學入門實戰:Linux Command 命令列指令與基本操作入門教學

· 閱讀時間約 11 分鐘

自學程式設計與電腦科學入門實戰:Linux Command 命令列指令與基本操作入門教學

要成為一個真正的軟體工程師(Software Engineer)不一定一定要使用 vim 之類的編輯器進行開發,但熟悉使用終端機(terminal)操作和常用的 Linux 命令列指令碼操作則是必須的。因此接著我們將介紹軟體工程師在開發上常用的 Linux 命令列指令碼給讀者參考。若讀者使用的是 Windows 建議安裝 VirtualBox 並在上面跑 Linux/Ubuntu 來進行指令碼操作,或是使用像是 Cmder 的工具來進行操作。關於相關工具安裝可以參考 如何在 Windows 打造 Python 開發環境設定基礎入門教學 這篇教學文章。好,那我們就準備開始吧!

自學程式設計與電腦科學入門實戰:Linux Command 命令列指令與基本操作入門教學

什麼是 Linux?

Linux 是一種自由開放原始碼的類 Unix 的作業系統,其廣泛運用於伺服器和嵌入式系統中。目前主流的 Linux 發佈版本(Linux distributions,係指可完整安裝使用的套件版本)包括:Debian、Fedora、CentOS、Ubuntu 等。以下我們主要將會聚焦在 Linux/Ubuntu 常用指令和基礎操作的入門教學介紹上(每個指令前使用 $ 當作提示字元,不用輸入)。

自學程式設計與電腦科學入門實戰:Linux Command 命令列指令與基本操作入門教學

Linux 檔案系統架構

理論上所有的 Linux 發佈版本應該都要遵守檔案系統的標準(Filesystem Hierarchy Standard, FHS),但根據發佈版本不同或有差異,不過大致上檔案系統架構如下:

  1. /bin, /sbin
    /bin 主要放置一般使用者可以操作的指令,/sbin 放置系統管理員可以操作的指令。連結到 /usr/bin/usr/sbin

  2. /boot
    主要放置開機相關檔案

  3. /dev
    放置 device 裝置檔案,包話滑鼠鍵盤等

  4. /etc
    主要放置系統檔案

  5. /home, /root /home 主要是一般帳戶的家目錄,/root 為系統管理者的家目錄

  6. /lib, /lib64 主要為系統函式庫和核心函式庫,若是 64 位元則放在 /lib64。連結到 /usr/lib, /usr/lib64

  7. /proc 將記憶體內的資料做成檔案類型

  8. /sys 與 /proc 類似,但主要針對硬體相關參數

  9. /usr /usr 全名為 unix software resource 縮寫,放置系統相關軟體、服務(注意不是 user 的縮寫喔!)

  10. /var 全名為 variable,放置一些變數或記錄檔

  11. /tmp 全名為 temporary,放置暫存檔案

  12. /media, /mnt 放置隨插即用的裝置慣用目錄, /mnt 為管理員/使用者手動掛上(mount)的目錄

  13. /opt 全名為 optional,通常為第三方廠商放置軟體處

  14. /run 系統進行服務軟體運作管理處

  15. /srv 通常是放置開發的服務(service),如:網站服務 www

檔案與目錄管理指令

在 Ubuntu 中我們可以打開終端機進行指令操作,就可以透過指令來管理檔案。

一般指令格式如下:

$ 指令 [選項] [選項值]

自學程式設計與電腦科學入門實戰:Linux Command 命令列指令與基本操作入門教學

  1. ls:list,查看檔案及子目錄

    列出基本資料夾資料:

    ls

    列出詳細資料和隱藏資料:

    // -l 列出詳細資料 -a 列出隱藏資料
    $ ls -la

    列出部分檔案:

    // 列出為 .js 的檔案
    $ ls *.js
  2. pwd:print work directory,印出目前工作目錄

    $ pwd
    // /Users/happycoder/Desktop/projects/HappyCoder
  3. cd:change directory,移動進入資料夾

    移動到目前資料夾下的 examples 資料夾:

    $ cd ./examples

    移動到家目錄:~

    $ cd ~

    移動到上一層目錄 ..

    $ cd ..

    移動到根目錄 /

    $ cd /
  4. mkdir:make directory,創建新資料夾

    $ mkdir examples
  5. cp:copy,複製檔案

    先將字串 TEST 存入 README.md 文件中

    $ echo "TEST" > README.md
    $ cp README.md
  6. mv:move (rename) files,移動檔案或是重新命名檔案

    移動檔案:

    $ mv README.md /examples/README.md

    重新命名

    $ mv README.md README_MV.md
  7. rm:remove file,刪除檔案

    $ rm README.md

    刪除目前資料夾下副檔名為 .js 檔案:

    $ rm *.js

    刪除資料夾和所有檔案:

    $ rm -f examples
  8. touch:用來更新已存在文件的 timestamp 時間戳記或是新增空白檔案

    $ touch README.md
  9. cat:將文件印出在終端機上

    $ cat README.md
  10. tail:顯示檔案最後幾行內容

    $ tail README.md

    持續顯示更新內容,常用於 web server 看 log debug 使用:

    $ tail -f README.md
  11. more:將檔案一頁頁印在終端機上

    可以使用上下移動換頁,按 q 離開:

    $ more README.md
  12. file:檢查檔案類型

    $ file README.md
    // README.md: HTML document text, UTF-8 Unicode text

編輯文字檔案

  1. nano:在終端機編輯文字檔案

    編輯或是新增文字檔案:

    $ nano README.md

    啟動編輯完後可以使用 Ctrl + X 離開,Ctrl + V 移動到上一頁,Ctrl + Y 移動到下一頁,Ctrl + W 搜尋文字內容

  2. vim:在終端機編輯文字檔案

    $ vim README.md

    啟動後,使用 i 進入編輯,esc 離開編輯模式,:q 不儲存離開,:wq 儲存離開,:q! 強制離開

檔案權限設定

在 Linux 系統中,每一個 Linux 檔案都具有四種存取權限:

  1. 可讀取(r,Readable),用數字 4 表示
  2. 可寫入(w,writable),用數字 2 表示
  3. 可執行:(x,eXecute),用數字 1 表示
  4. 無權限(-),用數字 0 表示

系統管理者依據使用者需求來設定檔案權限,若我們想檢視檔案權限可以使用 $ ls -l 來查看

自學程式設計與電腦科學入門實戰:Linux Command 命令列指令與基本操作入門教學

  1. 第一欄:使用者權限 由 10 個字元組成,第一個字元表示檔案型態(- 為檔案,d 表示目錄,1 表示連結檔案)。字元 2、3、4 表示檔案擁有者的存取權限。字元 5、6、7 表示檔案擁有者所屬群組成員的存取權限。字元 8、9、10 表示其他使用者的存取權限

    舉例來說 -rwxrwxr--,代表這是一格檔案,擁有者和群組都具備讀取、寫入和執行權限,其他使用者只擁有讀取權限

  2. 第二欄:檔案數量

  3. 第三欄:擁有者

  4. 第四欄:群組

  5. 第五欄:檔案大小

  6. 第六欄:檔案建立時間

  7. 第七欄:檔案名稱

接下來介紹如何透過指令修改權限:

  1. chmod:修改檔案權限

    將權限設為 rw-rw-r--

    $ chmod 664 README.md

    將檔案的使用者和群組加入執行權限

    $ chmod ug+x README.md
  2. chown:修改檔案擁有者與群組

    $ chown www-data:www-data README.md

系統管理

  1. sudo:使用最高權限(superuser)執行指令,會要求輸入自己密碼,使用上必須非常小心

    $ sudo git clone xxx.py
  2. su:su 指令可以讓一般的 Linux 使用者輸入 root 密碼取得 root 權限,暫時取得 root 權限的使用者就如同 root 一樣可以對系統進行各種變更動作

    $ su
  3. kill:根據 Process ID 指定要終止程式

    $ kill PID

    立即強制執行:

    $ kill -9 PID
  4. killall:直接使用程式的名稱來指定要終止的程式

    $ killall hello.py

套件管理

  1. apt-get:套件管理工具

    更新套件資料庫列表:

    $ sudo apt-get update

    升級套件並下載安裝套件:

    $ sudo apt-get upgrade

    搜尋相關軟體套件(使用名稱):

    $ apt-cache search --names-only fortune

    安裝套件:

    $ sudo apt-get install fortune

    移除套件:

    $ sudo apt-get remove fortune

網際網路相關操作

  1. ping:網路檢測工具,透過發送 ICMP ECHO_REQUEST 的封包,檢查自己與特定設備之間的網路是否暢通,速度是否正常

    可輸入 hostname 或是 IP:

    $ ping google.com

    PING google.com (172.217.160.110): 56 data bytes 64 bytes from 172.217.160.110: icmp_seq=0 ttl=57 time=7.037 ms 64 bytes from 172.217.160.110: icmp_seq=1 ttl=57 time=9.411 ms 64 bytes from 172.217.160.110: icmp_seq=2 ttl=57 time=22.690 ms 64 bytes from 172.217.160.110: icmp_seq=3 ttl=57 time=6.561 ms 64 bytes from 172.217.160.110: icmp_seq=4 ttl=57 time=6.909 ms 64 bytes from 172.217.160.110: icmp_seq=5 ttl=57 time=6.311 ms 64 bytes from 172.217.160.110: icmp_seq=6 ttl=57 time=6.860 ms 64 bytes from 172.217.160.110: icmp_seq=7 ttl=57 time=6.583 ms

  2. traceroutes:檢查從你的電腦到網路另一端的主機是走的什麼路徑

    $ traceroute google.com

    traceroute to google.com (172.217.27.142), 64 hops max, 52 byte packets 1 zyxel.home (192.168.1.1) 2.047 ms 1.208 ms 1.888 ms 2 h254.s98.ts.hinet.net (168.95.98.254) 6.189 ms 8.556 ms 5.875 ms 3 168-95-85-2.hinet-ip.hinet.net (168.95.85.2) 7.057 ms 5.796 ms 5.998 ms 4 211-22-226-1.hinet-ip.hinet.net (211.22.226.1) 9.766 ms 10.422 ms 72.14.222.94 (72.14.222.94) 9.744 ms 5 108.170.244.97 (108.170.244.97) 8.386 ms 108.170.244.129 (108.170.244.129) 11.500 ms 12.247 ms 6 209.85.142.13 (209.85.142.13) 7.015 ms 7.505 ms 209.85.240.15 (209.85.240.15) 6.750 ms 7 tsa03s02-in-f142.1e100.net (172.217.27.142) 11.478 ms 6.608 ms 6.893 ms

  3. nslookup:查詢 DNS 回應是否正常

    $ nslookup google.com

    Server: 192.168.1.1 Address: 192.168.1.1#53

    Non-authoritative answer: Name: google.com Address: 216.58.200.238

其他好用指令

  1. man:查詢 Linux 線上手冊(man page)

    $ man

    例如我們可以使用 man 來查詢 ls 的使用用法:

    $ man ls
  2. find:查詢檔案

    在目前目錄下尋找檔名為 README.md 檔案

    $ find . -name README.md
  3. grep:強大文件字串搜尋工具

    $ grep '找這個字串' file_name

    找所有目錄(含子目錄)下檔案

    $ grep -r '字串' *

  4. crontab:例行性工作排程

    編輯 crontab

    $ crontab -e

    crontab 格式:

    分 時 日 月 星期 要執行的指令

    30 12 * * * python /projects/hello.py &

    在 12:30 時執行 hello.py,& 表示背景執行
    * 號表示每日每月每星期都執行

撰寫第一個 shell script

Shell 是我們和 Linux 系統的介面,我們可以透過終端機在上面輸入指令和作業系統互動,讓他做我們想做的事情。在 Linux 中標準的 Shell 為(Bourne Again Shell),檔案路徑為 /bin/sh,我們可以透過 $ echo $SHELL 去印出目前使用的 shell

其中 Shell Script 為使用 shell 所提供的語法所撰寫的程式碼,其為直譯式不用編譯。可以讓你將複雜或是重複性的指令寫成程式碼檔案

$ vim example.sh

在編輯模式輸入以下程式碼,:

#!/bin/bash
# 這是註解,上面所使用的 shell

echo "日期"
date
echo "印出檔案列表"
ls -l

修改權限成可以執行:

$ chmod u+x example.sh

接著執行,若是一切順利就可以在終端機看到時間日期和檔案列表!恭喜你完成你的第一個 shell script!

$ ./example.sh

總結

以上介紹了 Linux/Ubuntu 常用指令和基礎操作的入門教學介紹上,實際上讀者不用刻意去背誦,而是在實際上操作中練習,多累積撰寫程式並使用指令碼去加快程式開發的速度自然而然就會把指令碼記憶起來了,若是真的忘記再去網路上查找就好,加油!

參考文件

  1. 初窥Linux 之 我最常用的20条命令
  2. 【L】Linux 常用指令集
  3. Linux 的 su 與 sudo 指令教學與範例
  4. dig、host 與 nslookup 指令的查詢語法
  5. nslookup — 查詢 DNS 指令
  6. 在 Linux 下使用 find 指令查詢目錄與檔案的速查筆記
  7. grep 搜尋目錄下所有檔案字串
  8. 第十五章、例行性工作排程(crontab)

(image via unixmencloudxlabytimgytimglinuximgur