{Linux}

建資 賴昱錡

  • 建中資訊網管
  • 暑訓放koyori被說油,放張貓咪應該不會出事 :D
  • @laiyuchi1130

歷史

# PRESENTING CODE

1969

Unix在美國AT&T公司的貝爾實驗室開發出來。

1977

Bill Joy釋出BSD (Berkeley Software Distribution),這些稱為Unix-like的作業系統

1983

Richard Stallman創立GNU計劃,為了發展一個完全自由的類Unix作業系統。

1992

GNU GPL下Linux內核被重新授權使用,產生第一個「Linux發行版本」

1991

Linux內核由芬蘭學生Linus Benedict Torvalds公開發布

1994

內核所有元件大致成熟,正式發行Linux的1.0版本

# PRESENTING CODE

特色

  • 自由且開放的類 Unix 系統
  • 高安全性、高移植性、高穩定性
  • 常用於伺服器
  • 多種客製化發行版

環境設置

# PRESENTING CODE

wsl

WSL(Windows Subsystem on Linux),是微軟和 Canonical(Ubuntu 的母公司)共同開發,於 Windows 10 後加入的功能,能夠在 Windows 10 掛載一個 Linux 系統,用起來又不像虛擬機那樣肥、開機緩慢,是 Windows 使用者用來入門 Linux、甚至是進階使用 Linux 系統的好工具。

與其用虛擬機搞死自己,不如用 WSL 讓自己比較晚被搞

環境設置-步驟

# PRESENTING CODE

1. 以系統管理員身分開啟 windows powershell,打入下方指令。

 

 

2.在 Microsoft Store 安裝 Linux distroWindows Terminal (建議,可設定字體等,較為美觀)

3.開啟剛剛安裝好的程式,待其下載套件包、設定Unix name、password 完成,就完成囉~

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

檔案架構

# PRESENTING CODE

/etc : 有大部分系統的主要設定檔,很重要

/bin : 系統預設檔案、存放指令

/var : 系統運行產生的 log 紀錄

{commands}

熟能生巧

# PRESENTING CODE

$ ls [FILE|DIR]

  • LiSt directory contents

  • 列出資訊 未指定預設為當前資料夾

  • -a : 列出全部 (包括隱藏檔案)

  • -l : 詳細列出

  • -R : 遞迴列出

# PRESENTING CODE

$ command usage

  • command [option] [argument]

  • command : 指令

  • [option] : 可選選項

  • [argument] : 必要參數

 

$ ls(指令) -al(可選選項) ./(必要參數)

# PRESENTING CODE

$ TAB auto complete

  • TAB 鍵可以自動補全檔案名稱、資料夾名稱、指令
  • 可以讓你不用打太多字
# PRESENTING CODE

$ clear

  • 清空當前 Terminal 上所有文字
  • Ctrl+L 具有相同效果
  • 沒有圖,因為被 clear 掉了
# PRESENTING CODE

$ cd

  • 切換資料夾 不指定則預設為 ~
  • ./ : 當前資料夾
  • ../ : 母資料夾
  • ~ : 家目錄 (/home/<username>)
  •  
# PRESENTING CODE

$ pwd

  • 顯示當前路徑
  • PWD 存在 env 中

# PRESENTING CODE

$ pwd

  • 樹狀資料夾結構
  • 絕對路徑: 相對於根目錄的路徑
  • 相對路徑: 相對於當前資料夾的路徑
# PRESENTING CODE

$ mkdir [dir]

  • 創建新資料夾

  • -p : 若創建路徑有不存在的資料夾,會同步建立

# PRESENTING CODE

$ touch [file]

  • 更新檔案的時間戳
  • 也可以建立新檔案
# PRESENTING CODE

$ cat [file]

  • 抓取檔案內容並輸出
  • 題外話 cat 是 concatenate 的縮寫 = =
# PRESENTING CODE

$ previous command

  • 使用 ↑↓ 鍵切換至使用過的指令
  • !! : 最後一次執行的指令
# PRESENTING CODE

$ file [FILE]

  • 透過 File Header (標頭檔) 檢查檔案類型
  • 沒什麼好說的 (?
# PRESENTING CODE

$ strings [FILE]

  • 預設抓取 4 個以上連續可視字元顯示 (不包括\n \r \t 之類的跳脫字元)
  • -n : 指定最短連續可視字元長度
# PRESENTING CODE

$ man、help

  • 查看指令手冊
  • <command> --help

指令名稱

指令範例

參數介紹

# PRESENTING CODE

$ apt

  • Linux 的 Google Play Store
  • 套件管理工具
  • install : 下載/安裝
  • purge : 解除安裝
  • update : 更新下載資訊
  • upgrade : 更新特定套件 (未指定預設為全部)
# PRESENTING CODE

$ sudo

  • 切換至 root 權限 (最高權限) 執行指令
  • su : 切換至最高權限 (常見為 root)
# PRESENTING CODE

$ authority code

rwx    r-x    --x

1 1 1    101    001

 

這裡使用二進位制。

  7        5        1

# PRESENTING CODE

$ 初探權限

  • 擁有者 (u)
  • 群組內使用者 (g)
  • 其他使用者 (o)
  • 全部使用者 (a)
# PRESENTING CODE

$ rwx?

# PRESENTING CODE

$ chmod [file|dir]

  • 修改檔案/資料夾的權限
  • + - : 新增/移除權限
  • u : 針對當前使用者移除權限
  • 不要隨便 chmod 777 [file],這樣安全性會沒了
# PRESENTING CODE

$ execute file

  • 直接打出可執行檔案的路徑即可
  • ./<FILE> : 執行當前路徑的檔案
# PRESENTING CODE

$ whoami

  • 顯示當前使用者的 id/username
  • 存在 `env` 裡面
# PRESENTING CODE

$ rm [file/dir]

  • 刪除檔案
  • -r : 刪除資料夾
  • -f : 強制刪除
  • rm -rf / (別嘗試)
# PRESENTING CODE

$ mv [file|dir] [file|dir]

  • 移動或重新命名
  • mv file1 file2,代表將 file1 重新命名為 file2
# PRESENTING CODE

$ cp [file|dir] [file|dir]

  • 複製檔案或資料夾
  • -r : 複製目錄
# PRESENTING CODE

$ data stream

Unis 3 data streams:

  • stdin : 標準輸入
  • stdout : 標準輸出
  • stderr : 標準錯誤輸出
# PRESENTING CODE

$ data redirect

  • > : 資料導入至檔案
  • >> : 資料串接至檔案內容後
  • a>&b : 代號a的資料流導向b
  • ex : 2>&1 (stderr導向至stdout)
# PRESENTING CODE

$ pipeline |

  • 傳遞前項指令的 stdout 至後方指令的 stdin
# PRESENTING CODE

$ command combine

符號 用途
& 丟入背景執行
&& 前項指令成功後執行下一項
| stdout to stdin
|| 前項指令錯誤後執行下一項
; 前後項一定都執行
2>&1 stderr to stdout
>> stdout串接至檔案後方
> stdout覆寫後面的檔案
< 將檔案當作某程式的input
# PRESENTING CODE

$ echo 

  • 輸出文字
  • -n : 不換行輸出
  • echo <text> > <file> : 將內容寫入檔案
# PRESENTING CODE

$ grep 

  • 搜尋檔案內符合格式的字串
  • -i : 忽略大小寫
  • -o : 只輸出符合的字串
  • -P : 使用 Regex
  • 什麼是 Regex ?
# PRESENTING CODE

$ regular expression (regex)

pattern usage
[xyz] 找任何符合括號內規則的
a-z 找字母a-z(A-Z、0-9同理)
{} 指定配對的長度
. 任意長度為1的字元
* 長度任意
\w [a-zA-Z0-9_]
# PRESENTING CODE

$ wildcard

  • 在 Linux 裡面如果想要把目前資料夾下 .png 結尾的檔案都刪掉,或是要列出所有 a 開頭的檔案,怎麼做?
  • * : 任意多個字元(就是字串)
  • ? : 任意一個字元
  • 更詳細的用法~
# PRESENTING CODE

$ history

  • 顯示指令歷史紀錄
  • -c : 清空歷史紀錄 (清空後就不能用上下鍵切換指令了)
  • 指令前加空白就不會被寫進歷史
# PRESENTING CODE

$ wget

  • 下載檔案
  • -O : 設定下載完的檔案名稱
  • -q : 不顯示下載資訊
# PRESENTING CODE

$ find

  • 尋找符合特定檔案名稱
  • -name <filename> : 尋找所有符合檔案名 (可以配合wildcard)
  • -type d: 只尋找資料夾 (檔案為 f)
  • 預設路徑是 ./

{tools}

實用而不毒瘤的工具

# PRESENTING CODE
# PRESENTING CODE

$ ssh user@ip

# PRESENTING CODE
# PRESENTING CODE

$ nc <server> <port>

  • 連線至遠端伺服器的單項服務
  • what's a netcat?
# PRESENTING CODE
# PRESENTING CODE

$ scp <file|dir> user@ip:<path>

  • 遠端移動檔案或資料夾
  • -r : 移動資料夾要加
  • 常用 (?
  • 可以從遠端搬回本機,前後路徑顛倒即可
  • 遠端的要使用絕對路徑
# PRESENTING CODE
# PRESENTING CODE

$ nano <file>

  • Ubuntu 有內建的文字編輯器
  • 指示很清楚 (? 在視窗底部有各個指令的介紹
# PRESENTING CODE
# PRESENTING CODE

$ tar <file>

# PRESENTING CODE
# PRESENTING CODE

$ curl <url>

Curl 是一個在 Linux 上用來透過 HTTP Protocol(HTTP HyperText Transfer Protocol 定義存取網路資源的協定,讓我們可以使用 client / server 模式來取得網路資源)下載和上傳檔案的指令(比起 wget 只能下載強大許多)

# PRESENTING CODE
# PRESENTING CODE

$ g++/gcc file

  • gcc 適用於C語言,g++適用於C++ (?
  • gcc/g++ file 會生成 file.out 的檔案,一樣可以執行
  • g++ -o "執行檔名稱" file.cpp (gcc 用法相同)

{vim}

所思即所打

我已經使用了 vim 10 年了,因為我還不知道如何退出 - vim用戶

# PRESENTING CODE

$ vim/Neovim

  • 講求快速、簡潔的編輯器
  • 用思維的速度寫程式 ,不使用滑鼠,只用鍵盤
  • 熟練後會很方便
# PRESENTING CODE

$ vim/Neovim

  • sudo apt install vim / sudo apt install neovim
# PRESENTING CODE

$ vim/Neovim

模式 按鍵
Normal <ESC>
Command Normal+:
Insert Normal+i或a
Visual Normal+v
Replace Normal+R
# PRESENTING CODE

$ 按鍵

# PRESENTING CODE

$ .vimrc

  • vim 外觀的配置檔
  • 位於 ~/.vimrc
  • 個人化快捷鍵/外觀
# PRESENTING CODE

$ my .vimrc

:set ai
:set nocompatible
:set nu
:set relativenumber
:set cursorline
:set tabstop=4
:set shiftwidth=4
syntax on
:highlight CursorLineNr cterm=bold ctermfg=Green ctermbg=NONE
:set t_Co=256
:colorscheme torte
:inoremap ( ()<Esc>i
:inoremap ' ''<Esc>i
:inoremap " ""<Esc>i
:inoremap [ []<Esc>i
:inoremap {<CR> {<CR>}<Esc>i
:imap ss <Esc>:%+y<CR>
:imap cc <Esc>:w<CR>:!g++ -o %:r %:r.cpp&&echo "Compiled." && ./%:r<CR>:q<CR>
# WSL settings
let s:clip = '/mnt/c/Windows/System32/clip.exe' 
if executable(s:clip)
	augroup WSLYank
		autocmd!
		autocmd TextYankPost * if v:event.operator ==# 'y' | call system(s:clip, @0)
	augroup END
endif

{advanced}

其實也沒有很進階

# PRESENTING CODE
# PRESENTING CODE

$ ps

  • Process Status
  • 用來觀察程序
  • ps aux: 查看當前所有程序
  • 可以搭配 grep 找到具關鍵字的程序
# PRESENTING CODE
# PRESENTING CODE

$ top

  • 顯示Server即時的資源使用狀況
# PRESENTING CODE
# PRESENTING CODE

$ htop

  • top好垃圾喔
  • 即時持續地顯示運行中的程式資訊
  • 算是top的加強版,外觀、功能也更強
  • sudo apt install htop
# PRESENTING CODE
# PRESENTING CODE

$ kill

  • kill PID
  • 強制終止程序執行,簡單粗暴
  • 圖片被kill掉了
# PRESENTING CODE
# PRESENTING CODE

$ diff <file1> <file2>

  • 可以比較兩個檔案的差異
  • 上半部是第一個檔案不同之處,下半部則是第二個檔案相異處,以---隔開
# PRESENTING CODE
# PRESENTING CODE

$ ping <url>

  • 測試一個網站的連線狀況
  • -c 次數 指定ping的次數
    -i 秒數 指定ping秒數的間隔

{練習}

.w.

# CHAPTER 2

網站

# CHAPTER 2

延伸學習

Bye!

End of the lecture.

  • 【Vim 編輯器 入門指南 (上)】用思維的速度寫程式
  • Regex 101
  • 鳥哥的 Linux 私房菜
  • 我以前的簡報

reference

Made with Slides.com