---
# System prepended metadata

title: W12 (2023/11/28)
tags: ['2023_1', Linux]

---

# W12 (2023/11/28)

## 課本

### 系統服務類型

1. 持續開在機器裡, 隨時能使用
之前使用的 ssh、httpd...都屬於這類

2. 有人使用時, 代理(agent) 通知伺服器, 此時才起動
![photo_2023-12-13_17-43-54](https://hackmd.io/_uploads/Hk8ZpxPLp.jpg)

## 簡單的server

**echo server**

[Linux 建立自訂 Systemd 服務教學與範例](https://blog.gtwang.org/linux/linux-create-systemd-service-unit-for-python-echo-server-tutorial-examples/)

### 測試

建立一個 python 檔案並執行
```python=
import socket

# 建立 socket
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 綁定所有網路介面的 9000 連接埠
serv.bind(('0.0.0.0', 9000))

# 開始接受 client 連線
serv.listen()

while True:

    # 接受 client 連線
    conn, addr = serv.accept()
    print('Client from', addr)

    while True:

        # 接收資料
        data = conn.recv(1024)

        # 若無資料則離開
        if not data: break

        # 傳送資料
        conn.send(data)

    conn.close()
    print('Client disconnected')
```

![image](https://hackmd.io/_uploads/SJPnB-DIp.png)

### 變成 server

* 把剛剛的 python 檔建立在 /opt 底下
```bash
$ ls /opt
echo_server.py
```
* 建立這個 server 的設定檔
`/etc/systemd/system/echo_server.service`

```bash=
[Unit]
Description=Echo Server

[Service]
Type=simple
ExecStart=/opt/echo_server.py    # 如果放的檔案位置不同要改
Restart=always

[Install]
WantedBy=multi-user.target
```
* 改權限
`sudo chmod 644 /etc/systemd/system/echo_server.service`
* 重啟
```bash=
sudo systemctl daemon-reload
sudo systemctl start echo_server
sudo systemctl status echo_server
```
* 連線
![image](https://hackmd.io/_uploads/Sk9FFbD8p.png)

## telnet

* 安裝
```bash=
sudo yum install -y telnet-server
sudo yum install -y telnet
sudo yum install -y xinetd
```
* 啟動
```bash=
sudo systemctl enable xinetd.service
sudo systemctl enable telnet.socket
sudo systemctl start telnet.socket
sudo systemctl start xinetd
```
* putty 連線
![image](https://hackmd.io/_uploads/SymEJfw8a.png)

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

---
