owned this note
owned this note
Published
Linked with GitHub
---
slideOptions:
transition: slide
---
<iframe width="50" height="50" src="https://www.youtube.com/embed/ENmU2ZVASNI?autoplay=1" style="visibility: hidden"></iframe>
<style>
div.show{
position: absolute;
left:143px;top: 4px;
font-size:24px;
font-weight:1000;
animation: colors 4s;
animation-iteration-count:infinite;
}
@keyframes colors{
0% {
color: #B00;
}
33% {
color: #0B0;
}
66% {
color: #00B;
}
100% {
color: #B00;
}
}
</style>
<h1>
<div style="float: left;">
Linux 基 木 操 亻
</div>
<div class=show>
_
</div>
<div style="transform:rotate(-10deg);position: relative; left:-17px;">
乍
</div>
</h1>
<!--積木超人XD-->
###### tags:`waking lion`
---
## [Bash shell](https://www.cheatography.com/davechild/cheat-sheets/linux-command-line/)
----
### 終端 Terminal
- `Ctrl` + `Alt` + `t`開啟虛擬終端
- `Ctrl` + `Alt` + `F?`開啟終端
- `Ctrl` + `Alt` + `F7`關閉終端
> 你忘了講怎麼離開 tty , 我幫你補上了[name=HTYISABUG]
> > ty[name=509]
----
#### 學習如何起飛前,先學習如何降落
我有時圖形介面搞當掉時我就會試試能不能開啟終端(tty)把程式砍掉或重開機
如果真的掛了我就會按
`Alt`+`SysRq`+`r` un**R**aw 將鍵盤控制從 X Server 那裡搶回來
`Alt`+`SysRq`+`e` t**E**rminate 給所有進程發送 SIGTERM 信號,讓它們自己解決善後
`Alt`+`SysRq`+`i` k**I**ll 給所有進程發送 SIGKILL 信號,強制他們馬上關閉
`Alt`+`SysRq`+`s` **S**ync 將所有數據同步至磁碟
`Alt`+`SysRq`+`u` **U**nmount 將所有分區掛載為只讀模式
`Alt`+`SysRq`+`b` re**B**oot 重啟
順帶一題,前3個需要去修改權限才能使用,沒有開權限的話只能用SUB喔
https://read01.com/zh-tw/4ePDGd.html#.Wb_g7k1L-_4
----
### 常用指令(登入操作)
|指令|原文|意思|
|-|-|-
|ssh|**S**ecure **SH**ell|遠端連線/**安全殼協議**
|scp|**S**ecure ~~**C**ontain **P**rotect~~**C**o**P**y|安全傳輸...反正就是丟檔案出去
|passwd|**PASSW**or**D**|更改密碼
|exit|**EXIT**|離開
|sudo|**S**uper **U**ser **DO**|以超級使用者權限執行(sudo su)
|~h~top||資源監視器
|~p~kill||結束處理程序
`$ sudo apt-get install 軟體`
ex:
`top -o %CPU` 找有消耗最多CPU的程序
`pkill name` 關閉name這個程式
`kill 3283` 關閉PID=3283的程序
----
<style>
div.slides span.fk{display:flex;justify-content:center;position:fixed;top:0;max-height:100%;width:100%;}
div.slides span.fk p{flex:1;line-height:0px;margin:0;}
</style>
<span class="fk">

</span>
`sudo` 有好有壞,使用前請先詳閱公開說明書
### 多執行序
|指令|用途|
|-|-
|Ctrl+z| freeze & put in background
|jobs| view all jobs
|bg| run in background
|fg [job number]| move background to front
----
#### 練習1
1.連進老師給的server
`$ ssh F74059487@140.116.246.146`
2.更改密碼
[140.116.246.145](http://cial.csie.ncku.edu.tw/course/2017_Fall_Programming/download/list-A.txt)
[140.116.246.146](http://cial.csie.ncku.edu.tw/course/2017_Fall_Programming/download/list-B.txt)
----
### 常用指令1
|指令|原文|意思|
|-|-|-
|ls ~-a~|**L**i**S**t|列出檔案
|cd|**C**hange **D**irectory|更換位置
|pwd|**P**resent **W**orking **D**irectory|顯示現在路徑
|~m~mv|**M**o**V**e|移動 & 改檔名
|cp|**C**o**P**y|複製
`ls -a`是表示顯示隱藏檔
`ls -l`是表示顯示詳細資訊
裏面有子資料夾的就加個`-r`
有一堆奇怪的寫入保護之類就加個`-f`
mmv可以用來大量修改檔名
----
### 範例

----
### 範例(mv移動)

----
### 範例(mv改檔名)

----
### 範例(cp)

----
### 練習2
<span>
1.看看現在在哪裡
<!-- .element: class="fragment" data-fragment-index="1" --></span>
<span>
2.看看裏面有什麼
<!-- .element: class="fragment" data-fragment-index="2" --></span>
3.回到家目錄
<!-- .element: class="fragment" data-fragment-index="3" --></span>
----
## linux檔案結構
<!-- .slide: data-background="#FFF" -->

linux沒有所謂C槽D槽,所有的資料夾都是在根目錄 / 之下,而硬碟是"掛載"在資料夾上,所以可以創一個資料夾把資料碟掛載上去喔!
想知道開機時掛載的硬碟設定在哪裡嗎?去看看`/etc/fstab`
`/`:根目錄
`~`:家目錄
----
### 常用指令2
|指令|原文|意思|
|-|-|-
|mkdir|**M**a**K**e **DIR**ectory|新增資料夾
|rm ~-r~|**R**e**M**ove|刪除
|clear|**CLEAR**|清剛剛的指令殘骸
|man|**MAN**ual pages|手冊頁
|grep||抓!
ex:
`grep "active" -C3 ./*` 在這裡所有檔案中找有active這個字的檔案並多顯示上下3行的文字
`man scanf|grep -B3 short` 輸出man printf裏面有short和往上3行的文字
###### *請善用`-h`或`--help`來查如何使用*
----
### 範例(rm)

----
### 範例(mkdir)

----
### 練習3
<span>
1.創一個lion_practice資料夾
<!-- .element: class="fragment" data-fragment-index="1" --></span>
<span>
2.進去lion_practice
<!-- .element: class="fragment" data-fragment-index="2" --></span>
----
### 常用指令(補充)
開文字檔
- less
- more
- cat
- tac (由下往上顯示檔案!)
----
#### 鏈結(ln)
* 軟鏈結:(有加`-s`)
1.軟鏈結,以路徑的形式存在。類似於Windows作業系統中的快捷方式
2.軟鏈結可以跨檔案系統 ,硬鏈結不可以
3.軟鏈結可以對一個不存在的檔案案名進行鏈結
4.軟鏈結可以對目錄進行鏈結
* 硬鏈結:(沒加)
1.硬鏈結,以檔案副本的形式存在。但不佔用實際空間。
2.不允許給目錄創建硬鏈結
3.硬鏈結只有在同一個檔案系統中才能創建
### 偷懶用法
`cd ~` :point_right: `cd`回到家目錄
`ls` :point_right: `l`
`ls -l` :point_right: `ll`顯示詳細資料
`ls -a` :point_right: `la`顯示隱藏檔
## linux使用者與檔案權限(圖)

linux使用者可以分成超級使用者(root)跟一般使用者,一般使用者可以被分成不同的群組
常見檔案類型
`-`:一般檔案
`d`:資料夾
`l`:鏈結
[參考資料](http://linux.vbird.org/linux_basic/0210filepermission.php#filepermission_perm)
## linux檔案屬性(圖)

連結數:
每個檔案都會將他的權限與屬性記錄到檔案系統的i-node中,連結數是說有多少個不同的檔名連結到相同的一個i-node號碼
Google it! 關鍵字:inode
---
## [基礎正規表示法](http://linux.vbird.org/linux_basic/0330regularex.php#basic_regexp)
|符號|意思|
|-|-
|`^`|行首
|`$`|行尾
|`.`|任一字元
|`*`|任何數量的前一個字符(包含0個)
|`[]`|只擷取中括號內有的東西
`[]`的使用方法很多,詳細請見[這裡](http://linux.vbird.org/linux_basic/0330regularex.php#basic_regexp_char)
在vim跟grep都很常用到喔~
---
## 資料流重導向
`>` :覆蓋
`>>`:累加
ex:`a.out << input_data > output_data`
---
## [Vim](https://vim-adventures.com)(**VI** i**M**proved)
$ vimtutor zh_TW
vim-advanture玩到後面要錢QQ
----
### vim模式
* 命令模式 (任何模式按`esc`)
* 輸入模式 (命令模式按`i,a,u...`)
* 底線命令模式 (命令模式按`:`)
----
### 命令模式1(移動)
|指令|意思
|-|-
|h|左
|j|下
|k|上
|l|右
|e|下一個字的字尾
|b|上一個字的字首
|gg|文件開頭
|G|文件結尾
|gf|開啟游標上該路徑的檔案
用不習慣之前先用方向鍵吧!
----
### 命令模式2(編輯)
|指令|意思
|-|-
|<span><!-- .element: class="fragment highlight-red" -->i</span>|進入插入模式
|u|復原
|o|向下插入一行並進入插入模式
|r|修改(一個字母)
|x|刪除(一個字母)
`Ctrl`+`r`:重做
`Ctrl`+`n`:自動補齊相同的字
看起來很多指令,不過這裡的指令只要知道`i`就好了!
關於自動補齊等等的,我推荐使用vim的插件
ex:[YouCompleteMe](https://github.com/Valloric/YouCompleteMe)
----
### 常用指令3(操作)
|指令|意思
|-|-
|v|選取
|d|刪除
|y|複製
|c|修改(進入輸入模式)
|w|一個詞的範圍
|p|貼上
|/word|找word這個字
ex:`dd`,`yy`可以刪除或複製一整行,`5dd`就是刪五行,`yw`就是複製一個詞
`Ctrl`+`v`可以選方框型的範圍,用來把前面的tab改成註解`//`很好用!
也可以在複製剪下前加上`"a`字存在a暫存器裡,詳情請見[此](https://www.itread01.com/p/200345.html)
----
#### 練習3
<span>
1.打開vim,檔名叫test.c
<!-- .element: class="fragment" data-fragment-index="1" --></span>
<span>
2.按`i`進入輸入模式&&Coding~!
<!-- .element: class="fragment" data-fragment-index="2" --></span>
<span>
```clike=
#include<stdio.h>
int main(){
printf("hi!\n");
return 0;
}
```
<!-- .element: class="fragment" data-fragment-index="2" --></span>
<span>
3.按`esc`回到標準模式
<!-- .element: class="fragment" data-fragment-index="3" --></span>
----
### 底線命令模式1(`:`)
|指令|意思
|-|-
|w|存檔
|q ~!~|離開
|x|存檔離開
|55|移到55行
|make|編譯(請先設好makefile或是set makeprg)
|!指令|執行shell指令
另存新檔只要`w 檔名`就好了
----
### 底線命令模式2
|指令|用途
|-|-
|vsp|分割視窗
|`a,bs/target/replaced word/g`|從a行到b行所有的target取代成replaced word
vsp可以看同個檔案,或者是後面加./再看你要開哪個別的檔案
ex:`3,$s/^/\/\//g` 從第3行到最後一行的開頭都換成`//`
`3`是開始行數,`$`表示結尾(正規表示法),s表示取代,\是讓下一個/不會誤認為指令的一部份,最後的/g是讓所有找到的對象都做取代
----
### 底線命令模式3
|指令|意思
|-|-
|syntax **on off**|程式語法自動標色
|set ~no~nu~~mber~~|前方加數字
|set ~no~paste|貼上不會亂
|set ~no~ai|自動縮排
|set background=**dark light**|設定背景顏色
|set makeprg=gcc/ hello.c/ -o/ hello|設定預設編譯器
這類的常常丟在~/.vimrc或是~/.vim/vimrc裏面,打開時自動幫你輸入
可參考[這裡](http://wiki.csie.ncku.edu.tw/vim/vimrc)
----
#### 練習4
`esc`回到標準模式
`:wq`存檔並離開
<!-- .element: class="fragment" data-fragment-index="1" --></span>
----
#### 取代
從3到9行都取代
/g表示同一行從頭到尾都要取代(沒有的話會只取代第一個)
`:3,9s/to be replace word/replace to/g`
更多建議參考:https://vim.fandom.com/wiki/Search_and_replace
----
## gcc([**G**nu](https://www.gnu.org/) **C**ompiler **C**ollection)
Gnu=Gnu is Not Unix
Gnu=Gnu is Not Unix
Gnu=Gnu is Not Unix
...依此類推
所以那個G是什麼意思?就是Gnu阿~XD
還有wine,PNG是什麼意思呢?去查吧~!
----
### 編譯
`$ gcc -o 執行檔名 原始碼檔名`
`$ gcc 原始碼檔名 -o 執行檔名`
----
### 標準
`$ gcc -o 執行檔名 原始碼檔名 -std=c99`
`$ gcc -o 執行檔名 原始碼檔名 -std=gnu99`
老師的伺服器用的是C89的標準,`for(int i=0;i<10;++i)`是不合法的!請把宣告放在外面或是用上面指令換成C99的環境
gnu99=c99+gcc自己的擴展
----
#### 練習5
<span>
1.編譯成檔名test
<!-- .element: class="fragment" data-fragment-index="1" --></span>
<span>
2.執行或Debug
<!-- .element: class="fragment" data-fragment-index="2" --></span>
---
## 今日重點
----
### 今日重點(bash shell)
- ssh
- exit
- ls
- mkdir
- cd
----
### 今日重點(vim)
- `esc`回到標準模式
- `i` 標準模式->輸入模式
- `:` 標準模式->底線命令模式
底線命令模式下
`w`存檔
`q`離開
----
### 今日重點(gcc)
`$ gcc -o 執行檔名 原始碼檔名`
`$ gcc 原始碼檔名 -o 執行檔名`
---
# 如何上網查資料?
* 只下關鍵字
* 英文 > 中文
* 看到 stackoverflow 就進去看一下
----
實際案例:
在用 vim 的時候不知道按到什麼之後,按鍵盤都沒反應了,怎麼辦?
----
## 只下關鍵字
想想這個問題的重點在哪裡
|bad|good|
|-|-|
||
----
## 英文 > 中文
英文很重要!
|good|better|
|-|-|
|||
---
# END
覺得不夠完善嗎?登入後幫忙加上幾句吧!
說個小小小技巧,選課時常常找不到想選的課?善用google從入門到精通,試試用google查:
內容 site:http://class-qry.acad.ncku.edu.tw/syllabus/online_display.php
好拉.....對於會用google的人這完全是段廢話XD。不會用的人推荐去查"善用google從入門到精通"看看:)
<style>
h1{
transform-origin: 0 0;
transform:rotate(-3deg);
text-shadow: 0 0 20px #F00;
color: #B00;
font-weight: bold;
font-family: "Architects Daughter","DFKai-sb";
border-bottom-color: #F0B !important;
}
h2{
color: #FFB3E0;
font-weight: bold;
font-family: Microsoft JhengHei;
text-shadow: 0 0 5px #99BBFF;
transform-origin: 0 0;
transform:rotate(2deg);
}
h3{
color: #EED3D3!important;
font-family: Microsoft JhengHei;
text-shadow: 0 0 1px #FF99BB;
transform-origin: 0 0;
transform:rotate(-2deg);
}
h4{
color: #FFB3B3;
font-weight: bold;
font-family: Microsoft JhengHei;
text-shadow: 0 0 5px #FF99BBFF;
transform-origin: 0 0;
transform:rotate(-1deg);
}
h5,h6{
transform-origin: 0 0;
transform:rotate(1deg);
color: #FFB3E0;
font-weight: bold;
font-family: Microsoft JhengHei;
text-shadow: 0 0 5px #FF99BB;
}
body{
color:#FFCCFF;
text-shadow: 0 0 1px #FCF;
background-image:url('https://i.imgur.com/UbNcr6d.jpg');
background-color: #000 !important;
background-position: center;
background-repeat: repeat;
background-attachment: fixed;
}
th,td{
background:#333333
}
nav.navbar{
color: #000000 !important;
font-weight: bold;
border:outset 2px rgba(255, 200, 255, 0.2);
background-color: rgba(255, 200, 255,0.2) !important;
box-shadow: 0 0 10px #FF00FF;
}
#ui-toc-affix {
border: solid 2px rgba(255, 0, 255,0.3);
border-radius: 10px;
background-color: rgba(255, 0,255,0.2);
box-shadow: 0 0 10px #FF00FF ;
}
.ui-toc-label{
color:#FFFFFF!important;
background-color:rgba(255,0,255,0.6)!important;
}
.ui-toc-label:hover{
box-shadow:0 0 10px 5px rgba(255,0,255,0.5);
}
.nav>.active>a{
color:#FFAAFF!important;
text-shadow:0 0 6px rgba(255,255,255,0.6);
border-color:rgba(255,200,255,0.8)!important;
box-shadow:19px 0 10px -10px rgba(255,170,255,0.4) inset;
}
a[smoothhashscroll=""]{
color:#EEEEEE!important;
}
a[smoothhashscroll=""]:hover{
color:#FFAAFF!important;
text-shadow:0 0 10px rgba(255,255,255,0.5);
border-color:#FFAAFF!important;
}
.expand-toggle,.back-to-top,.go-to-bottom{
color:#BBBBBB;
}
.expand-toggle:hover,.back-to-top:hover,.go-to-bottom:hover{
color:#FFAAFF!important;
}
.expand-toggle:focus,.back-to-top:focus,.go-to-bottom:focus{
color:#FFFFFF!important;
font-weight:bold;
text-shadow:0 0 10px rgba(255,255,255,1);
}
.btn-default{
color:#BBBBBB;
border-color:rgba(200,0,200,0.1);
background-color:rgba(200,0,200,0.2);
}
.btn-default:hover{
color:#FFFFFF;
text-shadow:0 0 10px rgba(255,255,255,1);
border-color:rgba(200,0,200,0.1);
background-color:rgba(200,0,200,0.2);
}
.btn-default.active, .btn-default:active{
color:#FFFFFF!important;
border-color:rgba(200,0,200,0.1)!important;
background-color:rgba(200,0,200,0.5)!important;
}
.label-primary{
font-weight: bold;
border:outset 4px rgba(255,100,255, 0.3);
background-color:rgba(255,100,255,0.6);
}
.label-primary:hover{
text-shadow: 0 0 9px rgba(211,211,211,0.7);
border-color: rgba(255,100,255, 0.3) ;
background-color:rgba(255,100,255,0.8);
box-shadow: 0 0 20px 3px rgba(255,100,0, 1);
}
.dropdown-menu{
background-color:rgba(100,0,100,0.9)!important;
border: outset 5px rgba(150,0,150,0.7);
}
.list>li>a , .dropdown-menu>li>a{
color:#FFFFFF!important;
}
.list>li>a:focus, .dropdown-menu>li>a:hover{
background-color:rgba(200,200,200,0.4)!important;
box-shadow: 0 0 20px 3px rgba(255,255,255, 0.5);
color:#FFFFFF!important;
text-shadow: 0 0 3px rgba(211,211,211,0.7);
}
.dropdown-header{
color:#AAAAFF;
font-weight:bold;
}
.navbar-default .navbar-nav>.open>a{
color:#FFFFFF !important;
background-color:rgba(200,200,200,0.4)!important;
box-shadow:0 0 7px 5px rgba(200,200,200,0.2) inset,0 0 7px 5px rgba(200,200,200,0.5);
}
.navbar-nav>li>a{
color:#BBBBBB!important;
}
.navbar-nav>li>a:hover{
color:#FFFFFF!important;
text-shadow: 0 0 15px rgba(211,211,211,0.7);
}
.navbar-default .navbar-brand,.navbar-default .btn-link{
color:#BBBBBB!important;
}
.navbar-default .navbar-brand:hover,.navbar-default .btn-link:hover{
text-shadow:0 0 15px rgba(255,255,255,0.7);
}
.task-list-item{
color:#99CCFF;
}
blockquote.part{
color:#FFEEFF !important;
font-weight:bold;
text-shadow: 1.5px 2.5px 1px rgba(211,211,211,0.3);
border-color:#9999FF!important;
background-color: rgba(170,170,255,0.3);
box-shadow: -5px 0 20px 10px rgba(170,170,255,0.3),-7px 0 10px -5px rgba(170,170,255,0.3),10px 0 15px -10px rgba(170,170,255,0.5) inset;
}
blockquote{
color:#BBBBFF !important;
text-shadow: 2px 1.5px 1px rgba(190,190,211,0.3);
border-color:#80AAFF!important;
box-shadow: 13px 0 7px -7px rgba(128,170,255,0.5) inset;
}
hr{
background-color:rgba(180,0,0,0.85)!important;
box-shadow:0 0 10px 3px #AA0000;
}
</style>