Linux nohup 斷線不中斷程式執行用法範例

本篇 ShengYu 介紹 Linux nohup 指令用法,nohup 是一個 Linux 指令,用於執行指令時忽略 Hangup(斷開連線)訊號,使指令在後台執行,即使使用者退出登錄會話或斷開連線,該指令也將繼續執行。有時我們需要執行耗時較長的指令或行程,但希望即使在退出終端或斷開連線後,這些行程仍然能夠持續執行。這就是 nohup 指令的用武之地。現在讓我們簡單介紹一下 nohup 指令的基本用法、其他常見用法以及一些進階技巧和常用選項。

基本用法

要使用 nohup,只需在要執行的指令之前加上 nohup,然後在指令後面加上 & 以將其放入後台執行。例如:

1
nohup command &

這將使 command 在後台持續執行,即使使用者退出登錄會話或斷開連線。

其他常見用法

nohup 指令將輸出重導向到檔案,範例如下,

1
nohup command > output.log &

這將 command 的輸出重導向到指定的檔案 output.log 中,以便您稍後查閱。

nohup 指令忽略所有輸入,範例如下,

1
nohup command > /dev/null &

這將使 command 忽略所有輸入,並將所有輸出重導向到 /dev/null,即丟棄輸出。

nohup 常用選項

-p:將 nohup 指令的行程 ID(PID)寫入指定檔案。
-c:指定要執行的指令。
-f:使指令在前台執行,即使有斷開連線的風險。

結語

nohup 指令是在 Linux 系統中執行長時間指令的有用工具。透過將指令放入後台執行並忽略 Hangup 訊號,它可以確保即使在登錄會話結束後,指令仍然持續執行。藉助適當的輸出重導向,您可以將指令的輸出保存到檔案中,以便稍後檢查。nohup 的進階選項可以提供更多靈活性和控制,讓您更好地管理執行中的指令。

以上就是 Linux nohup 指令用法範例的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Linux 常用指令教學懶人包
Linux wget 下載檔案用法與範例
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux tee 同時螢幕標準輸出和輸出到檔案用法與範例
Linux xargs 參數清單轉換用法與範例
Linux tail 持續監看檔案輸出用法與範例
Linux du 查詢硬碟剩餘空間/資料夾容量用法與範例

PHP 執行發生錯誤在 Chrome/Firefox 上顯示 Error 500,要怎麼讓 PHP 顯示錯誤

本篇 ShengYu 介紹怎麼讓 PHP 在瀏覽器上顯示錯誤,PHP 執行發生錯誤在 Chrome/Firefox 上顯示 Error 500,要怎麼辦?要怎麼讓 PHP 顯示錯誤?當你在使用 PHP 網站時遇到 Error 500(內部伺服器錯誤),這通常表示伺服器發生了某種錯誤。要解決這個問題,可以按照以下步驟來進行排查和顯示詳細錯誤訊息:

1. 啟用 PHP 錯誤顯示

要讓 PHP 顯示錯誤訊息,可以在 PHP 設定檔 (php.ini) 中進行設定,或者在程式碼中直接啟用錯誤顯示。

修改 php.ini 設定檔

找到並修改 php.ini 中以下設定:

1
2
3
display_errors = On
display_startup_errors = On
error_reporting = E_ALL

修改後,重啟網頁伺服器(如 Apache 或 Nginx)。

在 PHP 程式碼中啟用錯誤顯示

在 PHP 檔案的開頭加入以下程式碼:

1
2
3
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

2. 檢查伺服器錯誤日誌

即使啟用了錯誤顯示,有時候錯誤仍然不會顯示在瀏覽器上,特別是如果伺服器設定了禁止顯示錯誤訊息給使用者。在這種情況下,可以檢查伺服器的錯誤日誌以找到詳細錯誤資訊。

Apache

Apache 的錯誤日誌通常位於 /var/log/apache2/error.log/var/log/httpd/error_log。可以使用以下指令查看日誌:

1
tail -f /var/log/apache2/error.log

Nginx

Nginx 的錯誤日誌通常位於 /var/log/nginx/error.log。可以使用以下指令查看日誌:

1
tail -f /var/log/nginx/error.log

3. 確認 .htaccess 設定

如果你使用 Apache 伺服器,可能 .htaccess 檔案中的設定引起了錯誤。確保 .htaccess 檔案中沒有語法錯誤,並且設定正確。

4. 檢查 PHP 腳本

確認你的 PHP 腳本中沒有語法錯誤或邏輯錯誤。可以使用 php -l your_script.php 來檢查 PHP 腳本的語法。

5. 檢查 PHP 擴展

確保所有必要的 PHP 擴展都已正確安裝並啟用。有時候,缺少某些 PHP 擴展也會導致 500 錯誤。

透過以上步驟,你應該能夠找出並解決 PHP 網站中導致 Error 500 的問題。

以上就是怎麼讓 PHP 在瀏覽器上顯示錯誤教學介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
如果你想學習 PHP 相關技術,可以參考看看下面的文章,
PHP 和 MySQLi 進行資料庫操作
PHP 和 PDO 進行資料庫操作

NextCloud 安裝教學、使用方式與常見問題

本篇 ShengYu 介紹 NextCloud 安裝教學、使用方式與常見問題,NextCloud是一個開源的雲端儲存和檔案同步解決方案,讓使用者可以在自己的伺服器上建立和管理私有雲。它類似於商業服務如 Dropbox 或 Google Drive,但提供了更高的隱私和控制權。目前 NextCloud 已經不支援 SQLite 只有支援 MySQL/MariaDB。NextCloud是一個靈活、安全且功能豐富的私有雲解決方案,特別適合希望保護資料隱私並需要自定義功能的使用者和企業,詳細介紹請見本文。

以下為本篇內容的目錄,

  • Ubuntu NextCloud 安裝步驟
  • 更換 nextcloud 儲存路徑
  • 調整 PHP 的記憶體限制
  • Nextcloud 影片沒有預覽圖(縮圖)的問題
  • 為什麼 nextcloud 手機版 app 的功能沒有網頁版完整
  • QA. NextCloud 設定檔位置在哪?
  • QA. nextcloud log 檔位置在哪?
  • 遇到 Internal Server Error 問題怎麼看 log
  • 遇到 Nextcloud 硬碟容量滿的問題
  • 增加信任的網域及內網的 IP
  • QA. 怎麼分享照片給別人,即使別人沒有帳號的情況下
  • QA. 手機照片備份後,我手機刪了某張照片後,nextcloud 遠端備份的那張會刪除嗎?
  • QA. 反過來的話,手機照片備份後,nextcloud 遠端備份刪了某張照片後,我手機那張會刪除嗎?
  • QA. 通常檢視、整理、刪減照片這個動作應該在手機端操作還是 nextcloud 遠端上?
  • 資料安全建議

Ubuntu NextCloud 安裝步驟

以下為 Ubuntu 22.04 的 NextCloud 安裝方式,在 Ubuntu 22.04 中 php 版本已更新到 8.1,以下為安裝步驟,

1
2
3
sudo apt update && sudo apt upgrade
sudo apt install apache2 mariadb-server libapache2-mod-php php-gd php-mysql \
php-curl php-mbstring php-intl php-gmp php-bcmath php-xml php-imagick php-zip

使用 MySQL 指令執行以下步驟,建立一個名為 nextcloud 的mysql 資料庫及使用者,your-password 部分的密碼改用你自己的設定。

1
2
3
4
5
6
sudo mysql
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'your-password';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
quit;

到目前為止,已經完成 nextcloud 所有依賴套件的安裝,接下來準備安裝 nextcloud,
下載 nextcloud,現在最新版的 nectcloud是 29.0.3,然後解壓縮到 /var/www/html 目錄下,官網說明是解壓縮到 /var/www/ 這邊我採用常見的作法,如果沒有安裝unzip程式會無法解壓縮,要先用 sudo apt install unzip 安裝 unzip 程式,

1
2
3
wget https://download.nextcloud.com/server/releases/nextcloud-29.0.3.zip
sudo unzip nextcloud-29.0.3.zip -d /var/www/html
sudo chown -R www-data:www-data /var/www/html/nextcloud/

以下 apache2 的設定有兩種方式,一種方式是用 IP 或是 https://www.example.com/nextcloud/ 這種方式。另一種是用 vhost 虛擬主機的方式,例如你想要你的 Nextcloud 能夠像 https://cloud.example.com/ 這樣的子網域存取的話.。

這邊先介紹第一種方式,新增 nextcloud.conf 設定檔到 apache2 下

1
sudo vim /etc/apache2/sites-available/nextcloud.conf

nextcloud.conf 設定檔如下,

1
2
3
4
5
6
7
8
9
10
11
Alias /nextcloud "/var/www/html/nextcloud/"

<Directory /var/www/html/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews

<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>

這是第二種 vhost 虛擬主機方式,建立 apache2 的虛擬主機設定檔,如果有多個主機名稱,需要個別建立。

nextcloud.conf 設定檔如下,ServerName 的 your.server.com 要換成你自己的網域名稱,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<VirtualHost *:80>
DocumentRoot /var/www/html/nextcloud/
ServerName your.server.com

<Directory /var/www/html/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews

<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
</VirtualHost>

之後啟用這個網站設定,

1
sudo a2ensite nextcloud

啟用 apache2 的相關模組,

1
sudo a2enmod rewrite headers env dir mime setenvif ssl

重新啟動 apache2,

1
sudo systemctl restart apache2

在瀏覽器上輸入: http://xx.xx.xx.xx/nextcloud/(第一種設定) 或是 http://your.server.com (第二種設定)

接下來就可以看到 nextcloud 的設定畫面,最上面是準備要新增 nextcloud 的管理員帳號,中間是 server 上資料的存放位置,下面是資料庫的相關設定。

設定資料庫內容,輸入在剛剛前面 mysql 設定的帳號密碼,

按下 Install 等一段時間安裝後,之後就會跳轉頁面,這樣就可以開始使用 nextcloud 了唷!耶!

相關參考
Example installation on Ubuntu 22.04 LTS
Apache Web server configuration
Ubuntu Server 22.04 LTS的架設 8. Nextcloud server架設

安裝完基本上已經可以使用,但是想要或提更加的使用體驗的話,最好確認你的環境是否有調整到最佳狀態,可以利用概覽確認建議修正事項,詳細看後續介紹。

更換 nextcloud 儲存路徑

預設的檔案路徑是放在 /var/www/html/nextcloud/data ,但 /var 這個目錄磁碟空間往往比較小,
所以我個人是把檔案放在 /home/nextcloud 這個目錄下。
所以要先在 /home 目錄下建立 nextcloud目錄並把owner及權限設好,執行:

1
2
3
sudo mkdir /home/nextcloud
sudo chown -R www-data:www-data /home/nextcloud
sudo chmod 755 /home/nextcloud

設定 crontab 機制

在網頁版裡的基本設定>背景工作裡將 AJAX 換成 Cron。

其他相關參考
Nextcloud 基本參數調校作業

調整 PHP 的記憶體限制

在網頁版裡的管理>概覽裡會出現「目前的 PHP 的記憶體限制設定低於建議值 512 MB。」的訊息

編輯 php 設定檔

1
sudo vim /etc/php/8.1/apache2/php.ini

從原本的 128M 改成 512M,

1
memory_limit = 512M

之後在重啟 Apache 服務,

1
sudo systemctl restart apache2

Nextcloud 影片沒有預覽圖(縮圖)的問題

Nextcloud 安裝後上傳影片檔案發現影片沒有預覽圖(縮圖),預設就是這樣,影片要一個一個打開看才知道是哪個影片,這樣實在很不方便,解決方法如下,

Nextcloud 依賴 ffmpeg 來產生影片預覽縮圖。請確保已安裝並正確設定了 ffmpeg。
在 Debian/Ubuntu 系統上,可以使用以下指令安裝 ffmpeg:

1
sudo apt-get install ffmpeg

在 Nextcloud 的 config.php 檔案中,確保預覽功能已啟用。
sudo vim /var/www/html/nextcloud/config/config.php
新增或確保以下設定存在:

1
2
3
4
5
6
7
'enable_previews' => true,
'enabledPreviewProviders' => [
'OC\Preview\Movie',
'OC\Preview\PNG',
'OC\Preview\JPEG',
'OC\Preview\GIF',
],

有時,調整 enabledPreviewProviders 的順序也能解決問題。確保 OC\Preview\Movie 位於清單的頂部。

存檔後重新整理網頁或APP即可,到這邊為止網頁版與手機版就可以看到影片預覽縮圖了

查看 Nextcloud 日誌檔案中的錯誤資訊,可能會給出更多關於問題的線索。日誌檔案位於
/var/www/html/nextcloud/data/nextcloud.log

但網頁版播放影片失敗是另外的問題?

為什麼 nextcloud 手機版 app 的功能沒有網頁版完整

Nextcloud 的手機版 app 一般不如網頁介面功能全面。這是因為手機應用主要專注於檔案同步和基本功能,以保持輕便和易於使用。網頁介面則提供了更廣泛的功能和設定選項,適合進行更深入的管理和設定。

以下是一些在手機版 app 上可能缺少的功能:

  1. 詳細的管理設定:如使用者管理、組織管理和應用管理等。
  2. 應用擴展:一些應用和擴展功能僅能透過網頁介面訪問和設定。
  3. 詳細日誌和報告:更詳細的日誌和報告功能通常需要在網頁介面中查看。
  4. 高級設定:如共享設定、高級安全設定等。

如果你需要使用這些更高級的功能,建議使用網頁介面訪問 Nextcloud。手機版應用更多是用於日常的檔案訪問和簡單的同步操作。

QA. NextCloud 設定檔位置在哪?

NextCloud 設定檔設定位置在 /var/www/html/nextcloud/config/config.php

QA. nextcloud log 檔位置在哪?

Nextcloud 的 log 檔位置通常在安裝目錄下的 data 資料夾內。預設情況下的路徑是:

1
2
3
/var/www/nextcloud/data/nextcloud.log # 官網設定

/var/www/html/nextcloud/data/nextcloud.log # 其他常見設定

網頁版要怎麼查看的話,可以看這篇
https://rangotec.com/blog/46.html

遇到 Internal Server Error 問題怎麼看 log

查看 log

1
2
3
tail -f /var/log/apache2/error.log
or
tail -f /usr/local/apache2/logs/error.log

遇到 Nextcloud 硬碟容量滿的問題

首先先確認是不是真的硬碟容量滿了,使用 df -h 指令查看,我就遇過我的 VM 開 40GB 空間,但VM開啟安裝好後檢查空間上限結果是變成19 GB
Nextcloud 誤報儲存已滿
NextCloud 在Nginx下報告報告空間不足
它使用NGINX,NextCloud 是透過 /index.php/apps/files/ajax/getstoragestats.php 來取得可用空間的,但是如果設定不正確的nginx的pathinfo,就會壞掉,看起新版沒有這個檔案了。

增加信任的網域及內網的 IP

新增加信任的網域及內網的 IP,如果未來有設要跟 NextCloud 結合會建在這裡增網域及 IP

1
2
3
4
5
'trusted_domains' => 
array (
0 => '[sub.domain].com',
1 => '192.168.1.10',
),

QA. 怎麼分享照片給別人,即使別人沒有帳號的情況下

選照片後,可以按分享連結後就可以產生一個短連結分享給其他人,這就很像google 雲端硬碟分享照片設定權限給任何知道連結的人都能觀看的那個功能。

QA. 手機照片備份後,我手機刪了某張照片後,nextcloud 遠端備份的那張會刪除嗎?

手機照片備份到 Nextcloud 後,如果你在手機上刪除了某張照片,Nextcloud 遠端備份的那張照片通常不會自動刪除。Nextcloud 主要是用於備份和同步檔案,但它不會預設同步刪除操作,除非你啟用了特定的同步選項。

QA. 反過來的話,手機照片備份後,nextcloud 遠端備份刪了某張照片後,我手機那張會刪除嗎?

如果你在 Nextcloud 遠端備份中刪除了某張照片,通常情況下,你手機上的那張照片不會被刪除。這是因為大多數情況下,Nextcloud 的自動上傳功能是單向的(從手機上傳到伺服器),而不是雙向同步。

QA. 通常檢視、整理、刪減照片這個動作應該在手機端操作還是 nextcloud 遠端上?

通常情況下,建議在手機端進行檢視、整理和刪除照片,因為手機端的操作更加直觀和方便,並且可以確保你只刪除真正不需要的照片。下面是一些詳細的理由和建議:

在手機端操作的優勢

  1. 直觀方便:手機端可以直接預覽照片,放大細節,更容易判斷照片的質量和是否需要保留。
  2. 立即效果:在手機端刪除或整理照片可以立即看到效果,不需要等待同步。
  3. 避免誤刪:在手機端操作,可以更好地控制刪除的內容,減少誤刪重要照片的風險。

Nextcloud 遠端操作的優勢

  1. 節省手機儲存:如果你的手機儲存空間有限,可以將不常用的照片備份到 Nextcloud 後再從手機上刪除。
  2. 集中管理:Nextcloud 端可以更方便地集中管理和備份大量照片,特別是如果你有多台裝置需要統一管理照片。

推薦的操作流程

  1. 在手機端進行初步整理

    • 定期在手機端查看和刪除不需要的照片(例如模糊、不合格或重覆的照片)。
    • 保留重要的和需要備份的照片。
  2. 將整理後的照片備份到 Nextcloud

    • 使用 Nextcloud 自動上傳功能,備份整理後的照片到伺服器。
  3. 在 Nextcloud 端進行二次整理(可選)

    • 如果需要進一步分類或刪除不需要的備份照片,可以在 Nextcloud 端進行。
    • 注意確保不會影響手機端的照片。

資料安全建議

  1. 多重備份:除了 Nextcloud,可以考慮將重要照片備份到其他雲服務或外部儲存裝置,增加資料的安全性。
  2. 定期檢查:定期檢查手機和 Nextcloud 上的照片,確保所有重要照片都已經備份,並且沒有誤刪。

其他網友遇到的問題

Nextcloud 局域网上传速度慢
不確定新版本還有沒有這個問題,待確認

其他相關參考
使用 Nextcloud 在 ASUSTOR NAS 上進行協同作業
在 ASUSTOR NAS 上安裝 Nextcloud 並將其與 OnlyOffice 結合使用以進行協同作業

以上就是 NextCloud 安裝教學與使用方式介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

信義101健康管理診所 體驗心得

近期 ShengYu 進行年度健康檢查,今年比較特別就想選新的健檢中心嘗試看看,就選了信義101健康管理診所這家健檢中心,就來順手紀錄一下體驗心得。

第一次來信義101健康管理診所進行年度檢查,先用機台報到後會有號碼,然後準備等櫃檯叫號,然後會請你安裝他們的APP,稍後會用到。

捷運紅線101下車2號出口走出來後就可以看到這棟建築物了,信義101健康管理診所位於這棟大樓的4樓,這棟看起來都是新光集團的。

第一次做電梯是要在外面先按樓層,然後它在告訴你去哪個電梯搭,沒見過世面的鄉下孩子XD。

這一袋是等等要換的衣服褲子跟拖鞋,是送的可以帶回家,蛤?!我當下嚇到,可以帶回家喔,但是發現有Logo不會穿出門,大概在家穿吧。事後才知道原來是公司合作的方案中會送,一般要回收的是紫色的。男生只能穿自己的內褲,還有帶著手機,因為要看APP看診號跑站點。

動線算是一個放射線的路線,每個門診前都有座位區可以等候,還有螢幕可以看候位狀況,不時地也會有人來告訴你怎麼去哪一號門診,每門診結束後都會告訴你下一站去哪一號,整個健檢中心都在同一層樓,這部分表現不錯。

花了兩個多小時終於跑完所有站點做完檢查,肚子超餓的,來去用餐了,用餐環境不錯,領取號碼牌就直接去想做的位子等就可以了。

餐點會稍候送到位子上,餐點我是選雞肉沙拉,吃起來還不錯,飲料可續杯,第二杯我換黑咖啡提提神,跟別間健檢中心相比,我還是比較喜歡吃有飯的餐盒,我是飯食主義者,沙拉吃不飽,雖然裡面也有一些地瓜跟幾條螺旋麵。

結論

整體來說,感受是不錯的,唯獨少數一些站點人員可能有一些職業倦怠,過程中講的一連串東西沒想過有沒有聽進去,就是把它講完交差了事,遇到大約2-3個這樣的狀況,排除這個問題以外,整體的感覺是不錯的。

檢查報告的部分,PDF電子檔報告要15個工作天寄送電子信箱,實體紙本報告要20個工作天。如果可以當天就知道檢驗結果的話會更好,我之前去的健檢中心都可以做到當天就能看報告還有醫生跟你一起看,然後之後報告再寄送。

最後誠心建議,很久沒健康檢查的各位,要定期去做檢康檢查唷!不要工作忙碌就忘記去檢查唷!身體跟汽車一樣也是要進場保養維修,這樣才能開更久遠。

附上本次的健檢中心資訊,
官網連結:信義101健康管理診所
地址:台北市信義區信義路五段8號4樓

如果你覺得我的分享寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

3 種 Python 字串搜尋並且忽略大小寫方法

本篇 ShengYu 介紹 3 種 Python 字串搜尋並且忽略大小寫方法,在 Python 程式設計中,字串搜尋是一個常見且重要的操作。無論是檢查使用者輸入,還是從大量資料中篩選特定資訊,能夠有效地搜尋字串都是至關重要的。而在進行字串搜尋時,我們經常需要忽略大小寫。本文將介紹幾種在 Python 中搜尋字串並忽略大小寫的方法。

方法一:使用 in 來進行大小寫無關的搜尋

in 關鍵字是 Python 中最簡單的字串搜尋方法之一。要忽略大小寫,可以將字串和關鍵字都轉換為小寫或大寫後再進行比較。

1
2
3
4
5
6
7
keyword = "python"
text = "I love programming in Python."

if keyword.lower() in text.lower():
print("Keyword found!")
else:
print("Keyword not found.")

這種方法直觀且易於實現,非常適合用於簡單的字串匹配需求。

方法二:使用 casefold() 進行更強大的大小寫無關搜尋

casefold() 方法比 lower() 更強大,因為它不僅可以處理 ASCII 字元,還能處理其他語言中的字元。這使得它在國際化應用中尤為有效。

1
2
3
4
5
6
7
keyword = "python"
text = "I love programming in Python."

if keyword.casefold() in text.casefold():
print("Keyword found!")
else:
print("Keyword not found.")

方法三:使用正則表達式進行大小寫無關的搜尋

正則表達式(Regular Expressions, 簡稱 regex)是一種功能強大的字串處理工具。在 Python 中,我們可以使用 re 模組並指定 re.IGNORECASE 標誌來進行不區分大小寫的匹配。

1
2
3
4
5
6
7
8
9
import re

keyword = "python"
text = "I love programming in Python."

if re.search(keyword, text, re.IGNORECASE):
print("Keyword found!")
else:
print("Keyword not found.")

這種方法適用於更複雜的匹配需求,例如模式匹配或多次出現的關鍵字。

小結

在 Python 中搜尋字串並忽略大小寫有多種方法可以選擇。使用 in 關鍵字、casefold() 方法以及正則表達式都能達到這個目的。根據具體需求選擇合適的方法,可以讓你的程式更加高效和準確。希望這些方法能幫助你在 Python 字串處理上更加得心應手。

以上就是 3 種在 Python 中進行字串搜尋且忽略大小寫的常用方法介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Python 新手入門教學懶人包
4 種 Python 字串中搜尋關鍵字的方法
Python str.find() 用法與範例
Python str 字串用法與範例

4 種 Python 字串中搜尋關鍵字的方法

本篇 ShengYu 介紹 4 種 Python 字串中搜尋關鍵字的方法,在 Python 中,搜尋字串中的關鍵字是一項常見且基本的操作。無論是處理文字資料、過濾日誌檔案,還是開發網頁爬蟲,了解如何在字串中搜尋關鍵字都十分重要。本文將介紹四種在 Python 中搜尋關鍵字的方法,幫助你更有效地處理文字資料。

1. 使用 in 運算子

in 運算子是 Python 中最簡單且直觀的方法之一。它用於檢查子串是否存在於另一個字串中。

1
2
3
4
5
6
7
text = "Python is a powerful programming language."
keyword = "powerful"

if keyword in text:
print("Keyword found!")
else:
print("Keyword not found.")

這種方法簡潔明瞭,非常適合用於簡單的存在性檢查。

2. 使用 str.find() 方法

str.find() 方法回傳子串在字串中的最低索引值,如果未找到子串,則回傳 -1。

1
2
3
4
5
6
7
8
text = "Python is a powerful programming language."
keyword = "powerful"

position = text.find(keyword)
if position != -1:
print(f"Keyword found at position {position}.")
else:
print("Keyword not found.")

這種方法比 in 運算子提供更多的資訊,如子串的具體位置。

3. 使用 re 模組進行正則表達式搜尋

re 模組允許使用正則表達式進行更複雜的模式對應。

1
2
3
4
5
6
7
8
9
import re

text = "Python is a powerful programming language."
keyword = "powerful"

if re.search(keyword, text):
print("Keyword found!")
else:
print("Keyword not found.")

正則表達式適合需要進行複雜模式對應的情況,例如在文字中搜尋多個變化形式的關鍵字。

4. 使用 str.index() 方法

str.index() 方法類似於 str.find(),但當子串未找到時會引發 ValueError 異常。

1
2
3
4
5
6
7
8
text = "Python is a powerful programming language."
keyword = "powerful"

try:
position = text.index(keyword)
print(f"Keyword found at position {position}.")
except ValueError:
print("Keyword not found.")

這種方法適合需要處理異常情況的應用場景。

結語

了解和掌握不同的搜尋方法能夠幫助你在處理文字資料時更靈活應對各種需求。每種方法都有其獨特的優勢和適用場景,選擇合適的方法可以使你的程式碼更加高效和可讀性更高。

以上就是 4 種 Python 字串中搜尋關鍵字的方法的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Python 新手入門教學懶人包
3 種 Python 字串搜尋並且忽略大小寫方法
Python str.find() 用法與範例
Python str 字串用法與範例

Linux pstree 指令用法範例

本篇 ShengYu 介紹 Linux pstree 指令用法,pstree 是一個用於以樹狀結構顯示行程的 Linux 指令。它可以幫助您更清晰地了解系統中執行的行程及其之間的關係,例如:我想要知道這個執行緒是在哪個父行程裡的,或者我想要知道這個行程裡有哪些子執行緒,使用 pstree 超方便一目瞭然。現在讓我們來簡單介紹一下 pstree 指令的基本用法、其他常見用法和一些進階技巧以及常用選項。

基本用法

要使用 pstree,只需在終端中輸入以下指令:

1
pstree

這將顯示當前系統中執行的所有行程的樹狀結構。每個行程的名稱將按照其隸屬關係進行縮進。

其他常見用法

pstree 指令顯示指定行程的樹狀結構:

1
pstree -p PID

這將僅顯示指定行程 ID(PID)的樹狀結構。將 PID 替換為要查詢的行程 ID。

pstree 指令顯示完整的行程指令行:

1
pstree -a

這將顯示每個行程的完整指令行,而不僅僅是行程名。

pstree 常用選項

當你在 Linux 系統中執行 pstree 指令時,你可以使用一些選項來調整它的行為。以下是一些常用的選項及其說明:
-p:顯示每個行程的行程 ID(PID)。
-n:按行程 ID(PID)進行數字排序。
-u:顯示每個行程的使用者名稱和 UID。
-G:將與當前使用者相關的行程以及其父行程用顏色高亮顯示。
-h:高亮顯示指定的 PID 及其祖先。
-H:高亮顯示當前 pstree 指令的 PID 及其祖先。
-a:顯示行程的指令行參數。
-l:以長格式顯示,包括 PID、PPID、PGID 和 SID。
-s:顯示每個行程的行程組 ID(PGID)。

這些選項可以根據你的需求來定制 pstree 指令的輸出,以便更好地理解系統中行程的層次結構。

結語

透過 pstree 指令,您可以以一種清晰易懂的方式查看系統中執行的行程及其之間的隸屬關係。這對於理解系統的執行狀況和行程之間的相互作用非常有用。請記住,在進行系統故障排查或性能優化時,pstree 是一個非常實用的工具。

以上就是 Linux pstree 指令用法範例的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Linux 常用指令教學懶人包
Linux wget 下載檔案用法與範例
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux tee 同時螢幕標準輸出和輸出到檔案用法與範例
Linux xargs 參數清單轉換用法與範例
Linux tail 持續監看檔案輸出用法與範例
Linux du 查詢硬碟剩餘空間/資料夾容量用法與範例

使用 PHP 的 PDO 進行資料庫操作:入門指南

本篇 ShengYu 介紹 PHP 和 PDO 進行資料庫操作用法,在 PHP 開發中,與資料庫進行互動是一個常見的需求。PDO(PHP Data Objects)是一個提供一致接口來訪問多種資料庫的擴展。PDO 使得處理不同資料庫(如 MySQL、PostgreSQL、SQLite 等)變得更加容易和一致。本文將介紹如何使用 PDO 進行基本的資料庫操作,包括連線資料庫、執行查詢、插入、更新和刪除資料。

什麼是 PDO?

PDO(PHP Data Objects)是一個物件導向的資料庫抽象層,旨在提高安全性和開發效率,同時提供一致的語法以支援多種資料庫。PDO 的功能和特點如下:

  1. 通用性強:PDO 支援多種資料庫系統,如 MySQL、MS SQL、ODBC、PostgreSQL、SQLite、Firebird、Informix 等。這意味著只要更換連線的資料庫驅動程式,程式碼無需更改即可適用於不同的資料庫系統。

  2. 語法一致性:無論 PHP 版本如何,PDO 的語法在所有支援的資料庫系統中都是一致的。這與 MySQL 驅動(如 mysqlmysqli)不同,後者在不同 PHP 版本中可能需要不同的語法。

  3. 物件導向設計:PDO 採用物件導向的設計,使得程式碼更具結構性和可讀性。物件導向的方式也更容易進行模組化和重用。

  4. 增強安全性:PDO 提供了預處理語句和參數化查詢,有效防止 SQL 注入攻擊。這些功能允許開發者安全地處理來自使用者輸入的資料,減少潛在的安全風險。

  5. 方便的資料操作:PDO 支援將查詢結果轉換為對應的 PHP 物件或陣列,使得資料操作更加方便和直觀。例如,使用 fetchObject() 方法可以直接將資料庫查詢結果轉換為 PHP 物件。

  6. 內建於 PHP 5.5 以上版本:從 PHP 5.5 開始,PDO 已內建於 PHP 核心,無需額外安裝。這使得 PDO 成為一個非常方便和強大的選擇。

綜上所述,PDO 是 PHP 開發中一個強大且靈活的資料庫操作工具。它不僅提供了跨資料庫的通用語法,還透過物件導向和安全性增強的設計,提高了開發效率和應用程式的安全性。

1. 建立 PDO 連線

首先,我們需要建立一個 PDO 物件來連線資料庫。這需要提供資料來源名稱(DSN)、使用者名和密碼。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
try {
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'root';
$password = 'password';

// 建立 PDO 連線
$pdo = new PDO($dsn, $username, $password);

// 設定 PDO 錯誤模式為異常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

echo "連線成功";
} catch (PDOException $e) {
echo "連線失敗: " . $e->getMessage();
}
?>

這段程式碼中,我們建立了一個 PDO 實例並設定錯誤模式為異常,以便在出現錯誤時能夠更容易地進行除錯。

2. 執行 SQL 查詢

使用 query 方法

對於不需要參數的簡單查詢,我們可以使用 query 方法:

1
2
3
4
5
6
<?php
$sql = "SELECT * FROM users";
foreach ($pdo->query($sql) as $row) {
print_r($row);
}
?>

使用 prepareexecute 方法

對於需要參數的查詢,應使用 prepare 方法來防止 SQL 注入攻擊:

1
2
3
4
5
6
7
8
<?php
$sql = "SELECT * FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(['id' => 1]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

print_r($user);
?>

3. 插入資料

使用 prepareexecute 方法插入資料:

1
2
3
4
5
6
7
<?php
$sql = "INSERT INTO users (username, email) VALUES (:username, :email)";
$stmt = $pdo->prepare($sql);
$stmt->execute(['username' => 'shengyu', 'email' => 'shengyu@example.com']);

echo "新記錄插入成功,ID: " . $pdo->lastInsertId();
?>

4. 更新資料

同樣地,可以使用 prepareexecute 方法更新資料:

1
2
3
4
5
6
7
<?php
$sql = "UPDATE users SET email = :email WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(['email' => 'newemail@example.com', 'id' => 1]);

echo "記錄更新成功";
?>

5. 刪除資料

使用 prepareexecute 方法刪除資料:

1
2
3
4
5
6
7
<?php
$sql = "DELETE FROM users WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute(['id' => 1]);

echo "記錄刪除成功";
?>

6. 關閉連線

在 PHP 中,當 PDO 物件被銷毀時,連線會自動關閉。因此,不需要顯式地關閉連線。

總結

PDO 提供了一個靈活且安全的方式來處理資料庫操作。透過使用 prepareexecute 方法,可以有效地防止 SQL 注入攻擊。PDO 的一致性和易用性使得它成為 PHP 開發人員處理資料庫操作的首選工具。

以上就是 PHP 和 PDO 進行資料庫操作的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
如果你想學習 PHP 相關技術,可以參考看看下面的文章,
PHP 和 MySQLi 進行資料庫操作
PHP 執行發生錯誤在 Chrome/Firefox 上顯示 Error 500,要怎麼讓 PHP 顯示錯誤

Google Sheets 累計月份金額或數字

某天 ShengYu 在紀錄自己的收入時,發現需要將每個月份的多個收入累計起來,這時候就是要出動 Excel,喔不,現在這個時代就是要善用雲端工具,所以本篇介紹 Google Sheets 的做法,在 Google Sheets 中,你可以使用 SUMIFSUMIFS 函數來累計某個月份的金額。假設你有一個表格,其中有一列是日期(例如 A 列),另一列是金額(例如 B 列)。你可以通過以下步驟來累計某個月份的金額:

方法 1:使用 SUMIF 函數

假設你想累計 2024 年 6 月的金額,可以使用以下公式:

1
=SUMIF(A:A, ">=2024-06-01", B:B) - SUMIF(A:A, ">=2024-07-01", B:B)

這個公式的意思是:

  1. 累計 2024 年 6 月 1 日及之後的金額。
  2. 減去 2024 年 7 月 1 日及之後的金額,這樣就只剩下 2024 年 6 月的金額。

方法 2:使用 SUMIFS 函數

SUMIFS 函數允許你設置多個條件來進行篩選,這樣可以更加準確。假設你仍然想累計 2024 年 6 月的金額,可以使用以下公式:

1
=SUMIFS(B:B, A:A, ">=2024-06-01", A:A, "<2024-07-01")

這個公式的意思是:

  1. 篩選出日期在 2024 年 6 月 1 日及之後的數據。
  2. 再篩選出日期在 2024 年 7 月 1 日之前的數據。
  3. 最後累計符合條件的金額。

假設你的表格數據如下:

日期 金額
2024-06-01 100
2024-06-15 200
2024-07-01 150
2024-06-20 300
2024-05-30 50

在 C1 單元格中輸入公式 =SUMIFS(B:B, A:A, ">=2024-06-01", A:A, "<2024-07-01"),結果將會是 600,因為 2024 年 6 月的所有金額(100 + 200 + 300)都被累計起來了。

這樣你就可以輕鬆地在 Google Sheets 中累計某個月份的金額了。

這個公式怎麼套用在 2022 跟 2023 年呢?

那這個公式怎麼套用在 2022 跟 2023 年呢?如果你希望公式可以更靈活,能夠輸入年份和月份來進行累計,可以使用 DATE 函數來生成正確的日期,並且自動處理月份進位。以下是改進後的公式:

假設你在 D1 單元格中輸入年份,在 E1 單元格中輸入月份,則可以使用以下公式來自動累計:

1
=SUMIFS(B:B, A:A, ">=" & DATE(D1, E1, 1), A:A, "<" & DATE(D1, E1 + 1, 1))

這樣,即使 E1 單元格中的月份超過 12,DATE 函數也會自動處理進位。例如小於 DATE(2022, 12 + 1, 1)的話,那麼結果會自動變成 2023-01-01。

假設你的表格數據如下:

日期 金額
2023-06-01 100
2023-06-15 200
2023-07-01 150
2023-06-20 300
2022-06-01 400
2022-06-15 500
2022-07-01 250
2022-06-20 600

D1 單元格輸入 2023,在 E1 單元格輸入 6,然後在其他單元格輸入公式:

1
=SUMIFS(B:B, A:A, ">=" & DATE(D1, E1, 1), A:A, "<" & DATE(D1, E1 + 1, 1))

這樣的話,結果將會是 600,因為 2023 年 6 月的所有金額(100 + 200 + 300)都被累計起來了。

類似地,如果在 D1 單元格輸入 2022,在 E1 單元格輸入 6,公式會自動累計 2022 年 6 月的金額,結果將會是 1500(400 + 500 + 600)。

這樣,你就可以靈活地在不同年份和月份之間切換,並且不必擔心月份進位問題。

或著你可以使用 EOMONTH 來取得每月的最後一天日期也可以達成

以上就是 Google Sheets 累計月份金額或數字介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

Linux watch 指令用法與範例

本篇 ShengYu 介紹 Linux watch 指令用法與範例,在 Linux 系統中,watch 指令是一個強大的工具,它允許使用者定期執行指定的指令並顯示其輸出,這在許多情況下都非常有用。無論是監視系統狀態、跟蹤檔案變化還是測試指令的執行情況,watch 都能夠輕鬆應對。在本文中,我們將深入探討 watch 指令的基本用法、進階技巧以及一些實用的應用場景。

基本用法

watch 指令的基本用法非常簡單,只需在終端中輸入 watch,然後跟上要執行的指令即可。也就是說 watch 會幫你下這串指令,例如,要每隔一秒執行一次 date 指令,可以使用以下指令:

1
watch date

這將在終端上顯示當前的日期和時間,並每秒更新一次。

定期執行指令並顯示結果

除了這種基本用法之外,watch 還提供了一些選項,用於自定義其行為。例如,可以使用 -n 選項來指定更新的間隔時間。以下指令將每隔五秒執行一次 ls -l 指令:

1
watch -n 5 ls -l

更改間隔時間

這個指令每隔3秒執行一次 ls -l

1
watch -n 3 ls -l

這個指令每隔0.5秒執行一次 ls -l

1
watch -n 0.5 ls -l

進階技巧

watch 指令的進階技巧使其更加靈活和強大。其中一個常用的技巧是使用 -d 選項來突出顯示指令輸出中發生變化的部分。這對於監視檔案變化或系統狀態非常有用。以下是一個範例:

1
watch -d df -h

這將每隔兩秒執行一次 df -h 指令,並在終端上突出顯示檔案系統使用情況發生變化的部分。

另一個有用的技巧是使用 -t 選項顯示當前的時間。這對於記錄指令執行的時間非常有用。例如:

1
watch -t date

這將每隔一秒執行一次 date 指令,並在終端上顯示當前的時間。

此外,watch 還允許使用者自定義終端視窗的標題,這可以透過 --title 選項實現。以下是一個範例:

1
watch --title="Custom Title" -n 10 -d df -h

這將在終端視窗的標題中顯示”Custom Title”,並每隔十秒突出顯示檔案系統使用情況發生變化的部分。

實用應用場景

除了上述基本用法和進階技巧之外,watch 指令還有許多實用的應用場景。以下是一些範例:

  1. 監視日誌檔案的變化:
1
watch tail /var/log/syslog

這將持續監視系統日誌檔案的變化,並將新的日誌內容顯示在終端上。

  1. 監視網路連接狀態:
1
watch -n 5 netstat -tuln

這將每隔五秒顯示一次系統中所有的 TCP 和 UDP 網路連接。

  1. 監視系統資源使用率:
1
watch -n 1 top

這將每秒顯示一次系統中各個行程的資源利用情況,包括 CPU 和記憶體使用情況。

總結

watch 指令是一個非常實用的工具,它可以幫助使用者輕鬆監視和跟蹤各種指令的執行情況。透過了解其基本用法、進階技巧以及實用的應用場景,使用者可以更好地利用這個功能強大的指令,提高工作效率,更好地管理和監控 Linux 系統。

以上就是 Linux watch 指令用法與範例的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Linux 常用指令教學懶人包
Linux wget 下載檔案用法與範例
Linux sed 字串取代用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux tee 同時螢幕標準輸出和輸出到檔案用法與範例
Linux xargs 參數列表轉換用法與範例
Linux tail 持續監看檔案輸出用法與範例
Linux du 查詢硬碟剩餘空間/資料夾容量用法與範例