[linux]rsync

參考網址:gtwang

Linux 使用 rsync 遠端檔案同步與備份工具教學與範例

rsync 基本用法

rsync 的基本語法結構如下:

rsync 參數 來源檔案 目的檔案

以下是最常見的幾個參數:

  • -v:verbose 模式,輸出比較詳細的訊息。
  • -r:遞迴(recursive)備份所有子目錄下的目錄與檔案。
  • -a:封裝備份模式,相當於 -rlptgoD,遞迴備份所有子目錄下的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記。
  • -z:啟用壓縮。
  • -h:將數字以比較容易閱讀的格式輸出。

rsync 遠端備份

rsync 也可以用於不同台機器之間的遠端備份,這樣的用法就跟 scp 指令很像,不過 rsync 會更有效率:

rsync -avzh /mypath/myfile.gz pi@192.168.1.12:/mybackup/

這樣就會將本地端的 myfile.gz 備份至 pi@192.168.1.12 的 /mybackup/ 目錄中,在遇到這種遠端備份的狀況時,rsync 預設會以 ssh 的方式登入遠端的機器,所以在執行這行備份指令之後,要接著輸入pi@192.168.1.12 的密碼,接著就會開始備份資料。

自訂 SSH 連接埠

正常 ssh 遠端登入服務的連接埠(port)號碼是 22,但有些人為了保護伺服器避免受到太多的網路攻擊,會將 ssh 的連接埠改成其他的號碼,例如 12345,不過這樣的話在使用 rsync 進行遠端備份資料時,就也要跟著指定連接埠號碼。

假設 192.168.1.12 這台伺服器的 ssh 服務連接埠號碼為 12345,以下是透過 rsync 將資料備份資料的範例:

rsync -avzh -e 'ssh -p 12345' /mypath/myfile.gz pi@192.168.1.12:/mybackup/

這裡我們多加入一個 -e 參數,其用途是指定遠端登入所要使用的指令,預設的指令就是 ssh,而這裡我們將指令變更為 ssh -p 12345,也就是使用 12345 這個連接埠登入 ssh 的意思(請參考 ssh 指令的 -p 參數用法)。

 

備份特定檔案

若要讓 rsync 在備份檔案時,排除所有 *.txt 的文字檔檔案,可以使用 --exclude 參數:

rsync -avh --exclude '*.txt' myfolder/ backup/

我們可以使用多個 --exclude 來排除多種檔案,例如:

rsync -avh --exclude '*.txt' --exclude '*.py' myfolder/ backup/

如果只想要備份某些特定的檔案,可以將 --exclude 與 --include 配合使用,例如只備份所有 *.c 的 C 語言原始碼:

rsync -avh --include '*.c' --include '*/' --exclude '*' myfolder/ backup/

限定備份檔案大小

rsync 也可以依照檔案的大小來選擇備份的檔案,

--min-size 可以指定備份檔案的大小下限,例如只備份 1MB 以上的檔案:

rsync -avh --min-size=1M myfolder/ backup/

而 --max-size 可以指定備份檔案的大小上限,例如只備份 4KB 以下的檔案:

rsync -avh --max-size=4K myfolder/ backup/

--min-size 與 --max-size 也可以同時使用,例如只備份 1KB 到 2MB 之間的檔案:

rsync -avh --min-size=1K --max-size=2M myfolder/ backup/

 

ssh 免密碼登入
用本機pi帳號,登入遠端pi帳號
client端pi身分 生成公鑰
ssh-keygen -t rsa -P '' (注:最後是二個單引號,表示不設定密碼)
然後分發公鑰到目標機器
ssh-copy-id -i ~/.ssh/id_rsa.pub 使用者名稱@對方機器IP (注意不要忘記了引數-i)
到此本機pi就可以免密碼登入遠端pi帳號了。ssh pi@遠端機器IP

但因讀取權限的問題,rsync是用root的身分建立crontab
所以還得將/home/pi/.ssh 的id_rsa 及 id_rsa.pub複製到/root/.ssh

 

發表於 Linux系統, 軟體使用 | 發表迴響

[linux]列出目錄所佔空間

參考網址:

du -sh *

 

發表於 程式設計 | 發表迴響

[sublime]sql function模式

參考網址: Create a Regex Macro in Sublime

sport.sql.php 誀個檔案中放著sql建立資料表的語法,因為有許多資料表,要找到想要的資料表常常得翻來翻去,著實麻煩。
想說如果有個類似UltraEdit的function列表就方便找尋了,於是試著做做看。

#function aa_game_date {
#
# 資料表格式: `game_date`
#

DROP TABLE IF EXISTS game_date;
CREATE TABLE game_date (
  game_date_id tinyint(4) NOT NULL auto_increment,
  #主索引鍵
  
  game_date_str char(4) NOT NULL default '0',
  #比賽日期
  
  PRIMARY KEY  (game_date_id)
)ENGINE=MyISAM DEFAULT CHARSET=utf8mb4  ;

#
# 列出以下資料庫的數據: `game_date`
#

INSERT INTO game_date VALUES (1, '0105');
INSERT INTO game_date VALUES (2, '0106');
INSERT INTO game_date VALUES (3, '0107');
INSERT INTO game_date VALUES (4, '0108');
#INSERT INTO game_date VALUES (5, '0205');
#} 


一開始糸嘗試用macro來做,發現macro無法記錄find 及 replace。
首先安裝symlist這個外掛,再來安裝regReplace外掛

JSON file with Find and Replace pairs

Go to the top menu Preferences/Package Settings/RegReplace/Rules-User.

{
    "format": "3.0",
    "replacements": {
        // function 變成function模式
        "func_start": {
            "find": "^#function",
            "replace": "function",
            "greedy": true
        },
        "func_end": {
            "find": "^#}",
            "replace": "}",
            "greedy": true
        },
        "func_top": {
            "find": "^#####top",
            "replace": "<?php",
            "greedy": true
        },
        "func_bottom": {
            "find": "^#####bottom",
            "replace": "?>",
            "greedy": true
        },
        // unfunction 變成註解模式
        "unfunc_start": {
            "find": "^function",
            "replace": "#function",
            "greedy": true
        },
        "unfunc_end": {
            "find": "^}",
            "replace": "#}",
            "greedy": true
        },
        "unfunc_top": {
            "find": "^<\\?php",
            "replace": "#####top",
            "greedy": true
        },
        "unfunc_bottom": {
            "find": "^\\?>",
            "replace": "#####bottom",
            "greedy": true
        }
    }
}
問號得加兩條\

JSON file with the Macro command

Go to the top menu Preferences/Package Settings/RegReplace/Rules-User.

[
  {
 	"caption": "RegReplace: function",
    "command": "reg_replace",
    "args": {"replacements": ["func_start","func_end","func_top","func_bottom"]}
  },
  {
 	"caption": "RegReplace: unfunction",
    "command": "reg_replace",
    "args": {"replacements": ["unfunc_start","unfunc_end","unfunc_top","unfunc_bottom"]}
  }
]

建立快捷鍵

Preferences/Key Buiding/user

[
	{
        "keys": ["ctrl+alt+f"],
        "command": "reg_replace",
        "args": {"replacements": ["func_start","func_end","func_top","func_bottom"]}
    },

	{
        "keys": ["ctrl+alt+u"],
        "command": "reg_replace",
        "args": {"replacements": ["unfunc_start","unfunc_end","unfunc_top","unfunc_bottom"]}
    }

]

 

原來不用這麼麻煩,outline外掛原本就內建sql模式,把語言改成sql,它就會自動抓'CREATE TABLE' 當大綱。
https://github.com/warmdev/SublimeOutline/issues/22
用ctrl+shift+p叫出Command Palette
輸入outline可以找到
Outline :Toggle Sort  切換list排序方式
Browse Mode:Outline(Left)
Browse Mode:Outline(Right)  list表放在右邊

發表於 程式設計, 軟體使用 | 發表迴響

[sublime]設定Sublime外掛快捷鍵–實現CSS顏色選取

參考網址:ItRead01

按下快捷鍵 Ctrl+Shift+P 調出命令板,在出現的文字框中輸入 Install Package(
或直接 輸入“ip”)選中 Install Package 並回車,輸入 ColorPicker再按 Enter(回
車)等待安裝完成

預設快捷鍵是ctrl+shift+c但容易衝突
Preferences->BrowsePackages進入外掛的資料夾
找到相應外掛目錄進入找到Default (Windows).sublime-keymap檔案修改其中內容即可,要修改成不易衝突的快捷鍵哦

目前設為 ctrl+alt+c  
從tools也可以找到進入ColorPicker的選項

發表於 程式設計, 軟體使用 | 發表迴響

[mysql]檢查欄位是否存在MySQL–check column exists

參考網址:痞客邦

SQL指令–mySQL 檢查欄位是否存在 (MySQL–check which column exists in table)


SELECT count(*) FROM information_schema.columns WHERE table_schema='<Database Name>' AND table_name = '<Table Name>' AND column_name = '<Column Name>'

results as below:

0     if the <Column Name> doesn't exist;

1     otherwise.

發表於 程式設計 | 發表迴響

[sublime]讓sublime有function list 的功能

參考網址:symList symList – clickable function list for Sublime Text

Download

symlist.py (Python source, 7kb)

Install

Download „symlist.py“ and copy the file to the Preferences / Browse Packages / „User“ directory.

For better handling, add a keyboard shortcut like

{ "keys": ["ctrl+alt+s"], "command": "symlist" }

to your personal key bindings.

還有一個外掛也有這樣的功能 outline
https://packagecontrol.io/packages/Outline

發表於 程式設計, 軟體使用 | 發表迴響

[pdo]php使用PDO從資料庫表中讀取資料的實現方法

參考網址:程式前沿 

try{
$pdo=new PDO('mysql:host=localhost;dbname=alpha','root','password');
}catch(PDOException $e){
echo "資料庫連線失敗,原因是:".$e->getMessage();
}
//從資料庫中選擇資料,並將結果賦予一個變數,testtable為資料庫表
$result=$pdo->query('select id,name,age from testtable');
//將查詢出的資料輸出
while($row=$result->fetch()){
echo "ID:".$row['id'];
echo "NAME:".$row['name'];
echo "AGE:".$row['age'];
}

 

發表於 程式設計 | 發表迴響

[扯鈴]相關網站

參考網址:

閃鈴教室 https://sites.google.com/view/shinydiaboloclassroom

閃鈴教室fb https://www.facebook.com/ShinyDiaboloClassroom

民俗體育教學資源網 https://custom.nutn.edu.tw/

109學年度全國民俗體育競賽 https://custom.nutn.edu.tw/contest/?q=47

 

發表於 程式設計 | 發表迴響

[sql]關於max()/min()和group by 的坑

參考網址:itread01 

目前仍在測試中

用子查詢也無法正確解決該問題

用sql的group by指令後 會用哪一筆資料當該組的代表呢?

發表於 程式設計 | 發表迴響

[php]error_reporting

參考網址:程式前沿 PHP中error_reporting()用法詳解

建議使用
error_reporting(7);
只顯示嚴重錯誤,有Fatal error:時也會顯示

ini_set('display_errors',1);
ini_set("error_reporting",7);
//ini_set("error_reporting","E_ALL & ~E_NOTICE");
//E_ALL & ~E_NOTICE 無法顯示 Fatal error:

 

1 E_ERROR 致命的執行時錯誤
2 E_WARNING 執行時警告(非致命性錯誤)
4 E_PARSE 編譯時解析錯誤
8 E_NOTICE 執行時提醒(經常是bug,也可能是有意的)
16 E_CORE_ERROR PHP啟動時初始化過程中的致命錯誤
32 E_CORE_WARNING PHP啟動時初始化過程中的警告(非致命性錯)
64 E_COMPILE_ERROR 編譯時致命性錯
128 E_COMPILE_WARNING 編譯時警告(非致命性錯)
256 E_USER_ERROR 使用者自定義的致命錯誤
512 E_USER_WARNING 使用者自定義的警告(非致命性錯誤)
1024 E_USER_NOTICE 使用者自定義的提醒(經常是bug,也可能是有意的)
2048 E_STRICT 編碼標準化警告(建議如何修改以向前相容)
4096 E_RECOVERABLE_ERROR 接近致命的執行時錯誤,若未被捕獲則視同E_ERROR
6143 E_ALL 除E_STRICT外的所有錯誤(PHP6中為8191,即包含所有)

 

發表於 程式設計 | 發表迴響