diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 1de37fd..4dfcf80 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -41,17 +41,29 @@ "state": { "type": "canvas", "state": { - "file": "00. Inbox/樹莓派.canvas", + "file": "00. Inbox/樹莓派/00. 樹莓派.canvas", "viewState": { - "x": -1228.1540864748197, - "y": 1633.2719797648233, - "zoom": -0.09942106314468102 + "x": 380, + "y": 90, + "zoom": -0.16175106999661237 } } } + }, + { + "id": "676c0fe54b62a092", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "00. Inbox/Linux/journalctl.md", + "mode": "source", + "source": true + } + } } ], - "currentTab": 2 + "currentTab": 3 } ], "direction": "vertical" @@ -117,7 +129,7 @@ "state": { "type": "backlink", "state": { - "file": "00. Inbox/樹莓派.canvas", + "file": "00. Inbox/Linux/journalctl.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -142,7 +154,7 @@ "state": { "type": "outline", "state": { - "file": "00. Inbox/樹莓派.canvas" + "file": "00. Inbox/Linux/journalctl.md" } } }, @@ -172,7 +184,7 @@ "state": { "type": "file-properties", "state": { - "file": "00. Inbox/樹莓派.canvas" + "file": "00. Inbox/Linux/journalctl.md" } } } @@ -215,11 +227,23 @@ "periodic-notes:Open today": false } }, - "active": "069e76e47c814366", + "active": "676c0fe54b62a092", "lastOpenFiles": [ + "00. Inbox/樹莓派/00. 樹莓派.canvas", + "00. Inbox/樹莓派/安裝.md", + "00. Inbox/樹莓派/設定Cloudflare DDNS.md", + "00. Inbox/樹莓派/設定日誌大小.md", + "00. Inbox/樹莓派/raspi-config.md", + "00. Inbox/樹莓派/bashrc.md", + "00. Inbox/樹莓派/更新與安裝工具.md", + "00. Inbox/Linux/journalctl.md", + "00. Inbox/樹莓派/ddns.sh.md", + "00. Inbox/Linux/crontab.md", + "00. Inbox/Linux", + "00. Inbox/未命名.md", + "00. Inbox/樹莓派", "00. Inbox/systemd.md", "00. Inbox/01. TODO.md", - "00. Inbox/樹莓派.canvas", "attachments/Pasted image 20240111231507.png", "00. Inbox/SSIM.md", "05. 資料收集/Tool Setup/Software/vim.md", @@ -239,16 +263,6 @@ "05. 資料收集/核心肌群訓練.md", "05. 資料收集/時間不一致性.md", "05. 資料收集/每週外食.md", - "05. 資料收集/固定型心態.md", - "05. 資料收集/Linux/CLI/cut.md", - "05. 資料收集/Linux/CLI/scp.md", - "05. 資料收集/Linux/Programming.md", - "03. 個人:Travel/20230214 - 日本福岡旅遊.md", - "00. Inbox/00. Inbox.md", - "README.md", - "00. Inbox/Project Zomboid.md", - "02. 個人:Daily/2024-01-01(週一).md", - "02. 個人:Daily/2023/2023年度目標.md", "02. 個人:Daily/2024", "02. 個人:Daily/2023/12", "attachments/Pasted image 20231225164717.png", @@ -266,8 +280,6 @@ "02. 個人:Daily/2023/08", "02. 個人:Daily/2023/05", "00. Inbox/My Mindmap.canvas", - "05. 資料收集/Tool Setup/Software/diskstation/share/Tools/字型", - "05. 資料收集/Tool Setup/Software/diskstation/share/Tools", - "05. 資料收集/Tool Setup/Software/diskstation/share" + "05. 資料收集/Tool Setup/Software/diskstation/share/Tools/字型" ] } \ No newline at end of file diff --git a/00. Inbox/Linux/crontab.md b/00. Inbox/Linux/crontab.md new file mode 100644 index 0000000..6ca105c --- /dev/null +++ b/00. Inbox/Linux/crontab.md @@ -0,0 +1,59 @@ +### 加入 +使用`crontab -e`,然後加入這一行: +`*/1 * * * * /home/awin/script/ddns.sh` + +### 說明 +![[Pasted image 20240111231507.png]] +依序是 **分鐘,   小時,   日期,   月份,    星期,   command** +參數為 0-59,   0-23,   1-31,  1-21,   0-6,   需要執行的command +**※ 星期參數為 0 代表星期日** + +- 【*】:星號,代表任何時刻都接受的意思 +- 【,】:逗號,代表分隔時段。例如:30 9,17 * * * command,代表早上 9 點半和下午五點半都執行 command。 +- 【-】:減號,代表一段時間範圍。例如:15 9-12 * * * command,代表從 9 點到 12 點的每個 15 分都執行 command。 +- 【/n】:斜線,n 代表數字,表示每個 n 單位間隔。例如:*/5 * * * * command,代表每隔 5 分鐘執行一次 command。 + +還有一些人性化的參數,一次取代全部五個數字參數 +- 【@reboot】 :僅在開機的時候執行一次。 +- 【@yearly】 :一年執行一次,和0 0 1 1 * command效果一樣。 +- 【@annually】:(和@yearly一樣) +- 【@monthly】:一個月執行一次,和0 0 1 * * command效果一樣。 +- 【@weekly】:一個星期執行一次,和0 0 * * 0 command效果一樣。 +- 【@daily】:每天執行,和0 0 * * * command效果一樣。 +- 【@midnight】:(和@daily一樣) +- 【@hourly】 :每小時執行,和0 * * * * command效果一樣。 + +### 範例 +- 每 5 分鐘執行一次: + - `*/5 * * * *  root    /usr/libexec/atrun` +- 每 5 小時執行一次 + - `​* */5 * * * root    /usr/libexec/atrun` +- 每天 AM 5:00 執行指令(星號與星號之間要有空隔) + - `​00 05   * * *  username /bin/bash /路徑/command` +- 1 至 20 號每天執行一次 + - ​`0 1 1-20  * * root    /usr/libexec/atrun` +- 當分針移到第 5 分時,執行此 cron + - `​5 * * * * root    /usr/libexec/atrun` +- 當時針移到 1 點 1 分時,執行此 cron + - ​`1 1 * * * root    /usr/libexec/atrun` +- 每週一的 1 點 1 分,執行 + - `​1 1 * * 1 root    /usr/libexec/atrun` +- 2 月 29 日時針到 1 點 1 分,執行 + - ​`1 1 29 2 * root    /usr/libexec/atrun` +- 8 點到 16 點每 5 分鐘執行一次 cron + - `​/5 8-16 * * *   root    /usr/libexec/atrun` + +### crontab 命令 +#### 啟動 +`sudo service cron start` + +#### 重新啟動 +`/etc/init.d/cron restart` + +#### 查詢service狀態 +`sudo /etc/init.d/cron status` + +#### 編輯 crontab +`crontab -e` + + diff --git a/00. Inbox/Linux/journalctl.md b/00. Inbox/Linux/journalctl.md new file mode 100644 index 0000000..e6a76a2 --- /dev/null +++ b/00. Inbox/Linux/journalctl.md @@ -0,0 +1,125 @@ +## 看log +Raspberry Pi 4沒有`/var/log/syslog`,要使用`journalctl`。 +```bash +journalctl +``` +Or +```bash +journalctl | grep SOMETHING +``` + +### 看系統訊息 +```bash +journalctl -p 0 +``` + +#### Error code意思 +``` +0: 紧急情况 +1: 警报 +2: 危急 +3: 错误 +4: 警告 +5: 通知 +6: 信息 +7:调试 +``` + +### 看開機log +```bash +journalctl --list-boots +``` + +- 第一個數字顯示的是journald 的唯一的啟動追蹤號碼,你可以在下一個命令中使用它來分析該特定的啟動。 +- 第二個數字是啟動ID,你也可以在指令中指定。 +- 接下來的兩個日期、時間組合是儲存在對應文件中的日誌的時間。如果你想找出某個特定日期、時間的日誌或錯誤,這就非常方便了。 + +例如: +```bash +journalctl -b -45 +``` +Or +```bash +journalctl -b 8bab42c7e82440f886a3f041a7c95b98 +``` + +也可以使用 `-x` 選項,在顯示器上加入systemd 錯誤訊息的解釋。在某些情況下,這是個救命稻草。例: +```bash +journalctl -xb -p 3 +``` + +### 看某一特定時間、日期的日誌記錄 +使用 `--since` 選項與 `yesterday`、`today`、`tomorrow` 或 `now` 組合。 + +以下是一些不同指令的範例。你可以根據你的需求修改它們。它們是不言自明的。以下命令中的日期、時間格式為 `"YYYY-MM-DD HH:MM:SS"` +```bash +journalctl --since "2020-12-04 06:00:00" +journalctl --since "2020-12-03" --until "2020-12-05 03:00:00" +journalctl --since yesterday +journalctl --since 09:00 --until "1 hour ago" +``` + +### 看內核特定的記錄 +```bash +journalctl -k +``` + +### 過濾出某個systemd 服務單元的特定日誌 +例如,如果要查看 NetworkManager 服務的日誌 +```bash +journalctl -u NetworkManager.service +``` + +如果不知道service name,看[[systemd#列出系統中的 systemd service]] + +### 查看使用者、群組的日誌 +```bash +id -u debugpoint # 先找出使用者的uid +journalctl _UID=1000 --since today +``` + +### 查看可執行檔的日誌 +```bash +journalctl /usr/bin/gnome-shell --since today +``` + +### 看log佔用的磁碟空間 +```bash +journalctl --disk-usage +``` + +### 清除日誌 +#### 手動清除 +```bash +sudo journalctl --flush --rotate # 將所有日誌歸檔 +sudo journalctl --vacuum-time=7d # 只保留最近7天的日誌 +sudo journalctl --vacuum-time=1s # 只保留最近1秒的日誌 +``` +或者設定日誌的大小 +```bash +sudo journalctl --vacuum-size=400M # 保留最後400M +``` + +#### 自動清除 +修改`/etc/systemd/journald.conf`,裡面有下面幾個設定項: +- `SystemMaxUse`: 指定日志在持久性存储中可使用的最大磁盘空间。例:`SystemMaxUse=500M` +- `SystemKeepFree`: 指定在将日志条目添加到持久性存储时,日志应留出的空间量。例:`SystemKeepFree=100M` +- `SystemMaxFileSize`: 控制单个日志文件在被轮换之前在持久性存储中可以增长到多大。例:`SystemMaxFileSize=100M` +- `RuntimeMaxUse`: 指定在易失性存储中可以使用的最大磁盘空间(在 /run 文件系统内)。例:`RuntimeMaxUse=100M` +- `RuntimeKeepFree`: 指定将数据写入易失性存储(在 /run 文件系统内)时为其他用途预留的空间数量。例:`RuntimeMaxUse=100M` +- `RuntimeMaxFileSize`: 指定单个日志文件在被轮换之前在易失性存储(在 /run 文件系统内)所能占用的空间量。例:`RuntimeMaxFileSize=200M` + +修改後記得重啟`journalctl`: +```bash +sudo systemctl restart systemd-journald +``` + +也請記得[[確認日誌的完整性]] + +### 確認日誌的完整性 +```bash +journalctl --verify +``` + +### 參考 +- [系統運作|如何使用journalctl 檢視和分析systemd 日誌(附實例)](https://linux.cn/article-15544-1.html) \ No newline at end of file diff --git a/00. Inbox/樹莓派.canvas b/00. Inbox/樹莓派.canvas deleted file mode 100644 index ee50e45..0000000 --- a/00. Inbox/樹莓派.canvas +++ /dev/null @@ -1,16 +0,0 @@ -{ - "nodes":[ - {"id":"2379c5036a2ef1af","type":"text","text":"# 設定\n## 更新與安裝\n1. `sudo apt update`\n2. `sudo apt upgrade -y`\n3. `sudo apt install dnsutils`\n\n## `raspi-config`\n1. 打開ssh與vnc\n2. 開機進入console\n\n## `~/.bashrc`\n```bash\nalias ll='ls -al'\nalias pwoff='sudo shutdown -h now'\n```","x":-60,"y":-135,"width":371,"height":315}, - {"id":"e5bba63eeea5211f","type":"text","text":"# 安裝\n1. 到[官網](https://www.raspberrypi.com/software/)下載`imager`\n2. 記得在`imager`裡面設定ssh public key","x":-440,"y":-47,"width":340,"height":140}, - {"id":"3a39140e3c8408cf","type":"text","text":"## 設定 static IP\n**用router來固定ip,以下方法沒用**\n\n1. `sudo vim /etc/dhcpcd.conf`\n2. 填入\n```\ninterface wlan0\nstatic ip_address=192.168.1.21/24\nstatic routers=192.168.1.1\nstatic domain_name_servers=168.95.192.1\n```\n3. reboot","x":-60,"y":200,"width":371,"height":280}, - {"id":"6184baf71c6585ff","type":"text","text":"## crontab\n### 加入\n使用`crontab -e`,然後加入這一行:\n`*/1 * * * * /home/awin/script/ddns.sh`\n\n### 說明\n![[Pasted image 20240111231507.png]]\n依序是 **分鐘,   小時,   日期,   月份,    星期,   command**\n參數為 0-59,   0-23,   1-31,  1-21,   0-6,   需要執行的command\n**※ 星期參數為 0 代表星期日**\n\n- 【*】:星號,代表任何時刻都接受的意思\n- 【,】:逗號,代表分隔時段。例如:30 9,17 * * * command,代表早上 9 點半和下午五點半都執行 command。\n- 【-】:減號,代表一段時間範圍。例如:15 9-12 * * * command,代表從 9 點到 12 點的每個 15 分都執行 command。\n- 【/n】:斜線,n 代表數字,表示每個 n 單位間隔。例如:*/5 * * * * command,代表每隔 5 分鐘執行一次 command。\n\n■ 還有一些人性化的參數,一次取代全部五個數字參數\n- 【@reboot】 :僅在開機的時候執行一次。\n- 【@yearly】 :一年執行一次,和0 0 1 1 * command效果一樣。\n- 【@annually】:(和@yearly一樣)\n- 【@monthly】:一個月執行一次,和0 0 1 * * command效果一樣。\n- 【@weekly】:一個星期執行一次,和0 0 * * 0 command效果一樣。\n- 【@daily】:每天執行,和0 0 * * * command效果一樣。\n- 【@midnight】:(和@daily一樣)\n- 【@hourly】 :每小時執行,和0 * * * * command效果一樣。\n\n### 範例\n- 每 5 分鐘執行一次:\n - `*/5 * * * *  root    /usr/libexec/atrun`\n- 每 5 小時執行一次\n - `​* */5 * * * root    /usr/libexec/atrun`\n- 每天 AM 5:00 執行指令(星號與星號之間要有空隔)\n - `​00 05   * * *  username /bin/bash /路徑/command`\n- 1 至 20 號每天執行一次\n - ​`0 1 1-20  * * root    /usr/libexec/atrun`\n- 當分針移到第 5 分時,執行此 cron\n - `​5 * * * * root    /usr/libexec/atrun`\n- 當時針移到 1 點 1 分時,執行此 cron\n - ​`1 1 * * * root    /usr/libexec/atrun`\n- 每週一的 1 點 1 分,執行\n - `​1 1 * * 1 root    /usr/libexec/atrun`\n- 2 月 29 日時針到 1 點 1 分,執行\n - ​`1 1 29 2 * root    /usr/libexec/atrun`\n- 8 點到 16 點每 5 分鐘執行一次 cron\n - `​/5 8-16 * * *   root    /usr/libexec/atrun`\n\n### crontab 命令\n#### 啟動\n`sudo service cron start`\n\n#### 重新啟動\n`/etc/init.d/cron restart`\n\n#### 查詢service狀態\n`sudo /etc/init.d/cron status`\n\n#### 編輯 crontab\n`crontab -e`\n\n\n","x":-731,"y":620,"width":631,"height":430}, - {"id":"6ad2c15172b3b925","type":"text","text":"## 設定 DDNS of Cloudflare\n1. 準備`/home/awin/script/ddns.sh`\n2. 把script加入craontab\n\n","x":-60,"y":624,"width":371,"height":136}, - {"id":"89db003eaa4162c9","type":"text","text":"## `/home/awin/script/ddns.sh`\n```bash\n#!/bin/bash\nCF_ACCESS_TOKEN=033xQP4_ZpTq3sSkeftz5J6BWw_R9eoDNTba7zfH\nCF_ZONE_ID=1d6a623d1780c31544fc86f718dac16e\nURLS=('awin.one'\n 'blog.awin.one'\n 'ftp.awin.one'\n 'git.awin.one',\n 'storj.awin.one')\nCF_RECORD_IDS=('d67b2a1b3d7cd520b8e8dad2cb522460'\n '69dcc0bd619b1a3d4a71458faff2aa50'\n 'bd397d9779d42c0b92c9c9c47b765769'\n '4eccb48e85f2daa8fefeb92c8cb4b4ee'\n '216d631bc860c6a11b62e3a1003f3e3e')\n\nINTERNET_IP=`curl -s http://ipv4.icanhazip.com`\nINTERFACE_IP=`ip address show ppp0 | grep ppp0 | grep global | awk '{print$2}'`\nDNS_RECORD_IP=`dig +short \"${URLS[0]}\" | grep -Eo '([0-9]{1,3}\\.){3}[0-9]{1,3}' | awk 'NR==1{print}'`\nNOW_TIME=`date`\n\nif [ \"$INTERNET_IP\" != \"$DNS_RECORD_IP\" ]\nthen\n echo \"Renew IP: ${DNS_RECORD_IP} to ${INTERNET_IP}\"\n echo \"${NOW_TIME}: Renew IP: ${DNS_RECORD_IP} to ${INTERNET_IP}\" > /home/awin/log/ddns.log\n for ((i = 0; i < ${#URLS[@]}; i++)); do\n curl -X PUT \"https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${CF_RECORD_IDS[$i]}\" \\\n -H \"Authorization: Bearer ${CF_ACCESS_TOKEN}\" \\\n -H \"Content-Type: application/json\" \\\n --data '{\"type\":\"A\",\"name\":\"'${URLS[$i]}'\",\"content\":\"'${INTERNET_IP}'\",\"ttl\":120,\"proxied\":false}'\n done\nelse\n echo \"No change: ${INTERNET_IP}\"\n echo \"${NOW_TIME}: No change: ${INTERNET_IP}\" > /home/awin/log/ddns.log\nfi\n```\n\n### 參考\n- [5 分鐘整合 Cloudflare API 實做 Cloudflare DDNS 動態 IP 對應網址](https://blog.toright.com/posts/7333/cloudflare-ddns)\n- [自架 DDNS 教學:用 Cloudflare API 達成多域名同步更新! | by Rex | Medium](https://blog.rexyuan.com/%E7%94%A8-cloudflare-dns-api-%E4%BE%86%E9%81%94%E6%88%90-ddns-adaee3c5a84d)","x":-1660,"y":350,"width":886,"height":700}, - {"id":"84c3e0d9a25b9cfd","type":"text","text":"## 看log\nRaspberry Pi 4沒有`/var/log/syslog`,要使用`journalctl`。\n```bash\njournalctl\n```\nOr \n```bash\njournalctl | grep SOMETHING\n```\n\n### 看系統訊息\n```bash\njournalctl -p 0\n```\n\n#### Error code意思\n```\n0: 紧急情况\n1: 警报\n2: 危急\n3: 错误\n4: 警告\n5: 通知\n6: 信息\n7:调试\n```\n\n### 看開機log\n```bash\njournalctl --list-boots\n```\n\n- 第一個數字顯示的是journald 的唯一的啟動追蹤號碼,你可以在下一個命令中使用它來分析該特定的啟動。\n- 第二個數字是啟動ID,你也可以在指令中指定。\n- 接下來的兩個日期、時間組合是儲存在對應文件中的日誌的時間。如果你想找出某個特定日期、時間的日誌或錯誤,這就非常方便了。\n\n例如:\n```bash\njournalctl -b -45\n```\nOr\n```bash\njournalctl -b 8bab42c7e82440f886a3f041a7c95b98\n```\n\n也可以使用 `-x` 選項,在顯示器上加入systemd 錯誤訊息的解釋。在某些情況下,這是個救命稻草。例:\n```bash\njournalctl -xb -p 3\n```\n\n### 看某一特定時間、日期的日誌記錄\n使用 `--since` 選項與 `yesterday`、`today`、`tomorrow` 或 `now` 組合。\n\n以下是一些不同指令的範例。你可以根據你的需求修改它們。它們是不言自明的。以下命令中的日期、時間格式為 `\"YYYY-MM-DD HH:MM:SS\"`\n```bash\njournalctl --since \"2020-12-04 06:00:00\"\njournalctl --since \"2020-12-03\" --until \"2020-12-05 03:00:00\"\njournalctl --since yesterday\njournalctl --since 09:00 --until \"1 hour ago\"\n```\n\n### 看內核特定的記錄\n```bash\njournalctl -k\n```\n\n### 過濾出某個systemd 服務單元的特定日誌\n例如,如果要查看 NetworkManager 服務的日誌\n```bash\njournalctl -u NetworkManager.service\n```\n\n如果不知道service name,看[[systemd#列出系統中的 systemd service]]\n\n### 查看使用者、群組的日誌\n```bash\nid -u debugpoint # 先找出使用者的uid\njournalctl _UID=1000 --since today\n```\n\n### 查看可執行檔的日誌\n```bash\njournalctl /usr/bin/gnome-shell --since today\n```\n\n### 看log佔用的磁碟空間\n```bash\njournalctl --disk-usage\n```\n\n### 清除日誌\n#### 手動清除\n```bash\nsudo journalctl --flush --rotate # 將所有日誌歸檔\nsudo journalctl --vacuum-time=7d # 只保留最近7天的日誌\nsudo journalctl --vacuum-time=1s # 只保留最近1秒的日誌\n```\n或者設定日誌的大小\n```bash\nsudo journalctl --vacuum-size=400M # 保留最後400M\n```\n\n#### 自動清除\n修改`/etc/systemd/journald.conf`,裡面有下面幾個設定項:\n- `SystemMaxUse`: 指定日志在持久性存储中可使用的最大磁盘空间。例:`SystemMaxUse=500M`\n- `SystemKeepFree`: 指定在将日志条目添加到持久性存储时,日志应留出的空间量。例:`SystemKeepFree=100M`\n- `SystemMaxFileSize`: 控制单个日志文件在被轮换之前在持久性存储中可以增长到多大。例:`SystemMaxFileSize=100M`\n- `RuntimeMaxUse`: 指定在易失性存储中可以使用的最大磁盘空间(在 /run 文件系统内)。例:`RuntimeMaxUse=100M`\n- `RuntimeKeepFree`: 指定将数据写入易失性存储(在 /run 文件系统内)时为其他用途预留的空间数量。例:`RuntimeMaxUse=100M`\n- `RuntimeMaxFileSize`: 指定单个日志文件在被轮换之前在易失性存储(在 /run 文件系统内)所能占用的空间量。例:`RuntimeMaxFileSize=200M`\n\n修改後記得重啟`journalctl`:\n```bash\nsudo systemctl restart systemd-journald\n```\n\n也請記得[[確認日誌的完整性]]\n\n### 確認日誌的完整性\n```bash\njournalctl --verify\n```\n\n### 參考\n- [系統運作|如何使用journalctl 檢視和分析systemd 日誌(附實例)](https://linux.cn/article-15544-1.html)","x":-1659,"y":1180,"width":928,"height":640} - ], - "edges":[ - {"id":"f01be3b2d50be1dd","fromNode":"2379c5036a2ef1af","fromSide":"bottom","toNode":"3a39140e3c8408cf","toSide":"top"}, - {"id":"7ee9a7ffb58d8dd7","fromNode":"e5bba63eeea5211f","fromSide":"right","toNode":"2379c5036a2ef1af","toSide":"left"}, - {"id":"25b55a6eadd7d434","fromNode":"3a39140e3c8408cf","fromSide":"bottom","toNode":"6ad2c15172b3b925","toSide":"top"} - ] -} \ No newline at end of file diff --git a/00. Inbox/樹莓派/00. 樹莓派.canvas b/00. Inbox/樹莓派/00. 樹莓派.canvas new file mode 100644 index 0000000..f4c7816 --- /dev/null +++ b/00. Inbox/樹莓派/00. 樹莓派.canvas @@ -0,0 +1,18 @@ +{ + "nodes":[ + {"id":"e94c9e71b9aeaa89","type":"group","x":440,"y":-360,"width":400,"height":900,"label":"設定"}, + {"id":"d624199752cf24de","type":"text","text":"![[更新與安裝工具]]","x":460,"y":-340,"width":360,"height":120}, + {"id":"a63a5baed201beda","type":"text","text":"![[設定日誌大小]]","x":460,"y":160,"width":360,"height":180}, + {"id":"f210470376a4829d","type":"text","text":"![[設定Cloudflare DDNS]]","x":460,"y":370,"width":360,"height":150}, + {"id":"6e59f6b9f36b24e2","type":"text","text":"![[安裝]]","x":-80,"y":-37,"width":383,"height":177}, + {"id":"bc030994aafc5a3b","type":"text","text":"![[bashrc]]","x":460,"y":-37,"width":360,"height":177}, + {"id":"6875474760fafe7c","type":"text","text":"![[raspi-config]]","x":460,"y":-200,"width":360,"height":140} + ], + "edges":[ + {"id":"9683c15c63c167c0","fromNode":"6e59f6b9f36b24e2","fromSide":"right","toNode":"e94c9e71b9aeaa89","toSide":"left"}, + {"id":"af36558e6c250c94","fromNode":"d624199752cf24de","fromSide":"bottom","toNode":"6875474760fafe7c","toSide":"top"}, + {"id":"feff628bc758f1e4","fromNode":"6875474760fafe7c","fromSide":"bottom","toNode":"bc030994aafc5a3b","toSide":"top"}, + {"id":"f1a7af20d2d64873","fromNode":"bc030994aafc5a3b","fromSide":"bottom","toNode":"a63a5baed201beda","toSide":"top"}, + {"id":"64bd8b56a86d56af","fromNode":"a63a5baed201beda","fromSide":"bottom","toNode":"f210470376a4829d","toSide":"top"} + ] +} \ No newline at end of file diff --git a/00. Inbox/樹莓派/bashrc.md b/00. Inbox/樹莓派/bashrc.md new file mode 100644 index 0000000..54f538e --- /dev/null +++ b/00. Inbox/樹莓派/bashrc.md @@ -0,0 +1,5 @@ +## `~/.bashrc` +```bash +alias ll='ls -al' +alias pwoff='sudo shutdown -h now' +``` \ No newline at end of file diff --git a/00. Inbox/樹莓派/ddns.sh.md b/00. Inbox/樹莓派/ddns.sh.md new file mode 100644 index 0000000..e52bae1 --- /dev/null +++ b/00. Inbox/樹莓派/ddns.sh.md @@ -0,0 +1,40 @@ +## `/home/awin/script/ddns.sh` +```bash +#!/bin/bash +CF_ACCESS_TOKEN=033xQP4_ZpTq3sSkeftz5J6BWw_R9eoDNTba7zfH +CF_ZONE_ID=1d6a623d1780c31544fc86f718dac16e +URLS=('awin.one' + 'blog.awin.one' + 'ftp.awin.one' + 'git.awin.one', + 'storj.awin.one') +CF_RECORD_IDS=('d67b2a1b3d7cd520b8e8dad2cb522460' + '69dcc0bd619b1a3d4a71458faff2aa50' + 'bd397d9779d42c0b92c9c9c47b765769' + '4eccb48e85f2daa8fefeb92c8cb4b4ee' + '216d631bc860c6a11b62e3a1003f3e3e') + +INTERNET_IP=`curl -s http://ipv4.icanhazip.com` +INTERFACE_IP=`ip address show ppp0 | grep ppp0 | grep global | awk '{print$2}'` +DNS_RECORD_IP=`dig +short "${URLS[0]}" | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | awk 'NR==1{print}'` +NOW_TIME=`date` + +if [ "$INTERNET_IP" != "$DNS_RECORD_IP" ] +then + echo "Renew IP: ${DNS_RECORD_IP} to ${INTERNET_IP}" + echo "${NOW_TIME}: Renew IP: ${DNS_RECORD_IP} to ${INTERNET_IP}" > /home/awin/log/ddns.log + for ((i = 0; i < ${#URLS[@]}; i++)); do + curl -X PUT "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${CF_RECORD_IDS[$i]}" \ + -H "Authorization: Bearer ${CF_ACCESS_TOKEN}" \ + -H "Content-Type: application/json" \ + --data '{"type":"A","name":"'${URLS[$i]}'","content":"'${INTERNET_IP}'","ttl":120,"proxied":false}' + done +else + echo "No change: ${INTERNET_IP}" + echo "${NOW_TIME}: No change: ${INTERNET_IP}" > /home/awin/log/ddns.log +fi +``` + +### 參考 +- [5 分鐘整合 Cloudflare API 實做 Cloudflare DDNS 動態 IP 對應網址](https://blog.toright.com/posts/7333/cloudflare-ddns) +- [自架 DDNS 教學:用 Cloudflare API 達成多域名同步更新! | by Rex | Medium](https://blog.rexyuan.com/%E7%94%A8-cloudflare-dns-api-%E4%BE%86%E9%81%94%E6%88%90-ddns-adaee3c5a84d) \ No newline at end of file diff --git a/00. Inbox/樹莓派/raspi-config.md b/00. Inbox/樹莓派/raspi-config.md new file mode 100644 index 0000000..f0c7065 --- /dev/null +++ b/00. Inbox/樹莓派/raspi-config.md @@ -0,0 +1,3 @@ +## `raspi-config` +1. 打開ssh與vnc +2. 開機進入console \ No newline at end of file diff --git a/00. Inbox/樹莓派/安裝.md b/00. Inbox/樹莓派/安裝.md new file mode 100644 index 0000000..b572786 --- /dev/null +++ b/00. Inbox/樹莓派/安裝.md @@ -0,0 +1,5 @@ +1. 到[官網](https://www.raspberrypi.com/software/)下載`imager` +2. 記得在`imager`裡面設定 + 1. ssh public key + 2. WIFI + 3. account/password \ No newline at end of file diff --git a/00. Inbox/樹莓派/更新與安裝工具.md b/00. Inbox/樹莓派/更新與安裝工具.md new file mode 100644 index 0000000..b33928c --- /dev/null +++ b/00. Inbox/樹莓派/更新與安裝工具.md @@ -0,0 +1,3 @@ +1. `sudo apt update` +2. `sudo apt upgrade -y` +3. `sudo apt install dnsutils` \ No newline at end of file diff --git a/00. Inbox/樹莓派/設定Cloudflare DDNS.md b/00. Inbox/樹莓派/設定Cloudflare DDNS.md new file mode 100644 index 0000000..b00e39a --- /dev/null +++ b/00. Inbox/樹莓派/設定Cloudflare DDNS.md @@ -0,0 +1,3 @@ +用[[crontab]]設定[[ddns.sh]] +1. `crontab -e` +2. 加入 `*/15 * * * * /home/awin/script/ddns.sh` \ No newline at end of file diff --git a/00. Inbox/樹莓派/設定日誌大小.md b/00. Inbox/樹莓派/設定日誌大小.md new file mode 100644 index 0000000..c7dcc4e --- /dev/null +++ b/00. Inbox/樹莓派/設定日誌大小.md @@ -0,0 +1,5 @@ +打開`/etc/systemd/journald.conf` +- `SystemMaxUse=1G` +- `RuntimeMaxUse=100M` + +[[journalctl]] \ No newline at end of file