by rainchu | 9 月 23, 2024 | SERVER
在 ubuntu linux 中預設是用 apache2 作為 http server,但現在比較多機會是用 nginx 或是自己建的 http server ,所以在這邊記錄下我的移除方法
移除指令
sudo apt-get remove --purge apache*
執行指令後,注意看一下有沒有可能會誤刪的,沒有的話,接下去執行
執行完畢後,apache2 就會被刪除,但內容以及設定檔都還會存在
移除相關設定和內容
設定預設是存放在 /etc/apache2 這個資料夾
內容預設是放在 /var/www 下,記得要檢查備份後,刪除
by Rain Chu | 6 月 12, 2024 | Linux
Linux 的 find
指令是一個非常強大而且必定要學習的工具,用於在文件系統中搜索符合特定條件的文件或目錄。以下想要介紹這個指令,通過各種參數和選項來定制搜索條件,讓你能夠精確地找到所需的文件。
基本語法
find
指令的基本語法如下:
- 路徑:指定
find
指令開始搜索的目錄。如果不指定,默認為當前目錄。
- 選項:定義搜索的條件,例如按文件名、文件類型、修改時間等。
- 動作:對搜索結果執行的操作,如列印文件名、刪除文件等。如果不指定動作,默認動作是列印所有找到的文件的路徑。
常用選項
- 按名稱搜索:
-name 'pattern'
:搜索文件名匹配指定的模式的文件。模式可以包含通配符,如 *
和 ?
。
- 示例:
find /home/user -name '*.txt'
- 按類型搜索:
-type f
:僅搜索文件。
-type d
:僅搜索目錄。
- 示例:
find /var/log -type f
- 按修改時間搜索:
-mtime +n
:搜索在 n 天之前被修改過的文件。
-mtime -n
:搜索在最近 n 天內被修改過的文件。
- 示例:
find / -mtime -10
- 按大小搜索:
-size +n
:搜索大於 n 單位的文件。單位可以是 k(KB)、M(MB)、G(GB)。
-size -n
:搜索小於指定大小的文件。
- 示例:
find / -size +100M
常用動作
-print
:輸出匹配文件的完整路徑(這是默認動作)。
-delete
:刪除找到的文件。
-exec cmd {} \;
:對找到的每個文件執行指定的命令。{}
是一個占位符,代表當前找到的文件名。
- 示例:
find /tmp -type f -mtime +30 -exec rm {} \;
最常使用的動作
搜尋整個硬碟中大於100MB的log檔案(不分大小寫),並且把她刪除
find / -type f -size +100M -iname "*.log" -delete
使用案例
尋找並刪除 30 天前的臨時文件:
find /tmp -type f -mtime +30 -delete
尋找特定大小的日誌文件並列出詳細信息:
find /var/log -type f -size +50M -exec ls -lh {} \;
尋找所有 JPG 文件並複製到另一個目錄:
find /home/user/Pictures -name '*.jpg' -exec cp {} /home/user/Backup/ \;
find 完整參數
- -mtime : 搜尋檔案的修改時間(天)
- -mmin : 搜尋檔案的修改時間(分鐘)
- -ctime : 搜尋檔案的建立時間(天)
- -cmin : 搜尋檔案的建立時間(分鐘)
- -atime : 搜尋檔案的最後開啟時間(天)
- -amin : 搜尋檔案的最後開啟時間(分鐘)
- -size : 搜尋檔案的大小
- -name : 搜尋檔案名稱(有分大小寫)
- -iname : 搜尋檔案名稱(不分大小寫)
- -type f : 只搜尋“檔案”
- -type d : 只搜尋“目錄”
- -exec <cmd> {} \; : 把搜尋結果導向指令來執行
- -user : 搜尋特定使用者的檔案或目錄
- -o : 邏輯運算為「或」的意思
- -print : 將結果印出於螢幕
參考資料
https://www.redhat.com/sysadmin/linux-find-command
by Rain Chu | 5 月 14, 2024 | Linux, Ubuntu, Windows
預設在你的windows下的 Linux 系統會取得一個 IP,通常是172.19開頭的,這是因為用的是 Hyper-V 架構導致的,變成你再 WSL 內開發的服務都很難對外,但其實只要利用 windows 內建的 Netsh interface portproxy 即可
設定 NAT Proxy
透過 netsh interface portproxy 來作設定
netsh interface portproxy add v4tov4 listenport=<yourPortToForward> listenaddress=0.0.0.0 connectport=<yourPortToConnectToInWSL> connectaddress=(wsl hostname) -I)
其中
listenport 和 connectport 通常設定一樣,也就是你的服務的 port
listenaddress=0.0.0.0 (固定)
connectaddress 要記得是填入你 ubuntu 的IP喔,可以透過 wsl hostname -I 找出 IP
假設你有一個服務是運行在 port 3001,ubuntu 的 ip 172.19.227.52,修改後的你指令應該要長成
netsh interface portproxy add v4tov4 listenport=3001 listenaddress=0.0.0.0 connectport=3001 connectaddress=172.19.227.5
最後記得要打開對應的防火牆的設定喔
加碼演出
關於 netsh 的控制指令說明
顯示目前所有的設定
netsh interface portproxy show all
重新設定 netsh
netsh interface portproxy reset
參考資料
https://learn.microsoft.com/zh-tw/windows/wsl/networking
by Rain Chu | 3 月 20, 2024 | PHP
在 Linux 中更改命令行的預設 PHP 執行檔,通常涉及更新系統的 PATH
環境變數或使用 update-alternatives
工具(如果你的系統支援)。以下是幾種常見的方法來變更預設 PHP 執行檔:
方法 1:使用 update-alternatives
(適用於 Debian、Ubuntu 及其衍生系統)
如果你的系統安裝了多個 PHP 版本,可以使用 update-alternatives
工具來設定預設的 PHP 版本。
列出所有可用的 PHP 替代版本:
sudo update-alternatives --display php
設定預設 PHP 版本:
使用下面的命令設定預設版本。將 phpX.Y
替換成你想設定為預設的 PHP 版本號,例如 php8.2
。
sudo update-alternatives --set php /usr/bin/php8.2
如果你想要在可用選項之間手動選擇,可以使用:
sudo update-alternatives --config php
方法 2:直接修改 PATH
環境變數
你可以通過修改 PATH
環境變數來讓系統首先找到你想要的 PHP 版本。這可以通過在你的 ~/.bashrc
、~/.zshrc
或其他適用的 shell 配置檔案中添加一行來實現。
假設你想使用的 PHP 版本位於 /usr/local/phpX.Y/bin
(將 X.Y
替換成具體版本號),可以添加以下行:
export PATH=/usr/local/phpX.Y/bin:$PATH
然後,執行 source ~/.bashrc
(或對應的配置檔案)來使變更生效。
方法 3:使用符號連結
另一個變更預設 PHP 執行檔的方法是建立一個指向你想要的 PHP 版本的符號連結(symlink)。這通常涉及到刪除或重命名舊的 PHP 符號連結,然後創建一個新的指向你選擇的版本。
刪除或重命名當前的符號連結:
sudo mv /usr/bin/php /usr/bin/php.old
建立新的符號連結:
將 /usr/bin/php
指向你想要的 PHP 版本。將 /path/to/your/php
替換成你想要設定為預設 PHP 執行檔的完整路徑。
sudo ln -s /path/to/your/php /usr/bin/php
在進行這些變更後,你可以通過執行 php -v
來驗證新的預設 PHP 版本是否已正確設定。
by Rain Chu | 12 月 7, 2023 | GCP, Linux, MIS, Ubuntu
建立一個會自動開機和關閉虛擬機器的排程
值得注意的事項:
- 主機時間都是 UTC 時間,設定的時候,要記得處理這邊,例如台灣時區是+8,所以設定時間的時候要-8
1.首先設定一個 Compute Engine 的 「執行個體排程」如圖所示
2.建立一個新的執行個體排程
設定在每天18:00到23:00最忙碌的時候多開一台主機
3.將要執行的 VM 個體加入到此排程中
記得建立好排程後,要把適用這個規則的 VM 個體都加入,GCP 的排程才會去處理 VM 的開關
4.執行排程的權限設定
如果你之前沒做過權限設定,那肯定會遇到權限不足的錯誤訊息,這時候要來到 IAM 與管理 -> 身分與存取權管理,並且先勾選「包含 Google 提供的角色授權」,然後選擇「授予存取權」
然後主體要選擇你自己的 compute-system.iam 指派角色則是選擇 Compute 執行個體管理員(v1),如圖所示
建立 Ubuntu or Debian 的 Shell Script 定時執行開關機
1.建立自動開關設定的 Script
#!/bin/bash
SOURCE_CONF="/path/to/a.conf"
TARGET_CONF="/path/to/nginx/nginx.conf"
# 使用 sudo 執行需要 root 權限的命令
sudo cp "$SOURCE_CONF" "$TARGET_CONF"
sudo nginx -s reload
2.可以使用 crontab
命令來檢查和管理定時任務(cron jobs)
加入執行時間、程式碼等設定
# 分 鐘 小時 日期 月份 星期 命令
0 23 * * * /path/to/update_nginx_conf.sh
這樣就可以利用 root 權限運行 Script
其中:
- 分鐘:分鐘(0-59)
- 小時:小時(0-23,採24小時制)
- 日期:一個月中的某天(1-31)
- 月份:月份(1-12)
- 星期:星期幾(0-7,其中0和7都代表星期日)
- 命令:要執行的命令或腳本的絕對路徑
例如,如果您希望每天凌晨 3 點執行一個名為 script.sh
的腳本,您應該這樣寫:
檢查
檢查 crontab
列表:輸入 crontab -l
來確認您的任務已被添加到 crontab
列表中。
其他方法
at 指令
例如要讓指令碼在明天的 10:00執行,可以執行下面的指令
at 10:00 AM tomorrow /path/to/script.sh
systemd (System and Service Manager)
- 創建一個 systemd 定時任務檔案。
- 在定時任務檔案中指定要執行的命令或腳本以及執行時間。
- 啟用定時任務。
例如:每一分鐘都要執行一次 script.sh
[Unit]
Description=My Script
[Timer]
OnCalendar=*-*-* *:* *
[Service]
ExecStart=/path/to/script.sh
錯誤處理
如果有遇到無法執行權限的話,可以參考下面的文章解決權限問題
結語
這樣設定完成後,GCP自己就會在晚上11點關機、晚上6點開機,而我的腳本則是在晚上11:00 關閉 Nginx 的 upstream,在18:15開啟 upstream server
近期留言