捐血一袋救人一命

江蘇拙政園

江蘇 拙政園

全家福

日本 和歌山城

賞楓之旅

千燈 夕照

水鄉千燈

蘆洲 微風運河

破曉時分

2024年7月1日 星期一

Linux 上常用的打包壓縮軟體

Linux 上常見的打包、壓縮軟體

  • tar:(Tape Archive)是一個用於檔案打包的工具,最早用於將多個檔案和目錄打包成一個檔案,便於在磁帶等存儲設備上進行備份和傳輸。
  • gzip:使用 DEFLATE 算法,基於 LZ77 和霍夫曼編碼。
  • bzip2:使用 Burrows-Wheeler 變換和 Run-Length Encoding (RLE) 算法,並結合霍夫曼編碼。
  • xz:使用 LZMA(Lempel-Ziv-Markov chain algorithm)算法,這是一種高度優化的壓縮算法,提供了非常高的壓縮比。

要注意的是,tar 只是打包工具,將多個檔案目錄屬性擁有者ID 等資訊打包成一個 tarball File,本身並沒有壓縮

所以使用 tar,會搭配 gzip, bzip2, 或是 xz 等壓縮工具,來節省空間或是傳書時間

壓縮比:gzip < bzip2 < xz
壓縮速度:gzip > bzip2 > xz
解壓縮速度:gzip > bzip2 > xz
資源用量:gzip < bzip2 < xz

雖然 7z & rar 都有 for Linux 版本,不過在 Linux 上並不流行

tar 搭配 gzip 打包壓縮

tar -zcvf archive.tar.gz /path/to/directory ...

有的人會將 archive.tar.gz 直接命名為 archive.tgz

tar 搭配 bzip2 打包壓縮

tar -jcvf archive.tar.bz2 /path/to/directory ...

注意:參數 j 是小寫

tar 搭配 xz 打包壓縮

tar -Jcvf archive.tar.xz /path/to/directory ...

注意:參數 J 是大寫


常用參數意義

參數 說明
c Create archive
v Verbosely
f use archive file or device ARCHIVE
t List all files in archive
x Extract files from archive
A append tar files to an archive
d find differences between archive and file system
r append files to the end of an archive
u only append files newer than copy in archive

接下來,搭配 ssh,進行遠端管理

命令遠端伺服器壓縮資料

ssh user@box tar zcvf - /dir1/ > /destination/file.tar.gz

將 tar 打包輸出的結果,透過 Pipe 傳給 gzip,並指定 gzip 壓縮程度

ssh user@box 'cd /dir1/ && tar -cf - file | gzip -9' >file.tar.gz

壓縮本機檔案,然後透過 SSH 傳送到遠端伺服器保存

tar zcvf - /wwwdata | gzip | ssh user@dumpserver.nixcraft.in "cat > /backup/wwwdata.tar.gz"

tar 打包壓縮 > gpg加密 > ssh 傳送到遠端主機 cat 輸出成檔案

tar zcf - /data2/ | gpg -e | ssh vivek@nas03 'cat - > data2-dd-mm-yyyy.tar.gz.gpg'

如果遠端伺服器需要特權,ssh 加上 -t 參數,使用 sudo

tar zcvf - /wwwdata | ssh -t vivek@192.168.1.201 "sudo cat > /backup/wwwdata.tar.gz"

命令遠端伺服器壓縮檔案,並傳送到本機目前路徑

cd /path/local/dir/ && ssh vivek@server1.cyberciti.biz 'tar zcf - /some/dir' | tar zxf -

使用 dd 指令備份硬碟 /dev/sdvf 到遠端

dd if=/dev/sdvf | ssh backupimg@vpc-aws-mumbai-backup-001 'dd of=prod-disk-hostname-sdvf-dd-mm-yyyy.img'

從遠端備份硬碟資料還原到本地端

ssh backupimg@vpc-aws-mumbai-backup-001 'dd if=prod-disk-hostname-sdvf-dd-mm-yyyy.img' | dd of=/dev/sdvf

使用 SCP 備份,遇到連結或是特殊裝置路徑就會失敗,可以使用 tar 來備份

ssh vivek@nuc-box 'tar czf - /home/vivek' | tar xvzf - -C /home/vivek
cat my-data.tar.gz | ssh user@server1.cyberciti.biz "cd /path/to/dest/; tar zxvf -"

顯示壓縮進度條

cd /dir/to/backup/ && tar zcf - . | pv | ssh vivek@server1.cyberciti.biz "cat > /backups/box42/backup-dd-mm-yyyy.tgz"

2024年6月28日 星期五

Windows 沙箱環境設定檔

沙箱環境設定檔 Sample

將XML 內容存成副檔名為 ,wsb 設定檔,點擊設定檔,就可以按照設定開啟沙箱

<!-- 副檔名 .wsb -->
<Configuration>
<!-- 設定是否使用獨立顯卡晶片 -->
<VGpu>Default</VGpu>
<Networking>Default</Networking>
<!-- 將本機網路對應到沙箱 -->
<MappedFolders>
	<MappedFolder>
		<!-- 本機路徑 ->>
		<HostFolder>D:\Downloads\Portable Apps</HostFolder>
		<!-- 是否設定唯讀 -->
		<ReadOnly>true</ReadOnly>
	</MappedFolder>
</MappedFolders>
<!-- 啟動沙箱時,要執行的程式 -->
<LogonCommand>	
	<Command>explorer.exe C:\Users\WDAGUtilityAccount\Desktop\Portable Apps\4K Video Downloader Portable v4.12.5.3670</Command>
	<Command>explorer.exe C:\Users\WDAGUtilityAccount\Desktop\Portable Apps\Musify\Musify.exe</Command>
</LogonCommand>
</Configuration>

Windows電腦認證管理員

Windows認證管理員

控制台 > 使用者帳戶 > 認證管理員

不知何時,Windows Update 之後,原先儲存的遠端桌面密碼都沒用了,每次登入都要手動輸入密碼,真的很煩!
使用 cmdkey 指令去查詢,會發現原先儲存的密碼類型,都變成網域密碼,微軟真的很雞婆

讀取目前所有遠端桌面(Terminal Service)的認證清單,並全部移除

$(cmdkey /list:TERMSRV/*) | Where-Object { $_ -match "目標: " } | ForEach-Object {
    $target = $_
    $target = $target -replace "目標: ","" -replace " ",""
    (cmdkey /delete:$target)
}

重新用一般標準方式儲存,類型會是標準

cmdkey /generic:TERMSRV/[IP] /user:[ACCOUNT] /pass:"[PASSWORD]"

讀取目前遠端桌面所有認證資訊

$Patten = "目標: |類型: |使用者: "
$List = @()
$Info = $(cmdkey /list:TERMSRV/*) | Select-String -Pattern $Patten 
For ($i=0; $i -le $Info.Count; $i+=3){
    $List += New-Object -TypeName PSOBject -Property @{
        "Target" = $Info[$i] -replace "\s+目標:\s+",""
        "Type" = $Info[$i+1] -replace "\s+類型:\s+",""
        "User" = $Info[$i+2] -replace "\s+使用者:\s+",""
    }
}
$Domain = $List | Where-Object { $_.Type -eq "網域密碼" }
If ($Domain.Count -eq 0){
    $List | Sort-Object -Property Target
}Else{
    ForEach($Key in $Domain){
        (cmdkey /delete:$Key.Target)
    }
}

2024年6月26日 星期三

HTTP Status Code

HTTP Status Code

狀態碼 說明 類別
100 Continue 請求者應繼續進行請求
101 Switching Protocols 服務器根據請求切換協議
102 Processing (WebDAV) 服務器已經收到並正在處理請求,但無響應可用
200 OK 請求成功
201 Created 請求成功並且資源已被創建
202 Accepted 請求已接受,但尚未處理完成
203 Non-Authoritative Information 請求成功,但返回的元數據可能來自第三方源
204 No Content 請求成功但無內容返回
205 Reset Content 請求成功,要求重置文檔視圖
206 Partial Content 服務器成功處理了部分 GET 請求
207 Multi-Status (WebDAV) 返回多個資源的狀態
208 Already Reported (WebDAV) DAV 之前已經枚舉的成員,不需要再次列出
226 IM Used 伺服器完成了對資源的 IM(instance-manipulations)請求
300 Multiple Choices 請求的資源有多個表示
301 Moved Permanently 永久重定向:HTTP 301 狀態碼表示資源已永久移動到新的 URL,未來的請求應該使用新的 URL
緩存行為:瀏覽器和搜索引擎會更新資源的 URL 並緩存這個重定向,未來的請求將自動使用新 URL
SEO:對於搜索引擎優化(SEO),301 重定向將權重轉移到新的 URL 上,這有助於保持網站的排名
302 Found 臨時重定向:HTTP 302 狀態碼表示資源臨時移動到新的 URL,未來的請求應該仍使用原始 URL。
緩存行為:瀏覽器和搜索引擎通常不會緩存這個重定向,未來的請求仍然會訪問原始 URL。
SEO:對於 SEO,302 重定向不會將權重轉移到新的 URL 上,因為它被認為是臨時的。
303 See Other 請求的資源可在其他 URI 上找到,應使用 GET 方法獲取
304 Not Modified 資源未修改,可以使用緩存版本
305 Use Proxy 請求應通過代理訪問資源
307 Temporary Redirect 暫時重定向:HTTP 307 表示這個重定向是臨時的。未來請求仍然應該使用原始 URL。
保持方法和正文:與 302 Found 狀態碼不同,307 明確要求客戶端在重定向時保持原始的 HTTP 方法和請求正文。例如,如果原始請求是 POST,重定向後仍然是 POST
308 Permanent Redirect 永久重定向:HTTP 308 表示這個重定向是永久的。未來的請求應該使用新的 URL。
保持方法和正文:308 與 301 Moved Permanently 類似,但明確要求客戶端在重定向時保持原始的 HTTP 方法和請求正文。例如,如果原始請求是 POST,重定向後仍然是 POST。
400 Bad Request 服務器無法理解請求
401 Unauthorized 未經身份驗證
402 Payment Required 保留將來使用
403 Forbidden 服務器拒絕請求
404 Not Found 資源未找到
405 Method Not Allowed 請求方法不被允許
406 Not Acceptable 請求的資源的內容特性無法滿足請求頭中的條件
407 Proxy Authentication Required 需要代理身份驗證
408 Request Timeout 請求超時
409 Conflict 請求與資源的當前狀態發生衝突
410 Gone 資源已被永久刪除
411 Length Required 需要有效的內容長度標頭
412 Precondition Failed 先決條件失敗
413 Payload Too Large 請求負載過大
414 URI Too Long 請求 URI 過長
415 Unsupported Media Type 不支持的媒體類型
416 Range Not Satisfiable 請求範圍不符合可用範圍
417 Expectation Failed 服務器未能滿足請求頭的期望值
418 I’m a teapot HTCPCP/1.0 錯誤代碼
421 Misdirected Request 請求導向錯誤
422 Unprocessable Entity (WebDAV) 語義錯誤,無法響應
423 Locked (WebDAV) 資源被鎖定
424 Failed Dependency (WebDAV) 由於之前的請求失敗,當前請求失敗
425 Too Early 服務器拒絕處理可能被重放的請求
426 Upgrade Required 需要切換協議
428 Precondition Required 要求請求附帶前置條件
429 Too Many Requests 請求過多
431 Request Header Fields Too Large 請求頭字段過大
451 Unavailable For Legal Reasons 因法律原因不可用
500 Internal Server Error 服務器內部錯誤
501 Not Implemented 服務器不支持實現請求的方法
502 Bad Gateway 無效的響應
503 Service Unavailable 服務器不可用
504 Gateway Timeout 網關超時
505 HTTP Version Not Supported 不支持的 HTTP 版本
506 Variant Also Negotiates 內部配置錯誤
507 Insufficient Storage (WebDAV) 存儲空間不足
508 Loop Detected (WebDAV) 檢測到循環
510 Not Extended 需要進行擴展
511 Network Authentication Required 需要網絡身份驗證

狀態碼 說明 重定向類型 緩存行為 請求方法 使用場景
301 Moved Permanently 永久重定向 瀏覽器和搜索引擎會更新 URL 並緩存重定向 可能改變方法為 GET(取決於瀏覽器) 當資源永久移動到新位置,應用於 SEO 轉移權重的情況,例如網站遷移或永久更改資源 URL。
302 Found 臨時重定向 瀏覽器和搜索引擎通常不會緩存重定向 可能改變方法為 GET(取決於瀏覽器) 當資源臨時移動到新位置或需要臨時重定向,用於短期的資源變更或 A/B 測試。
307 Temporary Redirect 臨時重定向 瀏覽器和搜索引擎通常不會緩存重定向 保持原請求方法 當需要臨時重定向且必須保持請求方法(例如 POST),用於臨時服務器變更,或維護期間。
308 Permanent Redirect 永久重定向 瀏覽器和搜索引擎會更新 URL 並緩存重定向 保持原請求方法 當資源永久移動到新位置且必須保持請求方法,適用於 API 的永久變更,避免方法變更影響。

總結:

  • 使用 301 或是 308 永久重定向,主要是讓搜尋引擎SEO更新資料、瀏覽器緩存;但是要注意 301 會造成 Request Method 變動
  • 使用 302 或是 307,則是臨時性的變動,例如伺服器維護期間,暫時重新導向,或是負載平衡。瀏覽器不會緩存,也不影響搜尋引擎的 SEO;但是要注意 302 也會造成 Request Method 變動

2024年6月25日 星期二

Reset Synology Gitlab Root Password

重設 Synology Gitlab root 管理者密碼

從 群暉 Synology NAS 套件中心安裝的 Gitlab,與 Gitlab 官方文件不太一樣

  • Rake是一個工具程式,藉由讀取叫做Rakefile的檔案來執行任務腳本,而這些任務腳本就是所謂的task。
    bundle exec rake -T 可以查看 Task List

使用 rake

gitlab-rake 改成 rake,而且必須透過 bundle exe 來執行

docker exec -it synology_gitlab bash
bundle exec /home/git/gitlab/bin/rake "gitlab:password:reset"
(in /home/git/gitlab)
Enter username: 請輸入使用者帳號
Enter password:
Confirm password:
Password successfully updated for user with username 使用者帳號.

使用 rails

gitlab-rails 改名為 rails
rails console -e production = rails console
enter image description here

docker exec -it synology_gitlab bash
/home/git/gitlab/bin/rails console
--------------------------------------------------------------------------------
 Ruby:         ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux-gnu]
 GitLab:       13.12.2 (d98457affdf) FOSS
 GitLab Shell: 13.18.0
 PostgreSQL:   12.3
--------------------------------------------------------------------------------
Loading production environment (Rails 6.0.3.6)
irb(main):001:0> user = User.where(id: 1).first
=> #<User id:1 @root>
irb(main):002:0> user = User.find_by_username 'root'
=> #<User id:1 @root>
irb(main):003:0> user = User.find(1)
=> #<User id:1 @root>
irb(main):004:0> new_password = 'MyNewP@ssw0rd'
irb(main):005:0> user.password = new_password
irb(main):006:0> user.password_confirmation = new_password
irb(main):007:0> user.password_automatically_set = false
irb(main):008:0> user.save!
irb(main):009:0> exit
docker exec -it synology_gitlab bin/rails console -e production

補充:查看所有使用者列表

users = User.all
users.each do |user|
  puts "ID: #{user.id}, Username: #{user.username}, Email: #{user.email}, Admin: #{user.admin?}"
end

補充:查看所有管理者列表

admins = User.where(admin: true)
admins.each do |admin|
  puts "ID: #{admin.id}, Username: #{admin.username}, Email: #{admin.email}, Admin: #{user.admin?}"
end

補充:查詢使用者

# 替換為實際的用戶 ID
user = User.find_by(id: 1)  
if user
	puts "ID: #{user.id}, Username: #{user.username}, Email: #{user.email}, Admin: #{user.admin?}"
else 
	puts "User not found"
end

2024年4月2日 星期二

VMware Workstation 與 Hyper-V 混合環境

VMware Workstation 與 Hyper-V 共存於 Windows 10 Pro x64 上的奇異狀況

VMware Workstation 要與 Hyper-V 共存於 Windows 10 Pro x64 上需要一番設定

但我今天不是要講這個設定,而是講網路的奇怪狀況

我建立了一個 Ubuntu Desktop Guest,採用 Bridge 模式。
然後看到 Ubuntu Desktop 也取得了與 Win 10 Pro 同網段的 IP Address

這台 Ubuntu Desktop 可以連接到網路上任何其他的電腦,唯獨無法連接到 Win 10 Host。

  1. Ubuntu Desktop Guest 與 Win10 Pro Host互 ping 不到
  2. Ubuntu Desktop ufw/iptables 都沒有設定啟用
  3. Win 10 Pro 防火牆的 ping 規則也有啟用

檢查 VMware Virtual Network Editor 的網路設定,看到 VMnet0 Type Bridge Bridged to 我的 Win 10 Pro 實體網卡名稱 Realtek PCIe GbE Family Controller 看起來也沒錯

突然心血來潮,在命令提示字元下,執行 ipconfig /all
檢查 IP 設定,卻發現Win 10 Pro 取得 DHCP 的網卡是 Hyper-V Virtual Ethernet Adapter #4
而 Realtek PCIe GbE Family Controller 的 IP 卻是 169.254.199.175…

然後我在 VMware Virtual Network Editor 調整 Bridged to Hyper-V Virtual Ethernet Adapter #4 之後,Ubuntu Desktop Guest 與 Win10 Pro x64 就可以正常互連了

至於 Hyper-V Virtual Ethernet Adapter #4 虛擬網卡是如何喧賓奪主,搶走 Realtek PCIe GbE Family Controller 實體網卡的 IP,就不得而知了

我發現以下狀況:

Hyper-V Virtual Ethernet Adapter #4 的 MAC Address ,居然跟 Realtek PCIe GbE Family Controller 的 MAC Address 一模一樣!難怪 DHCP Server的 IP 會被虛擬網卡搶走。

在 Hyper-V 管理員 的 "虛擬交換器管理員",當我把虛擬交換器 Brideg 的外部網路取消掉,改為內部網路之後,Hyper-V Virtual Ethernet Adapter #4 就消失了,然後我的 Realtek PCIe GbE Family Controller 實體網卡就可以正常取得 IP了。
但是這樣的缺點,就是區域網路的電腦,無法連線到我電腦上的 Hyper-V 虛擬機

如果我點選外部網路,並選取 Realtek PCIe GbE Family Controller,Hyper-V 就把我整台電腦的區域網路連線給斷了!除非我勾選 "允許管理作業系統共用此網路介面卡(M)" !

遇到這麼流氓的 Hyper-V,只好把它卸除了,雖然不能用沙箱,也不能用 WSL,也不能用 Docker Desktop....

rsync

rsync 使用簡介

功能簡介:

Linux中的rsync(remote sync)是一個用於在本地系統之間或本地系統和遠程系統之間同步文件和目錄的強大工具。它可以在局域網中高效地傳輸大量數據,並且具有許多功能,使得文件同步和備份變得非常方便。

特點和用途:

  1. 增量備份:rsync可以將文件和目錄從源同步到目標,僅傳輸已更改或新增的部分,這種增量備份方式大大節省了帶寬和時間。
  2. 遠程同步:rsync支持通過SSH等協議在本地和遠程系統之間同步文件和目錄,這使得在不同主機之間進行文件同步變得非常方便。
  3. 保留文件屬性:rsync可以保留文件的屬性,包括權限、時間戳和所有者等信息。
  4. 多種選項:rsync具有多種選項,可以根據需要進行配置,例如遞歸同步、壓縮傳輸、忽略特定文件等。
  5. 傳輸加密:通過使用SSH等加密協議,rsync可以確保在本地和遠程系統之間的安全傳輸。

參數說明:

-a:表示以遞歸方式同步目錄,保留所有檔案屬性。
-v:表示輸出詳細信息,讓您可以看到正在複製的文件。
-z:表示在傳輸過程中壓縮檔案,以節省頻寬。
-h:表示以人類可讀的格式輸出信息。
-e “ssh”:指定使用SSH加密協議。
–ignore-existing:表示在目標目錄中忽略已經存在的文件,不再複製。
–bwlimit:指定一個限制,以Bytes為單位,指定每秒允許的最大傳輸速率。
–delete:刪除目的端不存在於原始路徑的檔案。
–remove-source-files:在成功搬移檔案後,從原始路徑中刪除這些檔案。

指令範例:

List=`ls -ld /volume1/Class/*[0-9] | awk -F' ' '{print $9}'`
for Path in $List; do rsync -avzh --ignore-existing /path/to/source/directory/* user@linux_b_server:/path/to/destination/directory/; done