---
# System prepended metadata

title: linux作業系統筆記

---

# linux作業系統筆記
>111010536 資工二 林家成

[TOC]

## linux歷史


* **Linux的發源可以追溯到1991年，當時芬蘭學生Linus Torvalds開始開發一個新的操作系統核心。他創建了一個稱為Linux的核心，並在Usenet新聞組上發布了該核心的第一個版本。**

* **Linus Torvalds最初的目標是開發一個可以運行在他的個人電腦上的自由和開放的操作系統。他受到了Unix操作系統的啟發，但由於Unix的商業性質和高昂的價格，他希望創建一個類似的系統，但可以免費使用和修改。**

* **Linus Torvalds在開發過程中得到了來自全球各地的開發者的幫助和貢獻。這些開發者為Linux核心開發新功能，修復錯誤，提供驅動程序和貢獻其他貢獻。這種開放和協作的開發模式使得Linux迅速發展並成為一個強大的操作系統。**

* **隨著時間的推移，Linux核心開發者和貢獻者形成了一個廣泛的社區，並創建了各種基於Linux核心的操作系統發行版，如Ubuntu、Debian、Fedora、CentOS等。這些發行版提供了不同的用戶界面、軟件包管理系統和其他特性，以滿足不同用戶的需求。**

* **Linux的發源可以說是一個由個人項目演變為全球社區驅動的開源軟件成功故事。今天，Linux在伺服器、桌面電腦、智能手機、物聯網設備等領域廣泛使用，並且持續進化和發展。**


## 1


---
### 防火牆
* **systemctl stop firewalld 開機不啟動**

* **systemctl disable firewalld 開機啟動**

* **systemctl status firewalld 檢查防火牆**

![](https://i.imgur.com/haeqFfn.png)


---

### 外部連線

* **systemctl start sshd 開啟SSH**

* **systemctl status sshd**
![](https://i.imgur.com/k8lJI1E.png)


---

### 建構在網頁上
```
systemctl start httpd
systemctl status httpd
cd /var/www/html
echo "hi" > hi.htm
```

![](https://i.imgur.com/3P1447B.png)



### **linux 安裝軟體**

`yum install 軟件`
 
### **卸載**

`yum remove`

<br/>
    
**-y** = yes

<br/>

**wget** => 到瀏覽器對應的位置 下載該檔案
<br/>


### **echo $?**

![](https://i.imgur.com/bhQkk9o.png)

= 0 屬於工作正常 = 4 為不正常

<br/>
 
管理系統使用=>超級使用者

<br/>

退回一般使用者

`exit`

`ls 顯示當前目錄與檔案`

bash ....

### 編輯檔案

vim 檔名.py 建立python檔 並編輯

輸入 **i a o r** 進入編輯模式

如果要儲存 首先輸入 esc 在打:wq 儲存

![](https://i.imgur.com/a2pXXfB.jpg)

<br/>

### 安裝Miniconda3 & 建立Python環境

python 檔名.py 執行檔案

conda init

conda create -n mypython3.10 python=3.10

![](https://i.imgur.com/Lgoujrr.png)

## 2

linux 磁碟分割兩部分

**ctrl + a** => 跳到最前面

**ctrl + e** => 跳到最後面

**tab** => 補齊後面文字

**touch 檔名**   => 更改檔案時間戳記(產生空白檔案)

**clear** => 清除終端上的畫面

**cat 檔名**  => 看檔案內容

**echo " " > 檔名**  => 存內容

**chmod +x 檔名**  => 賦予權限

./檔名 

**(new)systemd 第一支被執行的程式
(old)init 第一支被執行的程式**

**process id** => 行程

**grub** => 預測開機管理系統

修改密碼 需進入單人模式  https://www.unixmen.com/reset-root-password-centos-7/

dmesg | more   

| = 管道 = pipe

`systemctl status httpd` 偵測伺服器有無啟動

(也能偵測伺服器有無啟動) `netstat -tunpl | grep port`
沒跳出來 -> httpd沒啟動

0.0.0 => **任一介面的ip**

`uname ` **顯示使用作業系統**

`uname -a` **完整資訊**

`uname -r` **kernel資訊**

`hostnamectl set-hostname 新名稱 `   更改主機名稱

![](https://i.imgur.com/Yv2xAwb.jpg)
basn 更新

`ctrl + c`  中斷程式
`ctrl + z ` 暫時停止程式   恢復按fg(foreground)

**jobs** 查看所有暫停程式 **fg 1** 恢復第一個暫停程式

## 3

**FAT16 FAT32 EXFAT NTFS** 屬於 WINDOWS系統

sda 是一種硬碟 a-z照順序 sda1 數字代表分割區

var資料夾  放可變動內容 (**網路伺服器 檔案伺服器**)

**動態函式庫** => 程式編譯時檔案較小 需搭配靜態函式庫
**靜態函式庫** => 直接編譯到執行檔

```
函式庫檔名大多以lib開頭
檔名.a 屬於靜態函式庫
檔名.so 屬於動態函式庫
```

**mount **掛載

**resolv.conf 管理系統dns伺服器**

-re-r--r-- owner group vother

`ls -l test`
`ls -l -d test` 加上-d才能看到該資料夾的屬性

`ls -l -h` 將數字轉換成幾k


-r = recursive dirl =directly

**快速產生檔案** => 可以使用{a..d}的方式 產生四個檔案

**tree + 資料夾**   方便查看檔案

更改檔名 -f => mv 舊名 新名

參數  => 強制執行

-i = inquery(詢問)

檔案合併 => `cat 檔1 檔2 > 檔3`

`head -n 3` => 列印檔案前三行

`tail -n 3` => 列印檔案後三行
 
>> 追加(append)

## 4

link 分兩種 hard link 和 symbolic link

![](https://i.imgur.com/Yl0dfza.png)

### hard link

![](https://i.imgur.com/PMIn5B8.jpg)

### symbolic link

![](https://i.imgur.com/aYc8Pe9.jpg)

windows下捷徑可以連結到任意的檔案或資料夾

centos 7 使用 **xfs 檔案系統**

**ext3 比 ext2 多 日誌功能**

meta data 描述真正檔案得屬性

inode 記錄檔案所有資訊

(重要)stat 檔名 => **查看檔案更詳細的內容**

**which** 找尋執行檔所在位置

**su - tom**從一般的user進行切換

</br>

### stat裡面的內容

  **1. (重要)access 存取**
 
  **2. modify 修改內容**
 
  **3. change 除了內容改變會變動外,屬性變動也會變更時間**
  </br>

ls -l 指令裡的屬性時間**屬於modify**

`timedatectl set-timezone` 設定時間

```
ls -i 檔案 => 查看檔案的inode

ln data hlink    ln data slink

ls -l hlink slink data
```

![](https://i.imgur.com/4FvOAiQ.png)

 符號連接權限全打開 無法更改屬性

 硬連接則可以
 
 </br>

只要可執行權限就是執行檔

(重要)file 檔案 => 查看檔案類型

**內容擁有 elf 64-bit lsb shared object x86-64** 可能屬於c語言編譯過的程式碼

gedit .bashrc 在裡面加上 export PATH=$PATH:/home/user/cmd

dd if=/dev/zero of=100M bs=1M count=1M

df -h

/$ => end with



## 5

![](https://i.imgur.com/pwdZS38.jpg)

du -h 顯示所有的檔案 最後一行為全部檔案加總起來的大小
-s 顯示最後一行

![](https://i.imgur.com/Oi14emM.jpg)

![](https://i.imgur.com/bFMAB0a.jpg)

du -h --max-depth -1 檔名

![](https://i.imgur.com/Jj5KKEj.jpg)

0 標準輸入 1 標準輸出 2 標準錯誤輸出

![](https://i.imgur.com/6tWn1UM.jpg)

![](https://i.imgur.com/wdTmVUN.jpg)

1可省 2不可省

執行為正確放在 a.txt 錯誤放在 b.txt

![](https://i.imgur.com/DLsmf4R.jpg)


不管正確或錯誤都在同一個檔案裏面(c.txt)


![](https://i.imgur.com/XvgfADY.jpg)

順序不可對調

![](https://i.imgur.com/kSmAELg.jpg)

不管執行結果如何都不會顯示在螢幕上 /dev/null

![](https://i.imgur.com/83WUpAL.jpg)

新增管道

![](https://i.imgur.com/To4DRIB.jpg)

![](https://i.imgur.com/8JGyIsX.jpg)

 #>取代 >>追加

![](https://i.imgur.com/NN44rho.jpg)

B指令要可以處理standard input 
![](https://i.imgur.com/JMN3Igk.png)

locate 指令

![](https://i.imgur.com/N1Tb8td.jpg)

 find 指令學習網站

https://blog.gtwang.org/linux/unix-linux-find-command-examples/

找出檔案名稱不管大小寫

![](https://i.imgur.com/qKOELrq.jpg)

 find 找出檔案並刪除
 
 ![](https://i.imgur.com/TvfwIDH.jpg)


## 6

https://blog.gtwang.org/linux/linux-grep-command-tutorial-examples/

通佩符 => 匹配檔案名稱所用
 
 a* 匹配出 a aa aaa (重複0次到多次)

 a? 匹配出 a aa (重複0,1次)

 a+ 匹配出 aa aaa aaaa (重複1次到多次)
 
 

---


正則表達式 => 匹配檔案內容

 


linux三劍客

 **grep "關鍵字"** "檔案或檔案位置" => 尋找檔案中包含關鍵字的內容
 
 ![](https://i.imgur.com/YzEJfUF.jpg)
 
** ls "檔案或檔案位置" | grep "關鍵字" 有一樣的效果**
</br>

  *  grep 後面加 -n 可以顯示行號
 
  *  grep 後面加 -i 可以不分大小寫
 
  *  grep 後面加 -v 篩選出除了含有關鍵字的內容
   
  *  grep 後面加 -r 尋找子目錄和底下目錄裡檔案中所有包含符合關鍵字的內容(遞迴用法)
 
  *  grep -A 數字 => 查看前多少行
 
  *  grep -B 數字 => 查看後多少行

</br>
    
 ![](https://i.imgur.com/XFs1DTb.jpg)
 

---


  \ 指令 把alias功能關閉

  兩者也能合併如 -i -n   -in -ni   -n -i

 awk

 sed

alias => 指令功能參數

真正的密碼存放在 /etc/shadow 裡

**nologin**裡為系統帳戶

![](https://i.imgur.com/SdBqHdy.jpg)

wc(word count)

</br>

"^$" 空白行

-v "^#" 去掉註解
![](https://i.imgur.com/ULUWZ15.jpg)

</br>

![](https://i.imgur.com/UKUjhsb.png)
**文字編輯器(vim)中** => :q! =>放棄編輯離開

**/dev/hda** => hda的a指的是第一顆硬碟 接著就以b c...做排列

## 7

**useradd**   新增使用者

新增的使用者放在 etc/passwd 裡 但沒 password   password **放在 etc/shadow** 中不過密碼為雜湊過

**root uid = 0 (重要)**

user uid從1000開始 **依序1001 1002...**

```
系統帳號的shell 為 sbin/nologin

普通帳號的 shell 為 bin/bash
```

password檔 **shadow檔 極為重要**

### **useradd 選項**

*  -c 註解

*  -g
 
*  -u uid

![](https://hackmd.io/_uploads/H1bKANwN2.png)

直接設定密碼 echo "使用者" | passwd --stdin 使用者

密碼前面**加入! 可使檔案無法使用**

```
使所有人都不可執行 => chmod g-x a
使所有人都可執行 => chmod a+x a
把編寫權限拿掉 =>
```

查看資料夾本身權限 =>參數加上 -d

## 8

## 9


權限裡的mask => 保護策略

effective =>有效權限

* owner => read
* group => write
* others => execute

考試重點 9-2 9-4 scheduling => 排程


---


`firewall -cmd --get-zones` =>查看有哪些被選擇 zones




`firewall -cmd --get-active-zones` =>正在運行的zones是哪些


![](https://hackmd.io/_uploads/HkyD7oYB3.jpg)

</br>


新增port2222

![](https://hackmd.io/_uploads/Byrk5iYH2.jpg)

觀察是否在22port 

![](https://hackmd.io/_uploads/r1_ZciFSh.jpg)


---


白名單 => 有在名單就放行

**tar -czvf myfiles. tar.gz file** => 打包並壓縮檔案(可能會考)

**sudo timedate set-timezone 地區** => 更改地區時間

## 10

cluster 集群

sync 同步

ntpdate 

`!998`  => 重複第998個指令

history => 列出所有指令

var資料夾 放著**大量log檔**



---

### 如果安裝完server,卻無法連接

 1.systemctl status 伺服器  查看狀態, 如果已經running,但還是無法連接

 2.查看防火牆,selinux

 3.檢查 port number


---

### 排成設定檔案

 設定時間=> * * * * * 依序 => **分鐘 小時 天 月 星期 (考試重點)**
 
 > ![](https://hackmd.io/_uploads/Sy2KC0GUn.png)
 
 </br>

 > ![](https://hackmd.io/_uploads/BJPpAAfI2.png)

磁碟配額

* **hard limit 硬性規定**
* **soft limit 軟性提醒**



