我記得甚麼
- 網路基礎概念
- GIT
- Github
- CLI
- Markdown格式
- shell script ( 程式腳本 )
接下來讓我來一個個紀錄並且也順便複習一下
網路基礎概念
簡單來說呢,就是要理解我們是怎麼與電腦互動的,以在 Google 搜尋為例好了,首先我們打入要搜尋的關鍵字,發送訊息給 Google 的 Server (伺服器) Server 再把資料傳給遠端的 Data base (資料庫) 找到資料後傳回 Google Server , Server 再 Response 回我們的電腦。
輸入資料 => Server 接收 => Data base 接收
顯示資料 <= Server 接收 <= Data base 回傳
這邊要補充的是電腦看得跟我們看的是不一樣的,電腦看的是純文字檔,我們看的是有經過電腦處理過的資訊,電腦可以透過副檔名來得知要用哪個版本編譯器來解讀 (.txt .js 等等) 所以電腦在傳送資料時其實都是純文字檔,只有顯示時,它們才會依照規則顯示出我們人看得懂的畫面。
GIT (版本控制)
為什麼需要 GIT ? 因為在做多人協做開發時,版本會不停的更新,如果沒有 GIT 就是要一直複製資料夾然後還要說明哪個是最新版跟哪裡有改動會變得很麻煩!
這邊打一些目前學到的一些基本指令:
首先要到一個資料夾 (CD)
git init
: 初始化 代表要開始做版本控制囉~ 這時會在主線
rm -rf .git
: 離開移除版本控制
git status
: 查看目前狀況
git add_檔案名
: 加入版本控制 add .
(全加)
git rm --cached_檔案名
: 要移出版本的檔案
git commit
: 東西都改好或告一段落時,提交一個新版本通常都用 git commit -am"message"
git commit -m"message"
git log
: 瀏覽歷史紀錄
git checkout
: 回到某個版本
.gitignore
: 把與版本控制無關的檔案放入 (git會自動忽略該檔案)
git branch_分支名
: 開一個新分支 ( Master 為主線)
git branch -v
: 查看目前有多少分支
git branch -d_刪除分支名稱
: 刪除該分支
git checkout_分支名稱
: 切換到此分支
git merge_合併起來的檔名
: 注意 (在 Master 裡 Merge 分支檔名) 意思是把他抓過來合併唷
這邊要注意的是如果合併有衝突時 EX : 兩個版本修改到同一個檔案,(
git status
提示哪邊衝突 ) 進入檔案 => 修改衝突並 commit 解決。
Github ( 可以放很多 git repository (資料庫) 的地方 )
基本指令 :
這邊首先要注意,要先去 github 新增 + new repository,接著 github 會教你設定,輸入到妳的終端機設定代號 ( oringin )就可以連線。
git push_代號 ( origin )_要推的名稱
: 也就是從本地端推上遠端的指令,要注意是打要推的名稱,而不是遠端的名稱。也可把代號改成網址。
git pull_代號 ( origin )_要拉的名稱
: 也就是拉過來更新,要注意通常都要先切換到 Master ( 主線 )在做 pull 的動作,一樣代號也可以用網址。
git clone_網址
: 把別人的 repository 下載
如果想 push 回去是不行的唷~ 因為你沒有權限更動他人的資料。
( Fork ( 叉子 ) ) 叉到自己的 github 網站 再改動 push 就可以唷~
Pull requests : 在 github上合併,優點 ( 容易看到有哪些更動 )
業界步驟:
- 在 Github 上新增 + new repository ,連結本地端
- Fork 到自己的 Github 本地端
- 新開一個分支,開始開發
- push 到 Github 上,git push origin 妳的分支名
- 在 Github 上討論並 Pull requests ( 合併 )
- pull 回本地端更新並刪除 branch 分支,branch -d 分支名
狀況劇 :
狀況一 : commit message 想改 push 到遠端就不行了...
git commit --amend
: 會跑到 vim 編輯器 改最上方的名字。
狀況二 : 取消 commit
git reset HEAD^_搭配參數
--hard : 直接刪除最新版本,回到上個版本
--soft : 只取消 commit ,檔案變更都還在
--mixed ( 預設 ) : 回到上一步 ( 修改檔案 => 保留 ( 無 commit ). 新增檔案 => 保留 ( 無 add ))
狀況三 : 還沒 commit 但後悔,改了檔案不要了
git checkout --檔案名稱
: 可讓檔案回到還沒改之前
狀況四 : 修改 branch 名稱
git branch -m 新名稱
把遠端的 branch 抓下來
git checkout 遠端 branch 名稱
CLI基本指令
pwd
: print working directory 印出現在位置
ls
: list seqment 印出底下所有檔案 可加 -l -al
cd
: change directory 切換資料夾 cd .. 回到上個目錄 cd ~ 後目錄 cd / 更目錄
touch
: 碰檔案 ,用來更新 ,如果沒有該檔案,會創建一個新檔案
mkdir
: make directory 創建資料夾
rmdir
: 移除資料夾 -rf (刪除底下所有檔案 危險唷~ 請確認使用)
rm
: remove 移除檔案 rm -r rm -rf 跟上面一樣危險
cp
: copy 複製檔案 cp_要複製檔案的名字_複製的新名字 cp -r 複製資料夾
MAN
: 使用說明
date
: 印出現在時間
top
: table of process 印出所有 process
cat
( type ) : cattenate 連接檔案
less
: 分頁式的閱讀檔案
grep
: 抓取特定關鍵字
echo
: 印出字串
mv
: move 移動檔案或改名
mv_要移的檔案_移入的檔案 mv_要移的檔案 ..( 回到上個位置 ) mv_要移的檔案_新名稱 ( 改名用法 )
vim
: 名字編輯器,按 i 可進入插入模式 ,要離開 ESC :wq 存檔離開
weget
: 下載檔案 weget_下載網址
curl
: 同上
組合技 :
redirection 重新導向 input output ,檔案輸出 >
想導入的檔案 ( 會覆蓋 ) 改成 >>
變新增上去
pipe ( |
) : a 輸出 |
= b 的輸入
最後來說明 shell script ( 程式腳本 )
就是把多項指令預先弄成一個小禮包,執行時能夠省去很多麻煩。
簡單指令 :
#!/bin/bash
: 宣告 script 使用 bash 語法
$1
: 使用者輸入的參數
echo
: 印出
touch
: 創建
Shell script
現在來說說 超級挑戰題
題目 : 當執行檔案時 ./github.sh userid
時,要印出使用者的名稱、居住地、簡介、部落格。
curl https://api.github.com/users/$1|grep -E "name|bio|location|blog"|sed "5d"|cut -d ":" -f 1 --complement| sed 's/"//g'|sed 's/.$//'
- 先使用 curl 抓取網頁資料,這邊要注意的是使用 $1 讓使用扯可以輸入 ID 來搜尋該網頁
- 使用 grep 抓取特定關鍵字,這邊要注意的是使用 -E "字串1|字串2" 來一次搜尋多個字串
最後使用 sed 來擷取資料,由於使用 grep 也搜尋到了第五行的 twitter_username ,先用 sed "5d" 刪除第五行
cut -d "分隔符" 也就是使用 ":"來區分該列字串 -f 1 -- complement 顯示除了使用 ":" 分隔的第一行以外的字串
sed 's/舊字串/新字串/g' 讓 " 替換成空白,sed's/.$//' 刪除最後一個字元,也就是" ,"
不過如果要排序的話,應該 grep 變成要一行一行抓取,或是還有排序行的指令? 這部分可能要再研究一下字串處理好夥伴 :
curl 網址
grep 抓取特定關鍵字
sed 選取、替換、刪除、新增
cut : 提取
sed,刪除字串符號
這題使用了刪除、替換
sed "nd"
:刪除第 n 行
sed '/舊/新/g'
: 舊換新
sed '/.$//'
: 刪除該列最後一個字元 (看幾個 . )
cut -d "分隔符(題目是':')" -f 1 -- complement
顯示除了"分隔符"第一列以外的字串
好了,差不多是這樣,快死惹 好累