如何使用 C/C++ 中的 printf 函式:詳盡指南

本篇 ShengYu 介紹 C/C++ printf 用法與範例,在C/C++編程中,經常需要將資料印出。而printf函式正是這樣一個常用且強大的工具,它用於格式化輸出到標準輸出(如螢幕)。本文將深入探討printf函式的基本用法和一些高級技巧,幫助您更好地掌握這個函式,printf 詳細用法範例請繼續往下閱讀。

C 語言要將資料格式化輸出到標準輸出(stdout)可以使用 printf,要使用 printf 的話需要引入的標頭檔 <stdio.h>,如果要使用 C++ 的標頭檔則是引入 <cstdio>
printf 函式原型為

1
int printf(const char * format, ...);

const char *format:格式化字串,定義了輸出的格式。該字串包含普通字元和格式說明符。普通字元直接輸出,格式說明符用來格式化並插入後續變數。

...:可變參數清單,包含要格式化的資料。這些資料將根據格式化字串中的格式說明符依次插入。

printf 函式的回傳值是輸出字元的總數。如果發生輸出錯誤,則回傳一個負數。

C/C++ printf 基本用法

使用 printf 的基本用法如下:

1
2
3
4
5
6
#include <stdio.h>

int main() {
printf("格式化字串", 變數1, 變數2, ...);
return 0;
}

格式化字串中的格式說明符

格式化字串包含文字和格式說明符,格式說明符用於指示如何格式化變數。以下是常見的格式說明符:

  • %d:整數(十進位)
  • %f:浮點數
  • %c:單個字元
  • %s:字串
  • %x:整數(十六進位)

範例

以下是一些 printf 函式的範例程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main() {
int i = 42;
float f = 3.14159;
char c = 'A';
char str[] = "Hello, World!";

printf("整數:%d\n", i);
printf("浮點數:%f\n", f);
printf("字元:%c\n", c);
printf("字串:%s\n", str);

return 0;
}

執行以上程式碼,輸出結果如下:

1
2
3
4
整數:42
浮點數:3.141590
字元:A
字串:Hello, World!

高級用法

指定寬度和精度

您可以使用格式說明符來指定輸出的寬度和精度,例如:

  • %5d:最小寬度為 5 的整數
  • %.2f:小數點後保留 2 位的浮點數
  • %5.2f:最小寬度為 5 且小數點後保留 2 位的浮點數

以下是相應的範例程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

int main() {
int i = 42;
float f = 3.14159;

printf("寬度為 5 的整數:%5d\n", i);
printf("小數點後保留 2 位的浮點數:%.2f\n", f);
printf("寬度為 5 且小數點後保留 2 位的浮點數:%5.2f\n", f);

return 0;
}

執行以上程式碼,輸出結果如下:

1
2
3
寬度為 5 的整數:   42
小數點後保留 2 位的浮點數:3.14
寬度為 5 且小數點後保留 2 位的浮點數: 3.14

小結

printf 是 C 和 C++ 中格式化輸出的基本工具。透過使用格式說明符和各種選項,您可以輕鬆地控制輸出的格式,滿足不同的需求。掌握這些技巧,將讓您的編程工作更加得心應手。

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

其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
C/C++ printf 參數說明
C/C++ scanf 用法與範例
C/C++ sscanf 用法與範例
C/C++ snprintf 用法與範例
C/C++ sprintf 用法與範例
C/C++ printf 列印 size_t 的方法
32/64bit 作業系統 printf 列印 int64_t / uint64_t 的方法

macOS 下 RDP client 遠端桌面軟體

本篇 ShengYu 紀錄 macOS 下 RDP client 軟體,RDP 就是我們常聽到 Windows 的遠端桌面使用的協議,這次我是要在macOS 下 RDP client 來連接到遠端的 Ubuntu 24.04 電腦,而 Ubuntu 24.04 內建的就是支援 RDP,不要問我為什麼是 RDP 而不是 VNC 我不知道,想知道怎麼使用的繼續看下去,理論上這個軟體也可以連接到遠端的 Windows 上。

一般來說,到 Mac App Store 的 Microsoft Remote Desktop 或者叫 Microsoft 遠端桌面 下載安裝即可使用。

但假如你的 macOS 跟我一樣已經升不上去停留在 macOS 11.x 的話,那麼你是無法從 App store 下載的

適用於 macOS 的遠端桌面用戶端的新功能裡點選Microsoft AppCenter
從這邊下載歷史舊版本

Version 10.8.4 (2111) 可用
Jun 15, 2023 at 02:59
60.05 MB

Version 10.9.3 (2158) 可用
Sep 22, 2023 at 05:35
55.47 MB

Version 10.9.6 (2185) 可用
Feb 14, 2024 at 07:31
55.64 MB

基本上 10.9.6 (2185) 以下的版本都可以使用,超過以上的版本會需要更高的 macOS 版本。

可能遇到的問題:可以開啟但連線後無法開啟新畫面,
其中一個原因是因為你的 Ubuntu 已經螢幕鎖定了,需要解鎖
解除螢幕鎖定Settings > Privacy & Security
如果 Automatic Screen Lock 已開啟,將其關閉。

以上就是 macOS 下 RDP client 遠端桌面軟體介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

Ubuntu 下使用 rm 指令如何避免誤刪除

本篇 ShengYu 介紹在 Ubuntu 下使用 rm 指令如何避免誤刪除,在使用 Ubuntu 的過程中,檔案管理是日常操作中不可或缺的一部分。其中,rm 指令是刪除檔案和目錄的常用工具。然而,不小心刪除了重要檔案是一個常見且令人沮喪的問題,本人可是有切身之痛阿,曾經誤刪除重要資料然後使用救援工具挽救資料,最後還是流失不少重要資料。本文將介紹幾種方法,幫助你在 Ubuntu 中使用 rm 指令時避免誤刪除檔案。

你可以透過將 rm 指令別名為 trash 來實現使用 trash-cli 工具代替 rm 指令的效果。這樣,每當你使用 rm 指令時,檔案將被移動到垃圾桶而不是直接刪除。以下是具體步驟:

1. 安裝 trash-cli

首先,確保你已經安裝了 trash-cli 工具。如果還沒有安裝,可以使用以下指令進行安裝:

1
sudo apt-get install trash-cli

2. 建立別名

打開你的 ~/.bashrc 檔案(或 ~/.zshrc 檔案,如果你使用 Zsh):

1
vim ~/.bashrc

在檔案末尾新增以下行,將 rm 指令別名為 trash

1
alias rm='trash-put'

3. 重新載入設定檔案

保存並關閉檔案,然後重新載入 ~/.bashrc 檔案以使更改生效:

1
source ~/.bashrc

4. 驗證

現在,你可以驗證新的 rm 別名是否正常工作。嘗試刪除一個檔案:

1
2
touch testfile
rm testfile

然後,檢查檔案是否在垃圾桶中:

1
trash-list

你應該能看到 testfile 在垃圾桶中。

5. 還原檔案

如果你誤刪了檔案,可以使用 trash-restore 指令恢覆檔案:

1
trash-restore

按照提示選擇你要恢覆的檔案。

透過這些步驟,你可以將 rm 指令別名為 trash,這樣在刪除檔案時,它們會被移動到垃圾桶,而不是直接刪除,從而有效避免誤刪檔案。

要清空垃圾桶,你可以使用 trash-empty 指令。這個指令會永久刪除垃圾桶中的所有檔案。你也可以選擇只刪除一定天數前的檔案。以下是一些常用的方法:

6. 清空所有垃圾桶內容

1
trash-empty

這個指令會永久刪除垃圾桶中的所有檔案。

7. 清空指定天數之前的檔案

如果你只想刪除一定天數之前的檔案,例如,刪除7天前的檔案,可以使用:

1
trash-empty 7

這個指令會永久刪除垃圾桶中7天前的檔案。

3. 查看幫助

如果你需要更多關於 trash-empty 指令的資訊,可以查看幫助:

1
trash-empty --help

以上就是 Ubuntu 下使用 rm 指令如何避免誤刪除介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
macOS 下使用 rm 指令如何避免誤刪除

Linux 全面了解 Nmap:用途、範例及應用指南

Nmap(Network Mapper)是一個強大且開源的網路掃描工具,被廣泛應用於網路探索和安全審計。無論您是網路管理員還是安全專業人員,Nmap 都是您不可或缺的工具。在這篇文章中,我們將詳細介紹 Nmap 的主要用途,並提供一些實用的範例,幫助您更好地掌握這個工具的應用。

Nmap 的主要用途

Nmap 的功能非常豐富,以下是其主要用途:

  1. 發現主機
    使用 Nmap,可以迅速確定網路上哪些主機是活動的,這對於大型網路尤其重要。主機發現是網路管理的基礎工作,有助於管理和優化網路資源。

  2. 連接埠掃描
    Nmap 可以掃描目標主機的開放連接埠,幫助您了解哪些服務正在執行。連接埠掃描有助於識別潛在的安全漏洞和不必要的開放連接埠。

  3. 服務識別
    除了確定連接埠是否開放,Nmap 還能進一步識別這些連接埠上執行的應用程式及其版本。這對於管理和保護網路上的服務至關重要。

  4. 作業系統檢測
    Nmap 具備強大的作業系統檢測功能,可以判斷目標主機的作業系統及其版本,這對於制定安全策略和漏洞修復計劃至關重要。

  5. 安全審計
    Nmap 的強大功能使其成為進行安全審計的理想工具。它可以幫助檢查網路裝置和服務的漏洞,確保您的網路環境安全可靠。

Nmap 的安裝方式

在 mac 下可以使用 brew install nmap 來安裝 Nmap

在 Ubuntu 下可以使用 sudo apt install nmap 來安裝 Nmap

Nmap 的常見範例

以下是一些常見的 Nmap 使用範例,這些範例展示了 Nmap 的不同功能和應用場景:

  1. 基本掃描
    這是最基本的 Nmap 使用方式,用於掃描指定的 IP 或域名。

    1
    nmap <目標IP或域名>

    範例:

    1
    nmap 192.168.1.1
  2. 掃描特定連接埠
    您可以指定要掃描的連接埠範圍,這對於僅需檢查特定服務的情況非常有用。

    1
    nmap -p <連接埠範圍> <目標IP>

    範例:

    1
    nmap -p 80,443 192.168.1.1
  3. 服務版本檢測
    這個選項用於識別正在執行的應用程式及其版本。

    1
    nmap -sV <目標IP>

    範例:

    1
    nmap -sV 192.168.1.1
  4. 作業系統檢測
    Nmap 可以用來判斷目標主機的作業系統。

    1
    nmap -O <目標IP>

    範例:

    1
    nmap -O 192.168.1.1
  5. 使用 Ping 掃描發現活躍主機
    這個選項用來掃描整個網段,找出哪些主機是活躍的。-sn: 這個選項表示僅進行 Ping 掃描,也稱為「主機發現模式」。它不會掃描連接埠,而是檢查哪些主機是活動的(在線的)。執行這個指令的結果是 Nmap 將告訴你這個 IP 範圍內有哪些主機是在線的,而不會提供有關這些主機上開放的連接埠或執行的服務的資訊。

    1
    nmap -sn <目標網段>

    範例:

    1
    nmap -sn 192.168.1.0/24

    這個選項用來掃描某個範圍的。這個指令指定了從 192.168.1.1192.168.1.255 的 IP 地址範圍

    1
    nmap -sn 192.168.1.1-255

    以下這個指令指定了從 192.168.1.100192.168.1.200 的 IP 地址範圍,例如我區網下有一台Raspberry Pi,我就可以用 nmap 去掃描DHCP分配給的IP,

    1
    nmap -sn 192.168.1.100-200
  6. 進行 UDP 掃描
    除了 TCP 掃描,Nmap 還能進行 UDP 掃描,這對於檢查 UDP 服務非常重要。

    1
    nmap -sU <目標IP>

    範例:

    1
    nmap -sU 192.168.1.1
  7. 檢查特定主機的所有開放連接埠
    使用此指令,可以檢查目標主機上的所有連接埠。

    1
    nmap -p- <目標IP>

    範例:

    1
    nmap -p- 192.168.1.1
  8. 啟用 Aggressive 模式進行詳細掃描
    Aggressive 模式將啟用更多的 Nmap 特性,包括作業系統檢測、版本檢測和路徑追蹤。

    1
    nmap -A <目標IP>

    範例:

    1
    nmap -A 192.168.1.1

Nmap 的應用場景

Nmap 不僅在網路管理和安全審計中發揮重要作用,還能應用於其他多種場景。例如,在企業網路中,網路管理員可以使用 Nmap 進行常規的網路檢查和維護,確保網路資源的最佳設定和執行。在安全領域,安全專業人員可以使用 Nmap 來進行滲透測試和漏洞評估,確保系統免受攻擊。

Nmap 還支持豐富的腳本(NSE,Nmap Scripting Engine),這些腳本可以用來自動化任務和擴展功能,使其更適合於複雜的網路環境和特定的安全需求。

總結來說,Nmap 是一個功能強大且靈活的工具,其廣泛的應用範圍和強大的功能使其成為網路管理和安全領域中不可或缺的工具。無論是進行簡單的網路掃描還是複雜的安全審計,Nmap 都能幫助您高效地完成任務,確保網路環境的安全和穩定。

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

了解 PHP 中的 session_start() 函式用途與範例

本篇 ShengYu 介紹 PHP session_start 用法與範例,在 PHP 開發中,session_start(); 函式扮演著關鍵的角色,尤其在管理使用者會話和保存使用者資料方面。本文將詳細介紹 session_start(); 函式的作用、用法以及使用時需注意的事項。

1. 會話(Session)的基本概念

會話是一種在使用者與網站之間保持狀態的機制。透過會話,我們能夠在使用者訪問網站的不同頁面之間儲存和共享使用者資料,如登錄狀態、購物車內容等。

2. session_start(); 的作用與功能

session_start(); 函式的主要作用是啟動一個新的會話或恢復現有的會話。它執行以下主要任務:

  • 檢查是否已存在會話 ID,若無則建立新的會話 ID。
  • 載入會話資料,並將其儲存在伺服器端。
  • 設定會話變數,使開發者可以儲存和訪問會話資料。

3. 使用 session_start(); 的範例

以下是一個簡單的範例,示範了如何使用 session_start();

1
2
3
4
5
6
7
8
9
10
<?php
// 啟動會話
session_start();

// 設定會話變數
$_SESSION['username'] = 'exampleUser';

// 訪問會話變數
echo 'Hello, ' . $_SESSION['username'];
?>

在此範例中,我們首先啟動了會話,然後設定了一個會話變數 username,最後訪問了該變數。這樣,無論使用者訪問網站的哪個頁面,都可以取得並使用這個會話變數。

4. 使用 session_start(); 的注意事項

在使用 session_start(); 函式時,需要注意以下事項:

  • 呼叫 session_start(); 應該在所有的 HTML 輸出之前,以避免可能的錯誤。
  • 確保伺服器的會話儲存設定正確,以免造成安全風險或性能問題。

5. 結合 mysqli 的範例

在這個範例中,我們結合了 session_start(); 和 mysqli,首先建立了 mysqli 連接,然後啟動了會話,設定了會話變數 username,最後使用 $_SESSION['username'] 來查詢資料庫中的使用者資訊。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
// 建立 mysqli 連接
$mysqli = new mysqli("localhost", "username", "password", "database");

// 檢查連接是否成功
if ($mysqli->connect_error) {
die("連接失敗: " . $mysqli->connect_error);
}

// 啟動會話
session_start();

// 設定會話變數
$_SESSION['username'] = 'exampleUser';

// 使用 mysqli 進行資料庫操作
$query = "SELECT * FROM users WHERE username = '" . $_SESSION['username'] . "'";
$result = $mysqli->query($query);

if ($result->num_rows > 0) {
// 輸出資料
while ($row = $result->fetch_assoc()) {
echo "使用者名: " . $row["username"] . "<br>";
echo "郵箱: " . $row["email"] . "<br>";
}
} else {
echo "0 結果";
}

// 關閉 mysqli 連接
$mysqli->close();
?>

6. 結合 PDO 的範例

在這個範例中,我們結合了 session_start(); 和 PDO,首先建立了 PDO 連接,然後啟動了會話,設定了會話變數 username,最後使用 PDO 查詢了資料庫中的使用者資訊。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
// PDO 連接資料庫
try {
$pdo = new PDO("mysql:host=localhost;dbname=mydatabase", "username", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("資料庫連接失敗: " . $e->getMessage());
}

// 啟動會話
session_start();

// 設定會話變數
$_SESSION['username'] = 'exampleUser';

// 使用 PDO 查詢資料庫
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(':username', $_SESSION['username']);
$stmt->execute();

$result = $stmt->fetch(PDO::FETCH_ASSOC);

if ($result) {
// 輸出資料
echo "使用者名: " . $result["username"] . "<br>";
echo "郵箱: " . $result["email"] . "<br>";
} else {
echo "0 結果";
}
?>

7. 常見錯誤

如果遇到 Warning: session_start(): Session cannot be started after headers have already been sent 代表什麼意思呢?這個錯誤通常出現在嘗試呼叫 session_start() 函式時,而在此之前已經有輸出發送到瀏覽器了。這是因為 session_start() 需要在任何輸出(包括空格、HTML標簽、錯誤資訊等)之前呼叫。

解決方法1:確保 session_start() 在腳本的最頂部
確保 session_start() 是腳本中的第一個呼叫,位於任何 HTML 或 PHP 輸出之前。例如:

1
2
3
4
<?php
session_start();
// 你的其他程式碼
?>

解決方法2:檢查包括的檔案
確保所有包含的檔案在 session_start() 呼叫之前也沒有任何輸出。例如:

1
2
3
4
<?php
include('config.php'); // 確保 config.php 沒有輸出
session_start();
?>

解決方法3:避免多余的空格或新行
確保在 <?php 之前和 ?> 之後沒有任何空格或新行。即使是一個空格也會被視為輸出。例如:

1
2
3
4
<?php
// 確保檔案開始處沒有空格或新行
session_start();
?>

解決方法4:使用輸出緩沖
如果你無法確定在哪些地方可能有輸出,可以使用輸出緩沖來捕獲任何意外的輸出:

1
2
3
4
5
6
<?php
ob_start();
session_start();
// 你的其他程式碼
ob_end_flush();
?>

如果你仍然遇到問題,可以在 session_start() 呼叫之前新增以下程式碼,幫助確定已經發送的輸出位置:

1
2
3
4
5
6
<?php
if (headers_sent($file, $line)) {
die("Headers already sent in $file on line $line");
}
session_start();
?>

這段程式碼會檢查是否已經發送了頭資訊,並報告具體的位置,這樣你就可以準確地找出並修正問題。

結語

session_start(); 函式是 PHP 開發中一個非常重要的工具,它使我們能夠有效地管理使用者會話和資料。透過深入理解它的作用和使用方式,開發者可以更好地利用會話機制,為使用者提供更好的網站體驗。

希望本篇能幫助您更好地理解 PHP session_start(); 函式的作用與使用方式!
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
如果你想學習 PHP 相關技術,可以參考看看下面的文章,
PHP 和 PDO 進行資料庫操作
PHP 執行發生錯誤在 Chrome/Firefox 上顯示 Error 500,要怎麼讓 PHP 顯示錯誤
PHP substr 函式全面解析與應用範例
深入理解 PHP 中的 isset 用法、範例及最佳實踐
PHP $_POST 變數用途、語法與實用範例詳解
PHP 中的 Session 用途與實踐範例:完整指南

如何使用 Python slack_sdk 發送訊息給 Slack

本篇 ShengYu 介紹如何使用 Python 透過 slack_sdk 發送訊息到 Slack,在現代開發環境中,能夠快速與團隊溝通是提升工作效率的關鍵之一。Slack 作為一個廣泛使用的團隊協作工具,提供了強大的 API,可以讓開發者輕鬆地自動化各種操作。本文將介紹如何使用 slack_sdk 這個 Python 套件來發送訊息到 Slack 頻道。

步驟 1:安裝 slack_sdk 套件

如果傾向使用虛擬環境的話,請用以下指令,要離開虛擬環境的話要下 deactivate 指令,

1
2
python -m venv myenv
source myenv/bin/activate

首先,我們需要安裝 slack_sdk 套件。在終端中運行以下命令來安裝它:

1
pip install slack_sdk

這個命令會安裝 slack_sdk 到你的 Python 環境中,使你能夠在 Python 代碼中使用它。

步驟 2:取得 Slack Bot Token

要與 Slack API 互動,你需要一個 Slack Bot Token。按照以下步驟來獲取這個 token:

  1. 登錄到 Slack API 頁面。
  2. 點擊“Create an app”按鈕,選擇“From scratch”。
  3. 為你的應用程式命名,並選擇你要將其添加到的工作區。
  4. 創建應用後,進入“OAuth & Permissions”頁面,並在“Scopes”部分添加 chat:write scope。
  5. 點擊“Install App to Workspace”按鈕,並授權應用程式。
  6. 完成後,你將看到一個 Bot User OAuth Token。複製這個 token,稍後會在代碼中用到。

轉到“OAuth和權限”選項卡,向下滾動到Scopes卡片,在Bot Token Scopes下,點選“Add OAuth Scope”來新增’chat:write’,’chat:write.customize’,’files:read’,’files:write’Scopes(總共需要點選“新增OAuthScopes”四次)。

步驟 3:編寫 Python 代碼發送訊息

有了 slack_sdk 套件和 Bot Token,我們就可以開始編寫代碼來發送訊息。以下是示範代碼,
將 xoxb-your-slack-bot-token 替換為您的 Slack Bot Token,不想寫在code裡也可用 os.environ["SLACK_BOT_TOKEN"] 來取得 SLACK_BOT_TOKEN 環境變數,
之後再呼叫 chat_postMessage 方法發送訊息,
將 channel 替換為您的頻道 ID 或使用者名,將 text 換成你要傳輸的內容,
try except 則是捕獲錯誤並打印,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python3
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
#import os

# 輸入你的 Slack Bot Token
slack_token = "xoxb-your-slack-bot-token"
#slack_token = os.environ["SLACK_BOT_TOKEN"]

# 建立 Slack 客戶端
client = WebClient(token=slack_token)

try:
# 發送訊息到指定頻道
response = client.chat_postMessage(
channel="#general", # 替換成你的頻道 ID 或名稱
text="Hello, world!"
)
assert response["message"]["text"] == "Hello, world!"
print("訊息發送成功")
#print(response["ok"])
except SlackApiError as e:
print(f"發送訊息失敗: {e.response['error']}")

在這段代碼中,我們首先從 slack_sdk 導入 WebClientSlackApiError。然後使用你的 Bot Token 創建一個 Slack 客戶端,並使用 chat_postMessage 方法發送訊息到指定頻道。如果訊息發送成功,你將看到“訊息發送成功”的提示;否則,會顯示錯誤訊息。

如果想發送可點擊超連結URL的話,像下面這樣,

1
text="<https://shengyu7697.github.io/linux-watch/|Linux watch 指令用法與範例> 參考這篇"

另外簡單介紹其他種類型,粗体、斜体、链接、列表,

1
text="*Bold* _Italic_ `Code` <http://example.com|Link>"

結論

使用 slack_sdk 套件發送訊息到 Slack 是一個簡單且強大的自動化方法。只需按照上述步驟安裝套件、獲取 Bot Token 並編寫代碼,即可輕鬆實現訊息的自動發送。這不僅能夠提升你的工作效率,還能使團隊溝通更加順暢。

另外還有發送圖片、附件檔案、Emoji 的方式,有興趣的話可以留言讓我知道,有機會我另外寫一篇介紹。

以上就是如何使用 Python 發送訊息給 Slack 的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其他參考
如何使用Python发送Slack消息
使用 Slack API 傳遞訊息至 Slack頻道
為自己寫程式 - 簡單寫個 .NET Slack 訊息發送程式

其它相關文章推薦
Python 新手入門教學懶人包

macOS 下使用 rm 指令如何避免誤刪除

本篇 ShengYu 介紹 macOS 下使用 rm 指令如何避免誤刪除,在 macOS 下,使用 rm 指令刪除檔案和目錄是一種常見的操作。然而,誤刪除重要檔案可能帶來不小的麻煩。為了防止這類情況,我們可以採用一些替代方法來減少風險,其中之一便是使用 trash 指令。這篇文章將介紹如何在 macOS 上安裝和使用 trash 指令,讓你的檔案刪除操作更加安全可靠。

什麼是 trash 指令?

trash 指令是一個指令行工具,它將檔案移動到系統的垃圾桶,而不是直接永久刪除。這樣,即使你誤刪除了檔案,也可以輕鬆地從垃圾桶中還原。

為什麼選擇 trash 指令?

  1. 還原檔案:誤刪除的檔案可以從垃圾桶中輕鬆還原。
  2. 安全可靠:減少了使用 rm 指令時誤刪除重要檔案的風險。
  3. 易於使用trash 指令的使用方法與 rm 指令類似,學習成本低。

如何在 macOS 上安裝 trash 指令?

首先,我們需要安裝 Homebrew,這是一個 macOS 的包管理器。如果你的系統中尚未安裝 Homebrew,可以透過以下指令來安裝:

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安裝完成後,可以使用 Homebrew 來安裝 trash

1
brew install trash

在 macOS 下建議不要用 trash-cli brew install trash-cli 這套而是使用 trash 這套,因為 trash-cli 會丟到 ~/.local/share/Trash 不會丟進 Finder 的垃圾桶,這樣不方便結合 Finder 的操作。

如何使用 trash 指令?

trash 指令的基本使用方法與 rm 指令類似,只需將 rm 替換為 trash 即可。例如:

1
trash filename

如果你想刪除多個檔案,可以這樣操作:

1
trash file1 file2 file3

使用 alias 別名替換 rm 指令

為了進一步簡化操作並降低風險,我們可以為 rm 指令設定別名,使其預設使用 trash 指令。這樣,每次你使用 rm 指令時,實際上會呼叫 trash 指令。

打開你的 shell 設定檔案(例如 .bashrc.zshrc.bash_profile),並新增以下行:

1
alias rm='trash'

保存檔案並重新載入設定:

1
source ~/.bashrc   # 或 source ~/.zshrc

這樣,當你輸入 rm filename 時,實際上會執行 trash filename,避免了誤刪除檔案的風險。

如何從垃圾桶中還原檔案?

要還原誤刪除的檔案,可以打開 Finder,然後導航到垃圾桶。找到你需要還原的檔案,右鍵點擊選擇還原即可。

結論

在 macOS 下使用 rm 指令時,誤刪除檔案是一個常見問題。使用 trash 指令可以有效避免這一風險,並提供一個安全的檔案刪除替代方案。透過設定 alias 別名,你可以進一步簡化操作,確保檔案刪除過程更加安全可靠。希望這篇文章能幫助你更好地保護你的重要檔案,提升你的 macOS 使用體驗。

以上就是 macOS 下使用 rm 指令如何避免誤刪除的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Ubuntu 下使用 rm 指令如何避免誤刪除

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 按讚支持一下!