<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.planetoid.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Planetoid</id>
	<title>LemonWiki共筆 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.planetoid.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Planetoid"/>
	<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php/Special:Contributions/Planetoid"/>
	<updated>2026-08-20T22:30:55Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Taiwan_Programmer_Community&amp;diff=26438</id>
		<title>Taiwan Programmer Community</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Taiwan_Programmer_Community&amp;diff=26438"/>
		<updated>2026-08-13T05:58:54Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt; [[Open Source Community]]&lt;br /&gt;
&lt;br /&gt;
台灣開發者社群&lt;br /&gt;
&lt;br /&gt;
=== AI, AI agent ===&lt;br /&gt;
* [https://blindegg.kktix.cc/ Generative AI 年會製作委員會 - KKTIX]&lt;br /&gt;
* [https://platform.kktix.cc/ Platform 月台 - KKTIX] (Platform 月台計畫 Stopover)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Language specific ===&lt;br /&gt;
&lt;br /&gt;
==== Flutter ====&lt;br /&gt;
* [https://www.facebook.com/groups/2554431454823796/ Flutter Taipei] {{FB}}&lt;br /&gt;
&lt;br /&gt;
==== Go ====&lt;br /&gt;
* [https://www.facebook.com/golangtw Golang Taiwan]: [https://github.com/golangtw/jobs GitHub - golangtw/jobs: 台灣 GO 語言招募職缺列表] {{access | date = 2021-01-31}}&lt;br /&gt;
* [https://www.facebook.com/groups/269001993248363/ Go程式語言] {{access | date = 2016-02-18}}&lt;br /&gt;
* [https://www.facebook.com/groups/1667684473462867/ Golang Gopher Taiwan] {{FB}} {{access | date = 2017-11-27}}&lt;br /&gt;
&lt;br /&gt;
==== iOS ====&lt;br /&gt;
* [https://www.facebook.com/groups/iostw/ iOS Dev Club : iPhone/iPad/iPod touch 軟體應用開發]{{FB}} {{access | date = 2016-06-18}}&lt;br /&gt;
* [https://www.meetup.com/Swift-Taipei-User-Group/ Swift Taipei User Group (Taipei) | Meetup]&lt;br /&gt;
&lt;br /&gt;
==== Java====&lt;br /&gt;
Java&lt;br /&gt;
* [https://www.facebook.com/groups/twjug/ TWJUG] (Taiwan Java User Group) {{FB}}&lt;br /&gt;
* 研討會: [https://www.facebook.com/jcconf/ JCConf.tw] (Java Community Conference Taiwan) {{FB}}: [https://jcconf.tw/2019/ JCConf Taiwan 2019]&lt;br /&gt;
&lt;br /&gt;
Scala&lt;br /&gt;
* [https://www.facebook.com/groups/ScalaTW Scala Taiwan] {{FB}}&lt;br /&gt;
&lt;br /&gt;
==== JavaScript (包含 AngularJS, React, Vue)====&lt;br /&gt;
JavaScript&lt;br /&gt;
* [http://jsdc.tw/ JSDC - JavaScript Developer Conferenece Taiwan]&lt;br /&gt;
* [https://www.facebook.com/groups/770941932952823/ JS Girls Taiwan]{{FB}}&lt;br /&gt;
* [https://www.facebook.com/groups/javascript.tw JavaScript.tw]{{FB}} 須先登入: [http://www.youtube.com/user/jstwgroup videos] {{Gd}}&lt;br /&gt;
&lt;br /&gt;
JavaScript frameworks: AngularJS&lt;br /&gt;
* [https://www.facebook.com/groups/augularjs.tw/ AngularJS.tw]{{FB}}須先登入([http://kktix.com/group/angularjs-tw 活動])&lt;br /&gt;
* [https://forum.angular.tw/ Angular User Group Taiwan]&lt;br /&gt;
* Angular Girls Taiwan&lt;br /&gt;
&lt;br /&gt;
JavaScript frameworks: ReactJS&lt;br /&gt;
* [https://www.facebook.com/groups/reactjs.tw/ ReactJS.tw]{{FB}}&lt;br /&gt;
&lt;br /&gt;
JavaScript frameworks: Vue&lt;br /&gt;
* [https://www.facebook.com/groups/vuejs.tw/ Vue.js 台灣]{{FB}}&lt;br /&gt;
&lt;br /&gt;
==== Julia ====&lt;br /&gt;
* [https://www.facebook.com/groups/JuliaTaiwan/ Julia Taiwan] {{FB}}&lt;br /&gt;
&lt;br /&gt;
==== Kotlin ====&lt;br /&gt;
* [https://www.facebook.com/groups/117755722221972/ Kotlin Taipei] {{FB}}&lt;br /&gt;
&lt;br /&gt;
==== .net ====&lt;br /&gt;
* [http://sister.codes/ 專屬女性姊妹的技術學習社群  .NET Sisters]&lt;br /&gt;
* [https://www.facebook.com/groups/DotNetUserGroupTaiwan/ 台灣 .NET 技術愛好者俱樂部] {{FB}}&lt;br /&gt;
&lt;br /&gt;
==== PHP ==== &lt;br /&gt;
* [http://twpug.net/ 台灣PHP聯盟 - Taiwan PHP User Group]([http://blog.twpug.org/index.php Blog])&lt;br /&gt;
* [https://www.facebook.com/groups/199493136812961/ PHP 台灣]{{FB}}&lt;br /&gt;
* [https://www.facebook.com/groups/849639948396465/ PHP 也有 Day] 台北 PHP 社群{{FB}}: 活動 [http://phptheday.kktix.cc/ PHP 也有 Day - KKTIX]&lt;br /&gt;
* [http://laravel.tw/ Laravel] PHP 框架。研討會 [https://laravelconf.tw/ LaravelConf Taiwan 2019]&lt;br /&gt;
* [http://www.laravel-dojo.com/laradiner Laradiner (a.k.a. Laravel 讀書會) | Laravel Dojo]&lt;br /&gt;
* [https://www.laragirls.org/ LaraGirls|專屬女性的程式學習社群]: [https://www.facebook.com/laragirlstw/ LaraGirls] {{FB}}&lt;br /&gt;
* [https://www.facebook.com/groups/1177239905694465/ PHPUnit Taiwan] {{FB}}&lt;br /&gt;
* [https://www.facebook.com/groups/118228608891680/ Swoole 台灣] {{FB}} {{access | date = 2017-11-12}}&lt;br /&gt;
* [https://www.ptt.cc/bbs/PHP/index.html 看板 PHP 文章列表 - 批踢踢實業坊]&lt;br /&gt;
* 研討會: [http://2016.phpconf.tw/ PHPConf 2016], [http://2015.phpconf.tw/ PHPConf Taiwan 2015]&lt;br /&gt;
&lt;br /&gt;
==== Python ==== &lt;br /&gt;
* [http://www.python.org.tw/ Python Taiwan – 台灣的Python社群]. {{FB}} [https://www.facebook.com/groups/pythontw/ Python Taiwan]&lt;br /&gt;
* [http://taipei.python.org.tw/ 台北 Python 使用者群組] (Taipei.py). Meetup: [https://www.meetup.com/Taipei-py/ Taipei.py - Taipei Python User Group (Taipei) | Meetup]&lt;br /&gt;
* [http://tw.pyladies.com/ PyLadies @ Taiwan!] / [https://www.facebook.com/pyladies.tw/ PyLadies] {{FB}}: events [http://djangogirls.kktix.cc/ Django Girls Taipei - KKTIX] {{access | date=2014-04-14}}&lt;br /&gt;
* [http://djangogirls.org/taipei/ Django Girls Taipei]&lt;br /&gt;
* [https://www.womenwhocode.com/taipei Taipei | Women Who Code] / [https://www.facebook.com/wwcodetaipei/ Women Who Code Taipei] {{FB}}&lt;br /&gt;
* [http://hualien.python.org.tw/ 花蓮.py] 花蓮的 Python 同好會&lt;br /&gt;
* [http://wasn.csie.ncu.edu.tw:8090/pages/viewpage.action?pageId=13303896 桃園Python使用者群組 - taoyuan.py - WASN Lab Wiki]&lt;br /&gt;
* [http://www.meetup.com/pythonhug/ PyHUG - 新竹使用者群組]&lt;br /&gt;
* [http://www.meetup.com/Taichung-Python-Meetup/ Taichung.py -- Taichung Python User Group (Taichung) - Meetup]&lt;br /&gt;
* [http://www.meetup.com/pythonhug/ Tainan.py - 台南使用者群組]&lt;br /&gt;
* [https://www.facebook.com/groups/kaohsiungpy/ Kaohsiung Python User Group]: 活動 [http://kaohsiungpy.kktix.cc/ Kaohsiung Python User Group - KKTIX]&lt;br /&gt;
* [https://www.facebook.com/groups/2027602154187130/?hc_ref=ARTVbx1odvDQoEd8IGkMZKApny5Oq-L4I3KYEgUAeBnDaZX0DGuPyLm-aosjMUGzuXs PyTorch Taiwan] {{FB}} &amp;amp;  [http://hemingwang.blogspot.tw/2017/11/pytorch-taiwan.html The Star Also Rises: PyTorch Taiwan（目錄）]&lt;br /&gt;
* [https://www.facebook.com/groups/1854256011540734/ PySpark Taiwan] {{FB}}&lt;br /&gt;
* 研討會: [https://www.facebook.com/pycontw/ PyCon Taiwan], [https://tw.pycon.org/2018/zh-hant/ PyCon Taiwan 2018], [https://tw.pycon.org/2016/ PyCon Taiwan 2016]&lt;br /&gt;
* ... [http://wiki.python.org.tw/ Python 台灣使用者群組 - Python Taiwan Wiki]&lt;br /&gt;
&lt;br /&gt;
==== R ====&lt;br /&gt;
* [https://www.facebook.com/Tw.R.User Taiwan R User Group]{{FB}}: [http://www.meetup.com/Taiwan-R/ events on Meetup] &lt;br /&gt;
* [https://sites.google.com/site/zhonghuarruantixuehui/home 中華R軟體學會]: [https://groups.google.com/forum/#!forum/taiwanruser R軟體使用者論壇 - Google Groups]&lt;br /&gt;
* [https://www.facebook.com/groups/twrladies/ R Ladies] {{FB}} meetup: [https://www.meetup.com/R-Ladies-Taipei/ R-Ladies Taipei (Taipei) | Meetup]&lt;br /&gt;
* [https://www.facebook.com/groups/1210634969026548/ 台灣R軟體Club] {{FB}}&lt;br /&gt;
&lt;br /&gt;
==== Rails ====&lt;br /&gt;
* [http://www.meetup.com/taipei-rails-meetup/ Taipei Rails Meetup (Taipei) - Meetup]&lt;br /&gt;
* [http://railsgirls.tw/ Rails Girls Taiwan],  [https://www.facebook.com/railsgirlstw/ Railsgirls Taiwan] {{FB}}&lt;br /&gt;
&lt;br /&gt;
==== Ruby ====&lt;br /&gt;
* [http://ruby.tw/ Ruby Taiwan] ({{FB}} [https://www.facebook.com/ruby.taiwan Ruby Taiwan] )&lt;br /&gt;
* [http://railsgirls.tw/ Rails Girls Taiwan]: 活動[http://ltrt.kktix.cc/ Let&#039;s Try Rails Tuesday]&lt;br /&gt;
* [http://blog.eddie.com.tw/2014/03/03/taipei-ruby-group/ Taipei.rb 起步走 - 高見龍]: [http://taipeirb.kktix.cc/ 活動]&lt;br /&gt;
* 研討會: [https://2019.rubyconf.tw/ Ruby Conf Taiwan 2019], [http://rubyconf.tw/2014/ RubyConf Taiwan 2014]&lt;br /&gt;
* Jobs: [https://jobs.ruby.tw/ Ruby Jobs in Taiwan]&lt;br /&gt;
&lt;br /&gt;
==== Rust ====&lt;br /&gt;
* [https://www.rust-lang.org/zh-TW/ Rust 程式設計語言]: {{FB}} [https://www.facebook.com/rust.tw/ Rust Taiwan]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== TypeScript ====&lt;br /&gt;
* [https://www.facebook.com/groups/typescript.tw/ TypeScript Taiwan]{{FB}}&lt;br /&gt;
&lt;br /&gt;
=== 前端與 HTML/CSS ===&lt;br /&gt;
* [http://www.f2e.tw/ Front-End Developers Taiwan!](facebook groups: [https://www.facebook.com/groups/521085554595481/ Front-End Developers Taiwan]{{FB}} 須先登入、facebook fanspage: [https://www.facebook.com/Front-End-Developers-Taiwan-1631625207071478/ Front-End Developers Taiwan - 首頁]、[https://f2e.kktix.cc/ 活動], [https://github.com/f2etw source code repository] @ github)&lt;br /&gt;
* [http://rgba.tw/ RGBA]: [https://www.facebook.com/rgba.tw RGBA 網頁設計資源] {{FB}}, [https://www.facebook.com/rgba.tw/events 活動]&lt;br /&gt;
* [http://nodejs.tw/ Node.js Taiwan](facebook groups: [https://www.facebook.com/groups/node.js.tw node.js台灣]{{FB}} 須先登入, [http://kktix.com/group/nodejs-tw 活動])&lt;br /&gt;
* [https://www.facebook.com/groups/htmlfive HTML5與CSS3在台灣]{{FB}} 須先登入&lt;br /&gt;
* [https://www.facebook.com/HappyCSSer/ Happy CSSer] {{FB}}&lt;br /&gt;
* [https://modernweb.tw/ Modern Web 2019]&lt;br /&gt;
&lt;br /&gt;
過往記錄&lt;br /&gt;
* [http://www.webconf.tw/ WebConf Taiwan] 2013&lt;br /&gt;
* [http://tw.iojs.org/ iojs 台灣] {{access | date=2015-04-16}}&lt;br /&gt;
&lt;br /&gt;
=== 後端 ===&lt;br /&gt;
* [https://www.facebook.com/groups/616369245163622/ Backend 台灣 (Backend Tw)]{{FB}}&lt;br /&gt;
* [https://www.facebook.com/groups/819577128464471/ Backend.tw (友善版)]{{FB}}&lt;br /&gt;
* [https://www.facebook.com/groups/534898123697080/ Taiwan Backend Group]{{FB}}&lt;br /&gt;
&lt;br /&gt;
=== 資料庫 ===&lt;br /&gt;
* [https://www.facebook.com/groups/1769310993374170 PostgreSQL.TW] &amp;quot;PostgreSQL 台灣使用者社群，分享資料庫的資訊和經驗&amp;quot;&lt;br /&gt;
* [https://taiwan.pass.org/default.aspx SQL PASS 台灣分會] (Taiwan SQL Server User Group): {{FB}} [https://www.facebook.com/sqlpass.tw/ 台灣 SQL PASS 社群] &amp;quot;SQL Server 使用者的社群&amp;quot;&lt;br /&gt;
* [https://www.facebook.com/groups/297728497041569 MySQL User Group Taiwan] &amp;quot;台灣 MySQL 使用者社群&amp;quot;&lt;br /&gt;
* [https://www.facebook.com/groups/1366282493528953 MongoDB User Group TW]&lt;br /&gt;
&lt;br /&gt;
=== 敏捷開發, DevOps 與 SRE ===&lt;br /&gt;
Software development &amp;amp; DevOps 有興趣的同好加入我們的活動、持續關注我們。&lt;br /&gt;
* [https://www.facebook.com/AgileCommunity.tw AgileCommunity.tw]{{FB}} (blog: [http://agiletw.tumblr.com/ Agile Community Taiwan]/thumblr, events: [http://www.accupass.com/org/detail/r/965090279531912/1/0])&lt;br /&gt;
** [https://summit.ithome.com.tw/agile/ Agile Summit 2020]&lt;br /&gt;
** [https://www.facebook.com/AgileTourTaipei/ AgileTour Taipei] {{FB}}: [https://agilecommtw.kktix.cc/events/agiletourtaipei2019 Agile Tour Taipei 2019 台北敏捷之旅] {{access | date = 2020-02-29}}&lt;br /&gt;
* [https://www.facebook.com/groups/AgileNeihu/ Agile community in 內湖]&lt;br /&gt;
* [https://www.facebook.com/groups/Agile.Taichung/ Agile.Taichung]&lt;br /&gt;
* [https://www.facebook.com/groups/agile.kaohsiung/ Agile Kaohsiung] {{FB}} {{access | date = 2018-02-03}}&lt;br /&gt;
* [https://www.facebook.com/AgileGirls/ AgileGirls] {{FB}} {{access | date = 2020-02-22}}&lt;br /&gt;
* [https://www.facebook.com/groups/179345672472/ Scrum Community in Taiwan] {{FB}} &amp;quot;non-official Scrum Community in Taiwan ... &amp;quot; {{access | date = 2016-06-01}}&lt;br /&gt;
&lt;br /&gt;
Devops&lt;br /&gt;
* [https://devopstw.club/ DevOps Taiwan Community | DevOps 台灣社群]: [https://github.com/DevOpsTW DevOps Taiwan] / [https://www.facebook.com/groups/DevOpsTaiwan/ DevOps Taiwan] {{FB}}, 研討會 [https://devopsdays.tw/ DevOpsDays Taipei 2019]&lt;br /&gt;
* [http://devopssummit.ithome.com.tw/ DevOps Summit 2016::開發維運融一體．敏捷高效自動化] 主辦單位: ithome&lt;br /&gt;
&lt;br /&gt;
網站可靠性工程 (SRE, Site Reliability Engineering)&lt;br /&gt;
* [https://www.facebook.com/groups/sre.taiwan/ Site Reliability Engineering Taiwan] {{FB}}&lt;br /&gt;
&lt;br /&gt;
=== 網站企劃與產品設計社群 ===&lt;br /&gt;
* [[Product manager community|網站企劃與產品設計相關活動訊息 與 社群網站]]&lt;br /&gt;
&lt;br /&gt;
=== 聊天機器人(Chatbot) ===&lt;br /&gt;
* [https://www.facebook.com/groups/chatbot.tw/ Chatbot Developers Taiwan] {{FB}} 台灣聊天機器人開發者社團&lt;br /&gt;
* [https://www.facebook.com/openmeow 有開嗎] {{FB}} meetup: [https://chatbots.kktix.cc/ Chatbots Meetup - KKTIX]&lt;br /&gt;
* [https://www.facebook.com/InnovationChat/ Innovation Chat] {{FB}}&lt;br /&gt;
* [https://hackmd.io/@6WH1jnfQTKqVOcMzN0iYAQ/S1dBpOp6u IET Oncampus x Taichung Tech 攤位簡介] 「本社群致力於推廣用RASA (https://rasa.com/)平台來打造聊天機器人」&lt;br /&gt;
&lt;br /&gt;
=== CMS (內容管理系統) ===&lt;br /&gt;
{{acronym | acronym=CMS | def=內容管理系統(Content Management System)}}&lt;br /&gt;
* [http://drupaltaiwan.org/ Drupal Taiwan 正體中文支援站], [https://www.facebook.com/DrupalTaiwan DrupalCamp Taipei]{{FB}}&lt;br /&gt;
* [http://www.joomla.org.tw/ 台灣 Joomla! 社群]&lt;br /&gt;
* [https://www.facebook.com/wctwn WordCamp Taiwan]{{FB}} 網站: [https://taiwan.wordcamp.org/2025/ WordCamp Taipei 2025], [https://2019.taipei.wordcamp.org/ WordCamp Taipei 2019 – 走進社群，步出世界。Meet People, Meet the World.]&lt;br /&gt;
* [https://www.facebook.com/groups/wordpresstw/ WordPress Taiwan 正體中文]&lt;br /&gt;
&lt;br /&gt;
=== 資安 ===&lt;br /&gt;
[https://hitcon.org/ 台灣駭客嘉年華] ([https://www.facebook.com/HITCON/ Hacks In Taiwan 台灣駭客年會 ( HITCON ) - 首頁] {{FB}})&lt;br /&gt;
* [https://hitcon.org/2023/carnival/ 台灣駭客嘉年華 2023]&lt;br /&gt;
* [https://hitcon.org/2019/CMT/ 台灣駭客年會 HITCON CMT 2019]&lt;br /&gt;
* [http://hitcon.org/2014/ 台灣駭客年會 HITCON 2014 — Adapt to the new era of security threats.]: [http://hitcon.kktix.cc/ 台灣駭客年會 HITCON - KKTIX]&lt;br /&gt;
&lt;br /&gt;
=== Docker &amp;amp; kubernetes ===&lt;br /&gt;
* [https://www.facebook.com/groups/docker.taipei/ Docker.Taipei]{{FB}}&lt;br /&gt;
** 活動: [http://www.meetup.com/Docker-Taipei/ Docker Taipei (Taipei) - Meetup]&lt;br /&gt;
** [https://dockers.hackpad.com/%E6%AD%A1%E8%BF%8E%E5%8F%83%E8%88%87-Docker-%E6%8A%80%E8%A1%93%E5%88%86%E4%BA%AB%E5%85%B1%E7%AD%86-gAMMdf0bsiL Docker 技術分享共筆]&lt;br /&gt;
* [https://summit.ithome.com.tw/kubernetes/ Kubernetes Summit 企業容器架構實戰分享，各產業K8s經驗、廠商沒說的決策關鍵]&lt;br /&gt;
&lt;br /&gt;
=== Git 版本管理 ===&lt;br /&gt;
* [https://www.facebook.com/groups/git.tw/ Git.tw] {{FB}}&lt;br /&gt;
* [https://www.facebook.com/groups/GitLabTaipei/ GitLab Taipei User Group] {{FB}}&lt;br /&gt;
&lt;br /&gt;
=== Google 相關技術社群開發者 ===&lt;br /&gt;
Google technology&lt;br /&gt;
* [https://www.facebook.com/GDG.Taipei GDG Taipei] {{FB}} meetup: [http://gdg-taipei.kktix.cc/ GDG Taipei - KKTIX]&lt;br /&gt;
* [https://www.facebook.com/GDG.Taoyuan/ GDG Taoyuan] {{FB}}&lt;br /&gt;
* [http://gdgk.ga/ Google 高雄開發者社群 - GDG Kaohsiung]&lt;br /&gt;
* [https://www.facebook.com/gdgtaiwan/ Google Developers Groups Taiwan] {{FB}}&lt;br /&gt;
&lt;br /&gt;
=== Amazon Web Services (AWS) ===&lt;br /&gt;
* [https://awscmd.tw/ AWS Community Day Taiwan 2023 | 專屬於 AWS 社群愛好者的年會]&lt;br /&gt;
* [https://aws.amazon.com/tw/summits/taipei/ 2019 AWS 台北高峰會]&lt;br /&gt;
&lt;br /&gt;
=== Azure ===&lt;br /&gt;
* [https://www.facebook.com/groups/AzureTWUG/ Azure Taiwan User Group] {{FB}}&lt;br /&gt;
&lt;br /&gt;
== 資料工程 ==&lt;br /&gt;
* [http://2019.datacon.tw/ DataCon.TW 2019 – 11th Hadoop.TW / 3nd TDEA Annual Conference] hosted by [https://www.facebook.com/groups/dataengineering.tw/ 臺灣資料工程協會]&lt;br /&gt;
&lt;br /&gt;
TensorFlow&lt;br /&gt;
* [https://www.youtube.com/channel/UCWfxZibjbxZPr4YVqxDq8AA/featured TensorFlow User Group Taipei (Taipei, Taiwan) - YouTube]&lt;br /&gt;
&lt;br /&gt;
== 共創空間 ==&lt;br /&gt;
* [http://www.osvaa.com/osvaablog/ A+A Space - 共創共享空間]&lt;br /&gt;
&lt;br /&gt;
== 其他 ==&lt;br /&gt;
* [https://mopcon.org/2019/ 行動科技年會 2019 | Mobile / Open / Platform Conference]&lt;br /&gt;
* [https://cloudsummit.ithome.com.tw/index.html iThome Cloud Edge Summit Taiwan 2020]&lt;br /&gt;
* [https://www.facebook.com/groups/cloudnative.tw/ Cloud Native Taiwan User Group]&lt;br /&gt;
* [https://www.facebook.com/ubuntu.tw/ Ubuntu 台灣（在地推廣組） Ubuntu-TW LoCo Team - Ubuntu Taiwan Community] {{FB}}&lt;br /&gt;
* [https://hkoscon.org/2021/ HKOSCon 2021]&lt;br /&gt;
* Apache Local Community (ALC) Taipei [https://www.facebook.com/opensource4you 源來適你] {{FB}}&lt;br /&gt;
&lt;br /&gt;
== 相關網頁 ==&lt;br /&gt;
* [https://www.cakeresume.com/resources/groups-for-engineers-and-tech-jobs?locale=zh-TW 從前端到後端，工程師找工作 16 大社群不藏私整理給你！ | CakeResume]&lt;br /&gt;
* [https://github.com/StarRocket/awesome-taiwan-community StarRocket/awesome-taiwan-community: 📚學習路上不孤單，台灣設計圈、程式技術圈、產品圈、創業圈活躍社群清單]&lt;br /&gt;
* [[Computing society]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Troubleshooting_of_Ollama_API&amp;diff=26437</id>
		<title>Troubleshooting of Ollama API</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Troubleshooting_of_Ollama_API&amp;diff=26437"/>
		<updated>2026-08-12T09:03:11Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* How to fix &amp;quot;json: cannot unmarshal object ...&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Troubleshooting of [https://ollama.com/ Ollama] [https://github.com/ollama/ollama/blob/main/docs/api.md API]&lt;br /&gt;
&lt;br /&gt;
{{Raise hand | text = If you have any questions about the Ollama API, you can post them on the [https://github.com/ollama/ollama/issues Ollama GitHub Repository].}}&lt;br /&gt;
&lt;br /&gt;
== How to Fix &amp;quot;Unauthorized&amp;quot; Error ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error message:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP Error 401&lt;br /&gt;
Response: {&amp;quot;error&amp;quot;:&amp;quot;Unauthorized&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verify that your API key is correct by testing it with the following curl command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -o /dev/null -w &amp;quot;%{http_code}\n&amp;quot; -X POST https://ollama.com/api/chat -H &amp;quot;Authorization: Bearer REPLACE_WITH_YOUR_API_KEY&amp;quot; -H &amp;quot;Content-Type: application/json&amp;quot; -d &#039;{&amp;quot;model&amp;quot;:&amp;quot;gpt-oss:120b&amp;quot;,&amp;quot;messages&amp;quot;:[{&amp;quot;role&amp;quot;:&amp;quot;user&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;hi&amp;quot;}],&amp;quot;stream&amp;quot;:false}&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check the returned status code:&lt;br /&gt;
* &#039;&#039;&#039;200&#039;&#039;&#039; — the API key is valid&lt;br /&gt;
* &#039;&#039;&#039;401&#039;&#039;&#039; — the API key is invalid or incorrect&lt;br /&gt;
&lt;br /&gt;
== How to fix &amp;quot;prompt too long; exceeded max context length&amp;quot; when sending files ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error message:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP Error 400: {&amp;quot;error&amp;quot;:&amp;quot;prompt too long; exceeded max context length by 311181 tokens&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Applicable Model:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* {{kbd | key=gpt-oss:120b}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Root Cause: The entire file content was concatenated into &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt; as raw text. Ollama&#039;s &amp;lt;code&amp;gt;/api/chat&amp;lt;/code&amp;gt; has no dedicated &amp;quot;file&amp;quot; field — text/document content must be extracted client-side and embedded directly into the message string, which counts fully against &amp;lt;code&amp;gt;num_ctx&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Incorrect Usage: Whole file dumped straight into content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&#039;messages&#039; =&amp;gt; [[&lt;br /&gt;
    &#039;role&#039; =&amp;gt; &#039;user&#039;,&lt;br /&gt;
    &#039;content&#039; =&amp;gt; file&#039;&#039;get&#039;&#039;contents($path) . &amp;quot;\n\nPlease summary this document&amp;quot;&lt;br /&gt;
]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Correct Usage: Truncate / chunk / summarize before sending, and raise &amp;lt;code&amp;gt;num_ctx&amp;lt;/code&amp;gt; to match&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&#039;messages&#039; =&amp;gt; [[&lt;br /&gt;
    &#039;role&#039; =&amp;gt; &#039;user&#039;,&lt;br /&gt;
    &#039;content&#039; =&amp;gt; $chunkedText . &amp;quot;\n\nPlease summary this document&amp;quot;&lt;br /&gt;
]],&lt;br /&gt;
&#039;options&#039; =&amp;gt; [&lt;br /&gt;
    &#039;num_ctx&#039; =&amp;gt; 32768&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation:&#039;&#039;&#039;&lt;br /&gt;
Ollama&#039;s chat endpoint only has a native &amp;lt;code&amp;gt;images&amp;lt;/code&amp;gt; array (base64-encoded, vision models only). There is no &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;document&amp;lt;/code&amp;gt; parameter. Any non-image file — PDF, txt, docx, log — must be converted to plain text on the client and inserted into &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;, so its size is not free; it consumes tokens exactly like typed text.&lt;br /&gt;
&lt;br /&gt;
If the resulting text exceeds the model&#039;s context window (&amp;lt;code&amp;gt;num_ctx&amp;lt;/code&amp;gt;, default is often small, e.g. 2048–4096), the request fails with &amp;lt;code&amp;gt;&amp;quot;prompt too long&amp;quot;&amp;lt;/code&amp;gt;. Fix by combining:&lt;br /&gt;
&lt;br /&gt;
* Explicitly setting a larger &amp;lt;code&amp;gt;num_ctx&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;options&amp;lt;/code&amp;gt; (bounded by what the model/hardware can actually support)&lt;br /&gt;
* Chunking the file and sending it in multiple requests&lt;br /&gt;
* Pre-summarizing or using RAG-style retrieval so only relevant excerpts are sent, instead of the full file&lt;br /&gt;
&lt;br /&gt;
This fix resolves the &amp;lt;code&amp;gt;&amp;quot;prompt too long; exceeded max context length&amp;quot;&amp;lt;/code&amp;gt; error when large files are pasted into chat.&lt;br /&gt;
&lt;br /&gt;
== How to fix &amp;quot;json: cannot unmarshal object ...&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error message:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP Error 400: {&amp;quot;error&amp;quot;: &amp;quot;json: cannot unmarshal object into Go struct field ChatRequest.messages of type []api.Message&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Applicable Model:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* {{kbd | key=gpt-oss:120b}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Root Cause: Incorrect `messages` format. The API expects an array format, but a single object was being sent.&lt;br /&gt;
&lt;br /&gt;
Incorrect Format in PHP: ❌ This is an object&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&#039;messages&#039; =&amp;gt; [&#039;role&#039; =&amp;gt; &#039;user&#039;, &#039;content&#039; =&amp;gt; $message]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Correct Format in PHP: ✅ This is an array containing an object&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&#039;messages&#039; =&amp;gt; [[&#039;role&#039; =&amp;gt; &#039;user&#039;, &#039;content&#039; =&amp;gt; $message]]  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation:&#039;&#039;&#039;&lt;br /&gt;
The `messages` parameter must be an array of message objects, not a single message object. Each message object should contain `role` and `content` properties. The extra square brackets `[]` wrap the message object into an array, which matches the API&#039;s expected format.&lt;br /&gt;
&lt;br /&gt;
This fix resolves the `&amp;quot;cannot unmarshal object into Go struct field ChatRequest.messages&amp;quot;` error.&lt;br /&gt;
&lt;br /&gt;
== Related links ==&lt;br /&gt;
* Forum: [https://www.reddit.com/r/ollama/ ollama]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tools]] &lt;br /&gt;
[[Category: Ollama]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;br /&gt;
[[Category: Generative AI]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Troubleshooting_of_Ollama_API&amp;diff=26436</id>
		<title>Troubleshooting of Ollama API</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Troubleshooting_of_Ollama_API&amp;diff=26436"/>
		<updated>2026-08-12T08:29:40Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: How to Fix &amp;quot;Unauthorized&amp;quot; Error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Troubleshooting of [https://ollama.com/ Ollama] [https://github.com/ollama/ollama/blob/main/docs/api.md API]&lt;br /&gt;
&lt;br /&gt;
{{Raise hand | text = If you have any questions about the Ollama API, you can post them on the [https://github.com/ollama/ollama/issues Ollama GitHub Repository].}}&lt;br /&gt;
&lt;br /&gt;
== How to Fix &amp;quot;Unauthorized&amp;quot; Error ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error message:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP Error 401&lt;br /&gt;
Response: {&amp;quot;error&amp;quot;:&amp;quot;Unauthorized&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verify that your API key is correct by testing it with the following curl command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -o /dev/null -w &amp;quot;%{http_code}\n&amp;quot; -X POST https://ollama.com/api/chat -H &amp;quot;Authorization: Bearer REPLACE_WITH_YOUR_API_KEY&amp;quot; -H &amp;quot;Content-Type: application/json&amp;quot; -d &#039;{&amp;quot;model&amp;quot;:&amp;quot;gpt-oss:120b&amp;quot;,&amp;quot;messages&amp;quot;:[{&amp;quot;role&amp;quot;:&amp;quot;user&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;hi&amp;quot;}],&amp;quot;stream&amp;quot;:false}&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check the returned status code:&lt;br /&gt;
* &#039;&#039;&#039;200&#039;&#039;&#039; — the API key is valid&lt;br /&gt;
* &#039;&#039;&#039;401&#039;&#039;&#039; — the API key is invalid or incorrect&lt;br /&gt;
&lt;br /&gt;
== How to fix &amp;quot;json: cannot unmarshal object ...&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error message:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP Error 400: {&amp;quot;error&amp;quot;: &amp;quot;json: cannot unmarshal object into Go struct field ChatRequest.messages of type []api.Message&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Applicable Model:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
* {{kbd | key=gpt-oss:120b}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Root Cause: Incorrect `messages` format. The API expects an array format, but a single object was being sent.&lt;br /&gt;
&lt;br /&gt;
Incorrect Format in PHP: ❌ This is an object&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&#039;messages&#039; =&amp;gt; [&#039;role&#039; =&amp;gt; &#039;user&#039;, &#039;content&#039; =&amp;gt; $message]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Correct Format in PHP: ✅ This is an array containing an object&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&#039;messages&#039; =&amp;gt; [[&#039;role&#039; =&amp;gt; &#039;user&#039;, &#039;content&#039; =&amp;gt; $message]]  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Explanation:&#039;&#039;&#039;&lt;br /&gt;
The `messages` parameter must be an array of message objects, not a single message object. Each message object should contain `role` and `content` properties. The extra square brackets `[]` wrap the message object into an array, which matches the API&#039;s expected format.&lt;br /&gt;
&lt;br /&gt;
This fix resolves the `&amp;quot;cannot unmarshal object into Go struct field ChatRequest.messages&amp;quot;` error.&lt;br /&gt;
&lt;br /&gt;
== Related links ==&lt;br /&gt;
* Forum: [https://www.reddit.com/r/ollama/ ollama]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tools]] &lt;br /&gt;
[[Category: Ollama]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;br /&gt;
[[Category: Generative AI]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Capacity_of_Email_Service&amp;diff=26435</id>
		<title>Capacity of Email Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Capacity_of_Email_Service&amp;diff=26435"/>
		<updated>2026-08-11T02:48:33Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Email服務每封郵件的檔案大小上限 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;單封信件 (含夾帶檔案) 的檔案大小上限 (maximum attachment size) 與建議&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Email服務每封郵件的檔案大小上限 ==&lt;br /&gt;
&#039;&#039;&#039;建議&#039;&#039;&#039;:&lt;br /&gt;
* 檔案大小 (file size) 控制在&#039;&#039;&#039;6-10MB&#039;&#039;&#039;: 因為信件夾帶的檔案經過編碼([http://en.wikipedia.org/wiki/MIME MIME] encode)後，會導致檔案大小變大，所以寄信時的信件(含夾帶的檔案)檔案大小建議能控制在上限的三分之二，即6-10MB，以免被退信。&lt;br /&gt;
* 超過10MB的檔案，可以考慮使用將附檔[[File compression|壓縮]] 或放在Web、FTP、[http://en.wikipedia.org/wiki/Comparison_of_one-click_hosters 線上檔案儲存網站]、[[Snapchat of file sharing | 閱後即焚檔案分享服務]] ex: [https://drive.google.com/ Google Drive] 單一檔案限 5TB&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant&amp;amp;vid=1-635756751147519182-13007898089037315163 檔案大小 - 雲端硬碟說明] {{access | date = 2015-08-20}}&amp;lt;/ref&amp;gt;, DropBox 單一檔案限2GB&amp;lt;ref&amp;gt;[https://www.dropbox.com/help/5 Dropbox 是否有檔案大小的限制或上限？ (Dropbox 說明中心)]&amp;lt;/ref&amp;gt;, [http://www.mediafire.com/ MediaFire](非圖檔的單一檔案限200MB) 等。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%; min-height: .01%; overflow-x: auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|| &amp;lt;b&amp;gt;網站名稱&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;單封信件(含夾帶檔案)的檔案上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;建議的夾帶檔案上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;信箱總容量上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;備註(拜訪日期)&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://webmail.aol.com/ AOL Mail](免費)&lt;br /&gt;
|| 16MB&amp;lt;ref&amp;gt;[http://help.aol.com/help/microsites/microsite.do?cmd=displayKCPopup&amp;amp;docType=kc&amp;amp;externalId=221717 Cannot send email attachments or embedded files on AOL WebMail- AOL Help]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 10MB&lt;br /&gt;
|| 超過2GB，輸入檢核碼即可增加空間&amp;lt;ref&amp;gt;[http://help.aol.com/help/microsites/microsite.do?cmd=displayKCPopup&amp;amp;docType=kc&amp;amp;externalId=218743 How do I save my emails in AOL WebMail?- AOL Help] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2010-09-11&lt;br /&gt;
|-&lt;br /&gt;
| {{Gd}}&lt;br /&gt;
|| [https://gmail.google.com/ Google Gmail](免費/付費服務)&lt;br /&gt;
|| 25MB&amp;lt;ref&amp;gt;[https://mail.google.com/support/bin/answer.py?answer=8770&amp;amp;topic=1516 Maximum attachment size - Gmail Help]  &amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt; (超過25MB可上傳至Google Drive，最多到 5TB&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant Google 雲端硬碟可存放的檔案 - 雲端硬碟說明]&amp;lt;/ref&amp;gt; )&lt;br /&gt;
|| 15MB&lt;br /&gt;
|| 15G(免費服務)/ 100GB-30TB(付費服務)&amp;lt;ref&amp;gt;[http://mail.google.com/support/bin/answer.py?hl=en&amp;amp;answer=39567 Google Storage - Gmail Help] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [http://www.mail.lycos.com/ Lycos Mail] (免費)&lt;br /&gt;
|| 35MB&amp;lt;ref&amp;gt;[https://cshelp.lycos.com/ics/support/KBAnswer.asp?questionID=73 Is there a limit to the size of the emails that I can send? - Lycos.com Helpdesk]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 21MB&lt;br /&gt;
|| 3G(free) ~ 5G(paid)&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.mail.com/intl/ Mail.com](免費/付費服務)&lt;br /&gt;
|| 50MB&amp;lt;ref&amp;gt;[http://help.mail.com/index.html Mail.com FAQ] - What is the maximum size for sending and receiving email? &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| &#039;&#039;&#039;未限制&#039;&#039;&#039;&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.mail2000.com.tw/ Mail2000](付費服務)&lt;br /&gt;
|| 40MB&amp;lt;ref&amp;gt;[http://doc.mail2000.com.tw/m2k/faq_about_a1-3.htm 單封信件傳輸量及我的檔案的容量有多少？] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| 500MB~12GB&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://mail.pchome.com.tw/ PChome Online](免費)&lt;br /&gt;
|| 10MB&amp;lt;ref&amp;gt;[http://faq.pchome.com.tw/faq_solution.html?f_id=1&amp;amp;q_id=6&amp;amp;c_nickname=mail PC home E-Mail 是否有容量等限制？] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB&lt;br /&gt;
|| 250MB&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://webmail.seed.net.tw/Login.do Seednet](付費服務)&lt;br /&gt;
|| 10MB&amp;lt;ref&amp;gt;[http://webmail.seed.net.tw/web/rule.htm Seednet Webmail使用規範] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB&lt;br /&gt;
|| 2G&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.url.com.tw/emailstore/index.htm URL智邦生活館](付費服務)&lt;br /&gt;
|| 10MB(付費服務]&amp;lt;ref&amp;gt;[http://vipmail.url.com.tw/vipmail.asp?q=1 URL 智邦生活館 VIP Mail 常見問題集] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB(付費服務)&lt;br /&gt;
|| 2000MB(付費服務)&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [https://outlook.com outlook.com](免費) 前 hotmail&lt;br /&gt;
|| 34MB&amp;lt;ref&amp;gt;[https://support.office.com/en-us/article/Attach-files-in-Outlook-com-8d7c1ea7-4e5f-44ce-bb6e-c5fcc92ba9ab Attach files in Outlook.com - Outlook]&amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt; (超過可上傳至OneDrive，最多到 15GB(免費) ~ 50GB(付費)&amp;lt;ref&amp;gt;[https://support.office.com/en-us/article/storage-limits-in-outlook-com-7ac99134-69e5-4619-ac0b-2d313bba5e9e?ui=en-US&amp;amp;rs=en-US&amp;amp;ad=US Storage limits in Outlook.com - Outlook]&amp;lt;/ref&amp;gt;)&lt;br /&gt;
|| 20MB+&lt;br /&gt;
|| &lt;br /&gt;
|| 2018-08-25&lt;br /&gt;
|-&lt;br /&gt;
| {{Gd}}&lt;br /&gt;
|| [http://mail.yahoo.com.tw/ Yahoo!奇摩電子信箱](免費/付費服務)&lt;br /&gt;
|| 25MB(免費/付費服務)&amp;lt;ref&amp;gt;[https://tw.help.yahoo.com/kb/%E4%BF%A1%E4%BB%B6%E5%A4%A7%E5%B0%8F-%E9%99%90%E5%88%B6-sln5673.html 信件大小限制]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 15MB(免費/付費服務)&lt;br /&gt;
|| 1TB&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [https://protonmail.com/ ProtonMail](免費/付費服務)&lt;br /&gt;
|| 25MB&amp;lt;ref&amp;gt;[https://protonmail.com/support/knowledge-base/attaching-multiple-documents-to-a-message/ Attaching documents to a message and limits - ProtonMail Support]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 15MB&lt;br /&gt;
|| 500MB(免費服務)、5~20GB(免費/付費服務)&amp;lt;ref&amp;gt;[https://protonmail.com/support/knowledge-base/paid-plans/ ProtonMail Plans Explained (Free, Paid, Visionary) - ProtonMail Support]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2016-11-12&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [http://mail.qq.com/ QQ邮箱] 腾讯邮箱服务 (免費服務)&lt;br /&gt;
|| 50MB &amp;lt;br /&amp;gt; 超過限制可上傳至雲端硬碟，最多到 2GB &amp;lt;ref&amp;gt;[http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;id=11&amp;amp;&amp;amp;no=130 一封邮件可以发送多个附件吗？_QQ邮箱帮助中心] &amp;amp; [http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;id=35&amp;amp;&amp;amp;no=206 什么是文件中转站？_QQ邮箱帮助中心] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| &#039;&#039;&#039;未限制&#039;&#039;&#039;&amp;lt;ref&amp;gt;[http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;no=103&amp;amp;&amp;amp;id=22 QQ邮箱的容量和附件有多大？_QQ邮箱帮助中心]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2018-04-29&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
寄信到 hotmail 收到回信「Delivery Status Notification (Failure)」&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
伺服器的回應如下：&lt;br /&gt;
552 Too much mail data.(31457280 bytes bounded)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
訊息中「31457280 bytes」相當於 31 MB。實際信件的附檔檔案大小約 24 MB，因此需要如上表建議調整到 20 MB 或者是直接上傳到雲端硬碟空間。&lt;br /&gt;
&lt;br /&gt;
== 夾檔的檔案類型 ==&lt;br /&gt;
{{exclaim}} 如果夾檔的檔案類型是執行檔 ( .exe )、程式 ( .jar ) 等，可能會因為安全原因，遭到 Gmail 封鎖，而無法下載附檔&amp;lt;ref&amp;gt;[https://support.google.com/mail/answer/6590?hl=zh-Hant 部分檔案類型遭到封鎖 - Gmail說明]&amp;lt;/ref&amp;gt;。可以將檔案壓縮後改放到雲端硬碟 Google 雲端硬碟&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant Google 雲端硬碟可存放的檔案 - 雲端硬碟說明]&amp;lt;/ref&amp;gt;、Dropbox&amp;lt;ref&amp;gt;[https://www.dropbox.com/help/145 為什麼某些檔案無法從一台電腦同步到另一台電腦上？ - Dropbox 說明 - Dropbox]&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 相關頁面 ==&lt;br /&gt;
* {{Gd}} [[Procedure_of_campus_event#email | email 溝通途徑的注意事項]]&lt;br /&gt;
* [[Anti Spam Email|防制廣告信件]]&lt;br /&gt;
* [[User_agent#Mail_user_clients_.2F_Mail_user_agents |mail user client]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Comparison_of_webmail_providers Comparison of webmail providers - Wikipedia, the free encyclopedia]&lt;br /&gt;
* [[Email testing]]&lt;br /&gt;
&lt;br /&gt;
== 相關新聞聯播 ==&lt;br /&gt;
&lt;br /&gt;
{{News feed | title = 電子郵件 OR email OR 團隊溝通 相關新聞聯播 | feed = &amp;lt;rss&amp;gt;https://news.google.com/rss/search?q=%E9%9B%BB%E5%AD%90%E9%83%B5%E4%BB%B6+OR+email+OR+%E5%9C%98%E9%9A%8A%E6%BA%9D%E9%80%9A&amp;amp;hl=zh-TW&amp;amp;gl=TW&amp;amp;ceid=TW:zh-Hant&amp;lt;/rss&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
 &amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Email]] [[Category:Tool]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Email_testing&amp;diff=26434</id>
		<title>Email testing</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Email_testing&amp;diff=26434"/>
		<updated>2026-08-11T02:32:53Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* For role: users */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;← [[Testing]]&lt;br /&gt;
&lt;br /&gt;
== For role: users ==&lt;br /&gt;
Using the following e-mail service with name alias or alternative name&lt;br /&gt;
* [https://gmail.google.com/ Google Gmail]: plus sign {{exclaim}} the plus sign is not allowed by some websites&lt;br /&gt;
* Suggest search keyword: [http://lmgtfy.com/?q=anonymous%20email anonymous email]、拋棄式信箱 (Disposable Email) e.g. &#039;&#039;$&#039;&#039; [http://doc.mail2000.com.tw/edm/o_act/virtual/htm/faq.htm Ｍail2000拋棄式帳號：全新網域 輕鬆拋棄 廣告信Bye-bye！]&lt;br /&gt;
* [[Capacity of Email Service]]&lt;br /&gt;
&lt;br /&gt;
== For role: web developers ==&lt;br /&gt;
* {{Gd}} [https://www.caniemail.com/ Can I email… Support tables for HTML and CSS in emails] {{access | date=2026-04-24}} e.g. [https://www.caniemail.com/features/image-webp/ Can I email… webP image format]&lt;br /&gt;
* [[Troubleshooting of PHP errors#錯誤訊息: SMTP Error: Could not connect to SMTP host.]]&lt;br /&gt;
&lt;br /&gt;
== For role: system administrator ==&lt;br /&gt;
If you have the telnet permission,&lt;br /&gt;
* Suggest search keyword: [http://lmgtfy.com/?q=smtp%20telnet%20test smtp telnet test]&lt;br /&gt;
* [https://technet.microsoft.com/zh-tw/library/aa995718(v=exchg.65).aspx 如何使用 Telnet 來測試 SMTP 通訊]&lt;br /&gt;
* [https://support.google.com/mail/answer/78775?hl=zh-Hant 使用 POP 或 IMAP 傳送郵件時發生問題 - Gmail說明] {{access | date = 2016-08-08}}&lt;br /&gt;
* [http://www.xspace.idv.tw/bo_blog/post/85/ Outlook 錯誤代碼的含義及解決辦法] {{access | date = 2016-12-22}}&lt;br /&gt;
&lt;br /&gt;
是否可以連線到 SMTP 主機{{kbd | key =&amp;lt;nowiki&amp;gt;nslookup smtp.gmail.com&amp;lt;/nowiki&amp;gt; }} 或 {{kbd | key =&amp;lt;nowiki&amp;gt;telnet smtp.gmail.com port&amp;lt;/nowiki&amp;gt; }} (例子中以 gmail 作為 smtp 伺服器)&lt;br /&gt;
{{kbd | key =&amp;lt;nowiki&amp;gt;telnet smtp.gmail.com 465&amp;lt;/nowiki&amp;gt; }} 預期結果：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Trying 74.125.129.109...&lt;br /&gt;
Connected to smtp.gmail.com.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
^] //註：(Windows) 輸入 ctrl + ] 兩個按鍵，(Mac) 輸入 control + ] 兩個按鍵&lt;br /&gt;
telnet&amp;gt; quit&lt;br /&gt;
Connection closed.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
非預期結果：請調整防火牆設定&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Trying x.x.x.x...&lt;br /&gt;
telnet: connect to address x.x.x.x: Connection refused&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Web Dev]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Capacity_of_Email_Service&amp;diff=26433</id>
		<title>Capacity of Email Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Capacity_of_Email_Service&amp;diff=26433"/>
		<updated>2026-08-11T02:25:24Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* 相關頁面 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;單封信件 (含夾帶檔案) 的檔案大小上限 (maximum attachment size) 與建議&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Email服務每封郵件的檔案大小上限 ==&lt;br /&gt;
&#039;&#039;&#039;建議&#039;&#039;&#039;:&lt;br /&gt;
* 檔案大小 (file size) 控制在&#039;&#039;&#039;6-10MB&#039;&#039;&#039;: 因為信件夾帶的檔案經過編碼([http://en.wikipedia.org/wiki/MIME MIME] encode)後，會導致檔案大小變大，所以寄信時的信件(含夾帶的檔案)檔案大小建議能控制在上限的三分之二，即6-10MB，以免被退信。&lt;br /&gt;
* 超過10MB的檔案，可以考慮使用將附檔[[File compression|壓縮]] 或放在Web、FTP、[http://en.wikipedia.org/wiki/Comparison_of_one-click_hosters 線上檔案儲存網站]、[[Snapchat of file sharing | 閱後即焚檔案分享服務]] ex: [https://drive.google.com/ Google Drive] 單一檔案限 5TB&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant&amp;amp;vid=1-635756751147519182-13007898089037315163 檔案大小 - 雲端硬碟說明] {{access | date = 2015-08-20}}&amp;lt;/ref&amp;gt;, DropBox 單一檔案限2GB&amp;lt;ref&amp;gt;[https://www.dropbox.com/help/5 Dropbox 是否有檔案大小的限制或上限？ (Dropbox 說明中心)]&amp;lt;/ref&amp;gt;, [http://www.mediafire.com/ MediaFire](非圖檔的單一檔案限200MB), [http://www.yousendit.com/ YouSendIt](單一檔案限100MB) ...。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%; min-height: .01%; overflow-x: auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|| &amp;lt;b&amp;gt;網站名稱&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;單封信件(含夾帶檔案)的檔案上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;建議的夾帶檔案上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;信箱總容量上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;備註(拜訪日期)&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://webmail.aol.com/ AOL Mail](免費)&lt;br /&gt;
|| 16MB&amp;lt;ref&amp;gt;[http://help.aol.com/help/microsites/microsite.do?cmd=displayKCPopup&amp;amp;docType=kc&amp;amp;externalId=221717 Cannot send email attachments or embedded files on AOL WebMail- AOL Help]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 10MB&lt;br /&gt;
|| 超過2GB，輸入檢核碼即可增加空間&amp;lt;ref&amp;gt;[http://help.aol.com/help/microsites/microsite.do?cmd=displayKCPopup&amp;amp;docType=kc&amp;amp;externalId=218743 How do I save my emails in AOL WebMail?- AOL Help] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2010-09-11&lt;br /&gt;
|-&lt;br /&gt;
| {{Gd}}&lt;br /&gt;
|| [https://gmail.google.com/ Google Gmail](免費/付費服務)&lt;br /&gt;
|| 25MB&amp;lt;ref&amp;gt;[https://mail.google.com/support/bin/answer.py?answer=8770&amp;amp;topic=1516 Maximum attachment size - Gmail Help]  &amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt; (超過25MB可上傳至Google Drive，最多到 5TB&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant Google 雲端硬碟可存放的檔案 - 雲端硬碟說明]&amp;lt;/ref&amp;gt; )&lt;br /&gt;
|| 15MB&lt;br /&gt;
|| 15G(免費服務)/ 100GB-30TB(付費服務)&amp;lt;ref&amp;gt;[http://mail.google.com/support/bin/answer.py?hl=en&amp;amp;answer=39567 Google Storage - Gmail Help] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [http://www.mail.lycos.com/ Lycos Mail] (免費)&lt;br /&gt;
|| 35MB&amp;lt;ref&amp;gt;[https://cshelp.lycos.com/ics/support/KBAnswer.asp?questionID=73 Is there a limit to the size of the emails that I can send? - Lycos.com Helpdesk]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 21MB&lt;br /&gt;
|| 3G(free) ~ 5G(paid)&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.mail.com/intl/ Mail.com](免費/付費服務)&lt;br /&gt;
|| 50MB&amp;lt;ref&amp;gt;[http://help.mail.com/index.html Mail.com FAQ] - What is the maximum size for sending and receiving email? &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| &#039;&#039;&#039;未限制&#039;&#039;&#039;&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.mail2000.com.tw/ Mail2000](付費服務)&lt;br /&gt;
|| 40MB&amp;lt;ref&amp;gt;[http://doc.mail2000.com.tw/m2k/faq_about_a1-3.htm 單封信件傳輸量及我的檔案的容量有多少？] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| 500MB~12GB&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://mail.pchome.com.tw/ PChome Online](免費)&lt;br /&gt;
|| 10MB&amp;lt;ref&amp;gt;[http://faq.pchome.com.tw/faq_solution.html?f_id=1&amp;amp;q_id=6&amp;amp;c_nickname=mail PC home E-Mail 是否有容量等限制？] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB&lt;br /&gt;
|| 250MB&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://webmail.seed.net.tw/Login.do Seednet](付費服務)&lt;br /&gt;
|| 10MB&amp;lt;ref&amp;gt;[http://webmail.seed.net.tw/web/rule.htm Seednet Webmail使用規範] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB&lt;br /&gt;
|| 2G&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.url.com.tw/emailstore/index.htm URL智邦生活館](付費服務)&lt;br /&gt;
|| 10MB(付費服務]&amp;lt;ref&amp;gt;[http://vipmail.url.com.tw/vipmail.asp?q=1 URL 智邦生活館 VIP Mail 常見問題集] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB(付費服務)&lt;br /&gt;
|| 2000MB(付費服務)&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [https://outlook.com outlook.com](免費) 前 hotmail&lt;br /&gt;
|| 34MB&amp;lt;ref&amp;gt;[https://support.office.com/en-us/article/Attach-files-in-Outlook-com-8d7c1ea7-4e5f-44ce-bb6e-c5fcc92ba9ab Attach files in Outlook.com - Outlook]&amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt; (超過可上傳至OneDrive，最多到 15GB(免費) ~ 50GB(付費)&amp;lt;ref&amp;gt;[https://support.office.com/en-us/article/storage-limits-in-outlook-com-7ac99134-69e5-4619-ac0b-2d313bba5e9e?ui=en-US&amp;amp;rs=en-US&amp;amp;ad=US Storage limits in Outlook.com - Outlook]&amp;lt;/ref&amp;gt;)&lt;br /&gt;
|| 20MB+&lt;br /&gt;
|| &lt;br /&gt;
|| 2018-08-25&lt;br /&gt;
|-&lt;br /&gt;
| {{Gd}}&lt;br /&gt;
|| [http://mail.yahoo.com.tw/ Yahoo!奇摩電子信箱](免費/付費服務)&lt;br /&gt;
|| 25MB(免費/付費服務)&amp;lt;ref&amp;gt;[https://tw.help.yahoo.com/kb/%E4%BF%A1%E4%BB%B6%E5%A4%A7%E5%B0%8F-%E9%99%90%E5%88%B6-sln5673.html 信件大小限制]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 15MB(免費/付費服務)&lt;br /&gt;
|| 1TB&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [https://protonmail.com/ ProtonMail](免費/付費服務)&lt;br /&gt;
|| 25MB&amp;lt;ref&amp;gt;[https://protonmail.com/support/knowledge-base/attaching-multiple-documents-to-a-message/ Attaching documents to a message and limits - ProtonMail Support]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 15MB&lt;br /&gt;
|| 500MB(免費服務)、5~20GB(免費/付費服務)&amp;lt;ref&amp;gt;[https://protonmail.com/support/knowledge-base/paid-plans/ ProtonMail Plans Explained (Free, Paid, Visionary) - ProtonMail Support]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2016-11-12&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [http://mail.qq.com/ QQ邮箱] 腾讯邮箱服务 (免費服務)&lt;br /&gt;
|| 50MB &amp;lt;br /&amp;gt; 超過限制可上傳至雲端硬碟，最多到 2GB &amp;lt;ref&amp;gt;[http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;id=11&amp;amp;&amp;amp;no=130 一封邮件可以发送多个附件吗？_QQ邮箱帮助中心] &amp;amp; [http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;id=35&amp;amp;&amp;amp;no=206 什么是文件中转站？_QQ邮箱帮助中心] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| &#039;&#039;&#039;未限制&#039;&#039;&#039;&amp;lt;ref&amp;gt;[http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;no=103&amp;amp;&amp;amp;id=22 QQ邮箱的容量和附件有多大？_QQ邮箱帮助中心]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2018-04-29&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
寄信到 hotmail 收到回信「Delivery Status Notification (Failure)」&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
伺服器的回應如下：&lt;br /&gt;
552 Too much mail data.(31457280 bytes bounded)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
訊息中「31457280 bytes」相當於 31 MB。實際信件的附檔檔案大小約 24 MB，因此需要如上表建議調整到 20 MB 或者是直接上傳到雲端硬碟空間。&lt;br /&gt;
&lt;br /&gt;
== 夾檔的檔案類型 ==&lt;br /&gt;
{{exclaim}} 如果夾檔的檔案類型是執行檔 ( .exe )、程式 ( .jar ) 等，可能會因為安全原因，遭到 Gmail 封鎖，而無法下載附檔&amp;lt;ref&amp;gt;[https://support.google.com/mail/answer/6590?hl=zh-Hant 部分檔案類型遭到封鎖 - Gmail說明]&amp;lt;/ref&amp;gt;。可以將檔案壓縮後改放到雲端硬碟 Google 雲端硬碟&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant Google 雲端硬碟可存放的檔案 - 雲端硬碟說明]&amp;lt;/ref&amp;gt;、Dropbox&amp;lt;ref&amp;gt;[https://www.dropbox.com/help/145 為什麼某些檔案無法從一台電腦同步到另一台電腦上？ - Dropbox 說明 - Dropbox]&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 相關頁面 ==&lt;br /&gt;
* {{Gd}} [[Procedure_of_campus_event#email | email 溝通途徑的注意事項]]&lt;br /&gt;
* [[Anti Spam Email|防制廣告信件]]&lt;br /&gt;
* [[User_agent#Mail_user_clients_.2F_Mail_user_agents |mail user client]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Comparison_of_webmail_providers Comparison of webmail providers - Wikipedia, the free encyclopedia]&lt;br /&gt;
* [[Email testing]]&lt;br /&gt;
&lt;br /&gt;
== 相關新聞聯播 ==&lt;br /&gt;
&lt;br /&gt;
{{News feed | title = 電子郵件 OR email OR 團隊溝通 相關新聞聯播 | feed = &amp;lt;rss&amp;gt;https://news.google.com/rss/search?q=%E9%9B%BB%E5%AD%90%E9%83%B5%E4%BB%B6+OR+email+OR+%E5%9C%98%E9%9A%8A%E6%BA%9D%E9%80%9A&amp;amp;hl=zh-TW&amp;amp;gl=TW&amp;amp;ceid=TW:zh-Hant&amp;lt;/rss&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
 &amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Email]] [[Category:Tool]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Email_testing&amp;diff=26432</id>
		<title>Email testing</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Email_testing&amp;diff=26432"/>
		<updated>2026-08-11T02:25:06Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* For role: web developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;← [[Testing]]&lt;br /&gt;
&lt;br /&gt;
== For role: users ==&lt;br /&gt;
Using the following e-mail service with name alias or alternative name&lt;br /&gt;
* [https://gmail.google.com/ Google Gmail]: plus sign {{exclaim}} the plus sign is not allowed by some websites&lt;br /&gt;
* Suggest search keyword: [http://lmgtfy.com/?q=anonymous%20email anonymous email]、拋棄式信箱 (Disposable Email) e.g. &#039;&#039;$&#039;&#039; [http://doc.mail2000.com.tw/edm/o_act/virtual/htm/faq.htm Ｍail2000拋棄式帳號：全新網域 輕鬆拋棄 廣告信Bye-bye！]&lt;br /&gt;
* &#039;&#039;服務停止&#039;&#039;&amp;lt;ref&amp;gt;[https://support.microsoft.com/zh-tw/help/12407/microsoft-account-manage-aliases 管理您 Microsoft 帳戶上的別名]&amp;lt;/ref&amp;gt; [http://get.live.com/mail/overview Windows Live™ Hotmail]: [http://windows.microsoft.com/zh-TW/hotmail/conquergraymail/advanced/alias Alias] / 在一個收件匣建立多個別名 {{access | date=2012-03-30}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For role: web developers ==&lt;br /&gt;
* {{Gd}} [https://www.caniemail.com/ Can I email… Support tables for HTML and CSS in emails] {{access | date=2026-04-24}} e.g. [https://www.caniemail.com/features/image-webp/ Can I email… webP image format]&lt;br /&gt;
* [[Troubleshooting of PHP errors#錯誤訊息: SMTP Error: Could not connect to SMTP host.]]&lt;br /&gt;
&lt;br /&gt;
== For role: system administrator ==&lt;br /&gt;
If you have the telnet permission,&lt;br /&gt;
* Suggest search keyword: [http://lmgtfy.com/?q=smtp%20telnet%20test smtp telnet test]&lt;br /&gt;
* [https://technet.microsoft.com/zh-tw/library/aa995718(v=exchg.65).aspx 如何使用 Telnet 來測試 SMTP 通訊]&lt;br /&gt;
* [https://support.google.com/mail/answer/78775?hl=zh-Hant 使用 POP 或 IMAP 傳送郵件時發生問題 - Gmail說明] {{access | date = 2016-08-08}}&lt;br /&gt;
* [http://www.xspace.idv.tw/bo_blog/post/85/ Outlook 錯誤代碼的含義及解決辦法] {{access | date = 2016-12-22}}&lt;br /&gt;
&lt;br /&gt;
是否可以連線到 SMTP 主機{{kbd | key =&amp;lt;nowiki&amp;gt;nslookup smtp.gmail.com&amp;lt;/nowiki&amp;gt; }} 或 {{kbd | key =&amp;lt;nowiki&amp;gt;telnet smtp.gmail.com port&amp;lt;/nowiki&amp;gt; }} (例子中以 gmail 作為 smtp 伺服器)&lt;br /&gt;
{{kbd | key =&amp;lt;nowiki&amp;gt;telnet smtp.gmail.com 465&amp;lt;/nowiki&amp;gt; }} 預期結果：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Trying 74.125.129.109...&lt;br /&gt;
Connected to smtp.gmail.com.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
^] //註：(Windows) 輸入 ctrl + ] 兩個按鍵，(Mac) 輸入 control + ] 兩個按鍵&lt;br /&gt;
telnet&amp;gt; quit&lt;br /&gt;
Connection closed.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
非預期結果：請調整防火牆設定&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Trying x.x.x.x...&lt;br /&gt;
telnet: connect to address x.x.x.x: Connection refused&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Web Dev]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Capacity_of_Email_Service&amp;diff=26431</id>
		<title>Capacity of Email Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Capacity_of_Email_Service&amp;diff=26431"/>
		<updated>2026-08-11T02:25:03Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* 相關頁面 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;單封信件 (含夾帶檔案) 的檔案大小上限 (maximum attachment size) 與建議&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Email服務每封郵件的檔案大小上限 ==&lt;br /&gt;
&#039;&#039;&#039;建議&#039;&#039;&#039;:&lt;br /&gt;
* 檔案大小 (file size) 控制在&#039;&#039;&#039;6-10MB&#039;&#039;&#039;: 因為信件夾帶的檔案經過編碼([http://en.wikipedia.org/wiki/MIME MIME] encode)後，會導致檔案大小變大，所以寄信時的信件(含夾帶的檔案)檔案大小建議能控制在上限的三分之二，即6-10MB，以免被退信。&lt;br /&gt;
* 超過10MB的檔案，可以考慮使用將附檔[[File compression|壓縮]] 或放在Web、FTP、[http://en.wikipedia.org/wiki/Comparison_of_one-click_hosters 線上檔案儲存網站]、[[Snapchat of file sharing | 閱後即焚檔案分享服務]] ex: [https://drive.google.com/ Google Drive] 單一檔案限 5TB&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant&amp;amp;vid=1-635756751147519182-13007898089037315163 檔案大小 - 雲端硬碟說明] {{access | date = 2015-08-20}}&amp;lt;/ref&amp;gt;, DropBox 單一檔案限2GB&amp;lt;ref&amp;gt;[https://www.dropbox.com/help/5 Dropbox 是否有檔案大小的限制或上限？ (Dropbox 說明中心)]&amp;lt;/ref&amp;gt;, [http://www.mediafire.com/ MediaFire](非圖檔的單一檔案限200MB), [http://www.yousendit.com/ YouSendIt](單一檔案限100MB) ...。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%; min-height: .01%; overflow-x: auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|| &amp;lt;b&amp;gt;網站名稱&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;單封信件(含夾帶檔案)的檔案上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;建議的夾帶檔案上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;信箱總容量上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;備註(拜訪日期)&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://webmail.aol.com/ AOL Mail](免費)&lt;br /&gt;
|| 16MB&amp;lt;ref&amp;gt;[http://help.aol.com/help/microsites/microsite.do?cmd=displayKCPopup&amp;amp;docType=kc&amp;amp;externalId=221717 Cannot send email attachments or embedded files on AOL WebMail- AOL Help]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 10MB&lt;br /&gt;
|| 超過2GB，輸入檢核碼即可增加空間&amp;lt;ref&amp;gt;[http://help.aol.com/help/microsites/microsite.do?cmd=displayKCPopup&amp;amp;docType=kc&amp;amp;externalId=218743 How do I save my emails in AOL WebMail?- AOL Help] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2010-09-11&lt;br /&gt;
|-&lt;br /&gt;
| {{Gd}}&lt;br /&gt;
|| [https://gmail.google.com/ Google Gmail](免費/付費服務)&lt;br /&gt;
|| 25MB&amp;lt;ref&amp;gt;[https://mail.google.com/support/bin/answer.py?answer=8770&amp;amp;topic=1516 Maximum attachment size - Gmail Help]  &amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt; (超過25MB可上傳至Google Drive，最多到 5TB&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant Google 雲端硬碟可存放的檔案 - 雲端硬碟說明]&amp;lt;/ref&amp;gt; )&lt;br /&gt;
|| 15MB&lt;br /&gt;
|| 15G(免費服務)/ 100GB-30TB(付費服務)&amp;lt;ref&amp;gt;[http://mail.google.com/support/bin/answer.py?hl=en&amp;amp;answer=39567 Google Storage - Gmail Help] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [http://www.mail.lycos.com/ Lycos Mail] (免費)&lt;br /&gt;
|| 35MB&amp;lt;ref&amp;gt;[https://cshelp.lycos.com/ics/support/KBAnswer.asp?questionID=73 Is there a limit to the size of the emails that I can send? - Lycos.com Helpdesk]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 21MB&lt;br /&gt;
|| 3G(free) ~ 5G(paid)&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.mail.com/intl/ Mail.com](免費/付費服務)&lt;br /&gt;
|| 50MB&amp;lt;ref&amp;gt;[http://help.mail.com/index.html Mail.com FAQ] - What is the maximum size for sending and receiving email? &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| &#039;&#039;&#039;未限制&#039;&#039;&#039;&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.mail2000.com.tw/ Mail2000](付費服務)&lt;br /&gt;
|| 40MB&amp;lt;ref&amp;gt;[http://doc.mail2000.com.tw/m2k/faq_about_a1-3.htm 單封信件傳輸量及我的檔案的容量有多少？] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| 500MB~12GB&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://mail.pchome.com.tw/ PChome Online](免費)&lt;br /&gt;
|| 10MB&amp;lt;ref&amp;gt;[http://faq.pchome.com.tw/faq_solution.html?f_id=1&amp;amp;q_id=6&amp;amp;c_nickname=mail PC home E-Mail 是否有容量等限制？] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB&lt;br /&gt;
|| 250MB&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://webmail.seed.net.tw/Login.do Seednet](付費服務)&lt;br /&gt;
|| 10MB&amp;lt;ref&amp;gt;[http://webmail.seed.net.tw/web/rule.htm Seednet Webmail使用規範] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB&lt;br /&gt;
|| 2G&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.url.com.tw/emailstore/index.htm URL智邦生活館](付費服務)&lt;br /&gt;
|| 10MB(付費服務]&amp;lt;ref&amp;gt;[http://vipmail.url.com.tw/vipmail.asp?q=1 URL 智邦生活館 VIP Mail 常見問題集] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB(付費服務)&lt;br /&gt;
|| 2000MB(付費服務)&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [https://outlook.com outlook.com](免費) 前 hotmail&lt;br /&gt;
|| 34MB&amp;lt;ref&amp;gt;[https://support.office.com/en-us/article/Attach-files-in-Outlook-com-8d7c1ea7-4e5f-44ce-bb6e-c5fcc92ba9ab Attach files in Outlook.com - Outlook]&amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt; (超過可上傳至OneDrive，最多到 15GB(免費) ~ 50GB(付費)&amp;lt;ref&amp;gt;[https://support.office.com/en-us/article/storage-limits-in-outlook-com-7ac99134-69e5-4619-ac0b-2d313bba5e9e?ui=en-US&amp;amp;rs=en-US&amp;amp;ad=US Storage limits in Outlook.com - Outlook]&amp;lt;/ref&amp;gt;)&lt;br /&gt;
|| 20MB+&lt;br /&gt;
|| &lt;br /&gt;
|| 2018-08-25&lt;br /&gt;
|-&lt;br /&gt;
| {{Gd}}&lt;br /&gt;
|| [http://mail.yahoo.com.tw/ Yahoo!奇摩電子信箱](免費/付費服務)&lt;br /&gt;
|| 25MB(免費/付費服務)&amp;lt;ref&amp;gt;[https://tw.help.yahoo.com/kb/%E4%BF%A1%E4%BB%B6%E5%A4%A7%E5%B0%8F-%E9%99%90%E5%88%B6-sln5673.html 信件大小限制]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 15MB(免費/付費服務)&lt;br /&gt;
|| 1TB&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [https://protonmail.com/ ProtonMail](免費/付費服務)&lt;br /&gt;
|| 25MB&amp;lt;ref&amp;gt;[https://protonmail.com/support/knowledge-base/attaching-multiple-documents-to-a-message/ Attaching documents to a message and limits - ProtonMail Support]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 15MB&lt;br /&gt;
|| 500MB(免費服務)、5~20GB(免費/付費服務)&amp;lt;ref&amp;gt;[https://protonmail.com/support/knowledge-base/paid-plans/ ProtonMail Plans Explained (Free, Paid, Visionary) - ProtonMail Support]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2016-11-12&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [http://mail.qq.com/ QQ邮箱] 腾讯邮箱服务 (免費服務)&lt;br /&gt;
|| 50MB &amp;lt;br /&amp;gt; 超過限制可上傳至雲端硬碟，最多到 2GB &amp;lt;ref&amp;gt;[http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;id=11&amp;amp;&amp;amp;no=130 一封邮件可以发送多个附件吗？_QQ邮箱帮助中心] &amp;amp; [http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;id=35&amp;amp;&amp;amp;no=206 什么是文件中转站？_QQ邮箱帮助中心] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| &#039;&#039;&#039;未限制&#039;&#039;&#039;&amp;lt;ref&amp;gt;[http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;no=103&amp;amp;&amp;amp;id=22 QQ邮箱的容量和附件有多大？_QQ邮箱帮助中心]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2018-04-29&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
寄信到 hotmail 收到回信「Delivery Status Notification (Failure)」&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
伺服器的回應如下：&lt;br /&gt;
552 Too much mail data.(31457280 bytes bounded)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
訊息中「31457280 bytes」相當於 31 MB。實際信件的附檔檔案大小約 24 MB，因此需要如上表建議調整到 20 MB 或者是直接上傳到雲端硬碟空間。&lt;br /&gt;
&lt;br /&gt;
== 夾檔的檔案類型 ==&lt;br /&gt;
{{exclaim}} 如果夾檔的檔案類型是執行檔 ( .exe )、程式 ( .jar ) 等，可能會因為安全原因，遭到 Gmail 封鎖，而無法下載附檔&amp;lt;ref&amp;gt;[https://support.google.com/mail/answer/6590?hl=zh-Hant 部分檔案類型遭到封鎖 - Gmail說明]&amp;lt;/ref&amp;gt;。可以將檔案壓縮後改放到雲端硬碟 Google 雲端硬碟&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant Google 雲端硬碟可存放的檔案 - 雲端硬碟說明]&amp;lt;/ref&amp;gt;、Dropbox&amp;lt;ref&amp;gt;[https://www.dropbox.com/help/145 為什麼某些檔案無法從一台電腦同步到另一台電腦上？ - Dropbox 說明 - Dropbox]&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 相關頁面 ==&lt;br /&gt;
* {{Gd}} [[Procedure_of_campus_event#email | email 溝通途徑的注意事項]]&lt;br /&gt;
* [[Anti Spam Email|防制廣告信件]]&lt;br /&gt;
* [[User_agent#Mail_user_clients_.2F_Mail_user_agents |mail user client]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Comparison_of_webmail_providers Comparison of webmail providers - Wikipedia, the free encyclopedia]&lt;br /&gt;
&lt;br /&gt;
== 相關新聞聯播 ==&lt;br /&gt;
&lt;br /&gt;
{{News feed | title = 電子郵件 OR email OR 團隊溝通 相關新聞聯播 | feed = &amp;lt;rss&amp;gt;https://news.google.com/rss/search?q=%E9%9B%BB%E5%AD%90%E9%83%B5%E4%BB%B6+OR+email+OR+%E5%9C%98%E9%9A%8A%E6%BA%9D%E9%80%9A&amp;amp;hl=zh-TW&amp;amp;gl=TW&amp;amp;ceid=TW:zh-Hant&amp;lt;/rss&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
 &amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Email]] [[Category:Tool]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=I_need_inspiration&amp;diff=26430</id>
		<title>I need inspiration</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=I_need_inspiration&amp;diff=26430"/>
		<updated>2026-08-10T04:05:44Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Misc. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I need inspiration for design purpose&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Classification ==&lt;br /&gt;
=== Show cases / UI / APP design ===&lt;br /&gt;
* [https://dribbble.com/shots?sort=views Popular show cases on dribbble.com]: &amp;quot;Web designers, graphic designers, illustrators, icon artists, typographers, logo designers, and other creative types share small screenshots (shots) that show their work, process, and current projects.&amp;quot; &amp;lt;ref&amp;gt;[http://dribbble.com/site/about Dribbble - About]&amp;lt;/ref&amp;gt; {{access | date = 2023-01-04}}&lt;br /&gt;
** 「專門為平面設計師和創意專業人士設立。這個網站提供了一個展示和發現創意作品的空間，涵蓋了各種設計類別，如網頁設計、品牌、動畫和插畫等。可以按顏色、標籤和時間篩選內容，方便使用者發現特定的設計風格或趨勢。Dribbble 也為設計師們提供了一個交流想法、分享作品和相互獲得靈感的空間。」Made with GPT-4 🤖 &lt;br /&gt;
* [https://www.behance.net/ Behance 在线作品集]: [https://www.behance.net/search?field=132&amp;amp;content=projects&amp;amp;sort=appreciations&amp;amp;time=week UI/UX projects on Behance] {{access | date = 2016-06-20}}&lt;br /&gt;
** 「Adobe 旗下的創意作品集平台，涵蓋平面設計、插畫、攝影、UI/UX、動態影像等多元領域。使用者可以建立完整的專案作品集、追蹤喜愛的創作者，並依熱門程度、時間或領域篩選作品，是全球設計師展示與求職的重要平台之一。」Made with Claude 🤖&lt;br /&gt;
* [http://www.site.uplabs.com/ Web design and development, Daily – SiteUp] {{access | date = 2016-02-29}}&lt;br /&gt;
** 「每日更新的網頁設計與開發資源分享平台，內容包含 UI 素材、程式碼片段、設計靈感等，適合開發者與設計師快速獲取當日精選的實用資源與趨勢動態。」Made with Claude 🤖&lt;br /&gt;
* [http://www.heyshow.com/gallery/ 設計畫廊 | 黑秀網 HeyShow.com] {{access | date = 2015-12-10}}&lt;br /&gt;
** 「台灣早期具代表性的華文設計社群網站，畫廊區收錄插畫、平面設計、攝影等各類創作作品，讓設計師與創作者能夠展示作品集、交流創作心得，並認識台灣本地的設計圈生態。」Made with Claude 🤖&lt;br /&gt;
* [http://woofeng.cn/inspiration/web/ 黄蜂网woofeng.cn] {{access | date = 2016-09-02}}&lt;br /&gt;
** 「中國的設計靈感與素材分享網站，網頁設計欄目彙整大量國內外優秀網站作品，並延伸提供平面、UI、攝影等相關教學與資源下載，是簡體中文使用者常用的設計參考站台之一。」Made with Claude 🤖&lt;br /&gt;
* tool: [https://chrome.google.com/webstore/detail/panda-5-news-inspiration/haafibkemckmbknhfkiiniobjpgkebko Panda 5 | News &amp;amp; Inspiration Dashboard] on {{Chrome}}&lt;br /&gt;
** 「一款 Chrome 瀏覽器擴充功能，將新分頁轉換為設計靈感儀表板，整合多個設計新聞與作品展示網站的最新內容，讓使用者一開啟瀏覽器就能瀏覽當日的設計趨勢與新聞。」Made with Claude 🤖&lt;br /&gt;
* CodePen: Explore [https://codepen.io/tag/nav-bar Pens tagged &#039;nav-bar&#039; on CodePen] or browse [https://codepen.io/chriscoyier/pens/tags Chris Coyier&#039;s tagged pens on CodePen]&lt;br /&gt;
** 「前端開發者社群平台，讓使用者以 HTML、CSS、JavaScript 撰寫並即時預覽網頁作品（稱為 Pen）。可依標籤（如 nav-bar）搜尋特定元件的實作範例，是尋找互動效果與版面實作程式碼的實用資源。」Made with Claude 🤖&lt;br /&gt;
* [https://muz.li/ Muzli - Design inspiration hub]&lt;br /&gt;
** 「以瀏覽器擴充功能形式提供的設計靈感彙整工具，自動蒐集來自各大設計網站的最新作品、文章與趨勢，並整合成單一資訊流，方便設計師隨時掌握業界動態與獲取創作靈感。」Made with Claude 🤖&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://mobbin.com/ Mobbin — UI &amp;amp; UX design inspiration for mobile &amp;amp; web apps]: Find design patterns in seconds, such as screens, UI elements, flows, and text within screenshots.&lt;br /&gt;
** 「付費訂閱的 UI/UX 設計模式資料庫，收錄大量真實 App 與網站的畫面截圖，並依畫面類型、元件、使用流程等分類整理，讓設計師能快速查找特定情境（如登入、結帳）的業界實作範例。」Made with Claude 🤖&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.details.so/inspo The details behind the world&#039;s best websites.]&lt;br /&gt;
** 「付費制的網站設計拆解分析平台，深入剖析知名網站在排版、動效、色彩與互動細節上的設計決策，適合想學習頂尖網站背後設計思維、而非僅止於視覺參考的使用者。」Made with Claude 🤖&lt;br /&gt;
&lt;br /&gt;
=== Admin UI Design Showcase ===&lt;br /&gt;
Seeking quality admin dashboard design examples for reference.&lt;br /&gt;
&lt;br /&gt;
* [https://dribbble.com/tags/backend-dashboard Backend Dashboard designs, themes, templates and downloadable graphic elements on Dribbble]&lt;br /&gt;
* [https://elements.envato.com/web-templates/admin-templates/backend Admin Templates Backend Templates - Envato]&lt;br /&gt;
* [https://99designs.com/inspiration/designs/admin-panel Admin Panel Designs - 75+ Admin Design Ideas, Images &amp;amp; Inspiration In 2025 | 99designs]&lt;br /&gt;
* [https://www.figma.com/templates/dashboard-designs/ 50+ Free Dashboard Design Templates &amp;amp; Components | Figma]&lt;br /&gt;
* [https://www.creative-tim.com/templates/admin-dashboard 206+ Admin and Dashboard Template @ Creative Tim]&lt;br /&gt;
&lt;br /&gt;
=== Animation effect ===&lt;br /&gt;
* [https://www.designspells.com/ Design Spells · Design details that feel like magic]&lt;br /&gt;
&lt;br /&gt;
=== Awards ===&lt;br /&gt;
* [http://www.csswinner.com/ CSS Winner - Website Awards - CSS Award Gallery for Web Design Inspiration]&lt;br /&gt;
* [http://www.cssdesignawards.com/ Website Awards | CSS Awards | Best Websites In The World - CSSDA]&lt;br /&gt;
* [http://www.awwwards.com/ Awwwards - Website Awards - Best Web Design Trends] {{access | date = 2016-02-29}}&lt;br /&gt;
* [https://www.cssdesignawards.com/ CSS Design Awards - Website Awards - Best Web Design Inspiration - CSS Awards]&lt;br /&gt;
&lt;br /&gt;
=== Which design is better? ===&lt;br /&gt;
Vote by the users.&lt;br /&gt;
* [http://desinion.com/ Desinion] {{access | date = 2016-02-29}}&lt;br /&gt;
&lt;br /&gt;
=== Landing page ===&lt;br /&gt;
* [https://ryuki-design.jp/ 楽天市場のデザイン制作 リューキデザイン｜東京・大阪・福岡]&lt;br /&gt;
&lt;br /&gt;
=== Presentation ===&lt;br /&gt;
* [https://www.instagram.com/p/C0g2P5hRe4B/?igshid=ODhhZWM5NmIwOQ%3D%3D Deck.Gallery 是一個專門為設計師、創業者和市場行銷人員提供簡報設計靈感的平台。 由產品設計師 Muharrem 創建，這個平台讓你可以欣賞到來自全球的精彩設計，也歡迎你提交自己的作品，與大家分享你的創意。 如果你需要專業的設計服務，Deck.Gallery… | Instagram]&lt;br /&gt;
&lt;br /&gt;
=== Portfolio ===&lt;br /&gt;
* [https://www.bestfolios.com/home Bestfolios - UI/UX Design Portfolio Inspiration and Showcase] 收集了設計師的作品集網站，作為 UI/UX 設計師打造個人作品集時的靈感來源。 {{access | date = 2026-08-10}}&lt;br /&gt;
&lt;br /&gt;
* [https://www.awwwards.com/inspiration_search/porfolio/ Awwwards Nominees] Awwwards 網站收錄「作品集」類別的入圍與得獎網站。這些作品經過設計師社群投票得獎，可供觀摩排版、互動效果與視覺風格。 {{access | date = 2026-08-10}}&lt;br /&gt;
&lt;br /&gt;
=== Misc. ===&lt;br /&gt;
* [https://www.checklist.design/ Checklist Design - A collection of the best design practices.] 收集了最佳設計實踐 (design practice)，提供全面的收錄。該網站包括了各種設計清單，涵蓋了頁面、元素、流程、主題和品牌等方面，特別聚焦於登入頁面、部落格文章、定價、404錯誤等。 {{access | date = 2023-12-14}}&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
Subscribe the fan pages or community&lt;br /&gt;
* [https://www.facebook.com/designtongue 設計大舌頭]&lt;br /&gt;
* [https://www.facebook.com/fis.workshop/ 空白地區｜Fi（Peng, Hsing Kai）]&lt;br /&gt;
* [https://www.facebook.com/somekidding 聶永真 Aaron Nieh]&lt;br /&gt;
* [https://www.facebook.com/wangzhihongstudio wangzhihong.com] 王志弘&lt;br /&gt;
* [https://www.facebook.com/ogdesign.tw 奧革設計]&lt;br /&gt;
* [https://www.facebook.com/yenpochundesign/ 三頁文]&lt;br /&gt;
* [https://www.facebook.com/loveudfish/ 愛˙通用設計的小魚]&lt;br /&gt;
* [https://www.facebook.com/ConversionLab.co/ Conversion Lab]&lt;br /&gt;
* [https://ello.co/discover Featured | Ello]&lt;br /&gt;
&lt;br /&gt;
== Style guideline &amp;amp; UI patterns ==&lt;br /&gt;
Style guideline, Design guideline , Branding guidelines, Branding design guidelines&lt;br /&gt;
* {{Gd}} &#039;&#039;&#039;Collection&#039;&#039;&#039;: [https://github.com/alexpate/awesome-design-systems alexpate/awesome-design-systems: 💅🏻 ⚒ A collection of awesome design systems]&lt;br /&gt;
* [https://playbook.cio.gov/designstandards/ U.S. Web Design Standards]&lt;br /&gt;
* Apple [https://developer.apple.com/ios/human-interface-guidelines/ iOS Human Interface Guidelines]&lt;br /&gt;
* [https://developers.google.com/web/fundamentals/resources/styleguide/ Visual Style Guide — Web Fundamentals]&lt;br /&gt;
* Google [https://material.google.com/ Material design guidelines]&lt;br /&gt;
* Salesforce [http://www.lightningdesignsystem.com/guidelines/overview/ Lightning Design System]&lt;br /&gt;
* [http://brand.uber.com/ Uber Brand Guide]&lt;br /&gt;
* [https://ant.design/ Ant Design - A UI Design Language] {{access | date =2017-05-23}}&lt;br /&gt;
* [https://atlassian.design/ Atlassian Design] {{access | date =2017-05-23}}&lt;br /&gt;
* [http://design.iing.tw/ 點亮台灣・設計規範 Web Design Guideline] 「點亮台灣 — 蔡英文・陳建仁總統候選人競選官網所制訂的網站設計規範」{{access | date =2017-03-02}} [https://web.archive.org/web/20190718224305/http://design.iing.tw/ 網頁備份]&lt;br /&gt;
* [https://codepen.io/frank890417/pen/YGKVrj Project2-Brand Guideline] {{access | date =2018-06-04}}&lt;br /&gt;
* [https://heydesign.systems/ Hey Design Systems!]&lt;br /&gt;
* [https://tiponet.tipo.gov.tw/TIPO_UIUX/ 設計規範書 Design Guideline · GitBook]&lt;br /&gt;
&lt;br /&gt;
UI patterns&lt;br /&gt;
* [https://pttrns.com/ Mobile Design Patterns - Pttrns] {{access | date = 2017-03-18}}&lt;br /&gt;
* [http://android.inspired-ui.com/ Inspired UI - Mobile Apps Design Patterns [Android]] {{access | date = 2017-03-18}}&lt;br /&gt;
* [https://ui.shadcn.com/ The Foundation for your Design System - shadcn/ui] {{access | date = 2025-10-08}}&lt;br /&gt;
&lt;br /&gt;
Collection of snapshots&lt;br /&gt;
* Follow the interests: [https://www.pinterest.com/ Pinterest: Discover and save creative ideas]&lt;br /&gt;
* [http://emptystat.es/ Empty States] examples {{access | date = 2016-06-06}}&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
* [http://www.inspireux.com/ User Experience articles and quotes to inspire and connect the UX community | inspireUX]&lt;br /&gt;
* [http://littlebigdetails.com/ Little Big Details]&lt;br /&gt;
* [http://www.creativebloq.com/tag/inspiration Latest Inspiration articles | Tags | Creative Bloq]&lt;br /&gt;
* [http://designmodo.com/ Designmodo - Web Design Blog and Shop]&lt;br /&gt;
* [https://www.quora.com/Which-websites-should-a-Front-end-developer-look-up-to-for-inspiration Which websites should a Front-end developer look up to for inspiration? - Quora]&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
* [https://coolors.co/ Coolors - The super fast color schemes generator!] Press {{kbd | key=space}} to generate the new color set&lt;br /&gt;
相關文章: [[CSS_tools#.E6.8C.91.E9.81.B8.E9.A1.8F.E8.89.B2|挑選顏色]]&lt;br /&gt;
* Pantone [https://www.pantone.com/hk/tc/color-of-the-year-2022 彩通亞太區 | Pantone Color of the Year 2022 / 介紹] {{access | date=2022-07-14}}&lt;br /&gt;
&lt;br /&gt;
== Examples of bad design ==&lt;br /&gt;
* Hashtag #badeesign on [https://www.instagram.com/explore/tags/baddesign/ Instagram 上的 #baddesign 主題標籤], [https://twitter.com/hashtag/baddesign #baddesign - Twitter 搜尋]&lt;br /&gt;
* Hashtag #NormanDoor on [https://www.instagram.com/explore/tags/normandoor/ Instagram 上的 #normandoor 主題標籤], [https://twitter.com/hashtag/normandoor #normandoor - Twitter Search]&lt;br /&gt;
* [https://www.theuncomfortable.com/ The Uncomfortable - a collection of deliberately inconvenient objects]&lt;br /&gt;
* [https://userinyerface.com/ User Inyerface - A worst-practice UI experiment]&lt;br /&gt;
* [https://hungryowl.typepad.com/webdesign/ 網站設計大不易]&lt;br /&gt;
&lt;br /&gt;
{{Tips}} [https://99percentinvisible.org/article/norman-doors-dont-know-whether-push-pull-blame-design/ Norman Doors: Don&#039;t Know Whether to Push or Pull? Blame Design. - 99% Invisible]&lt;br /&gt;
&lt;br /&gt;
== off topic ==&lt;br /&gt;
* [http://www.reddit.com/r/GetMotivated/ Get Motivated!] on reddit&lt;br /&gt;
&lt;br /&gt;
reference&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Template:Build a website}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Design]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26429</id>
		<title>Troubleshooting of GIT</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26429"/>
		<updated>2026-08-07T06:59:51Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Git Push Failed: Invalid username or token (GitHub No Longer Supports Password Authentication) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Troubleshooting of GIT ==&lt;br /&gt;
&lt;br /&gt;
=== Git Push Failed: Invalid username or token (GitHub No Longer Supports Password Authentication) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; produces the following error:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
remote: Invalid username or token. Password authentication is not supported for Git operations.&lt;br /&gt;
fatal: Authentication failed for &#039;https://github.com/your-org/your-repo/&#039;&lt;br /&gt;
&lt;br /&gt;
In a case you entered incorrect password, please&lt;br /&gt;
update it in Keychain Access application.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diagnosis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
First check the current login status of the GitHub CLI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gh auth status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the token has expired, a message similar to the following will appear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
github.com&lt;br /&gt;
  X Failed to log in to github.com account UserName (keyring)&lt;br /&gt;
* Active account: true&lt;br /&gt;
* The token in keyring is invalid.&lt;br /&gt;
* To re-authenticate, run: gh auth login -h github.com&lt;br /&gt;
* To forget about this account, run: gh auth logout -h github.com -u UserName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also directly query the GitHub credentials stored in the macOS Keychain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
security find-internet-password -s github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This error is typically caused by one of the following:&lt;br /&gt;
&lt;br /&gt;
* An old GitHub account password (rather than a token) is stored in the macOS Keychain, and Git&#039;s attempt to authenticate with that password fails.&lt;br /&gt;
* The Personal Access Token in the &amp;lt;code&amp;gt;gh&amp;lt;/code&amp;gt; keyring has expired, been revoked, or had its permissions changed.&lt;br /&gt;
* A token or SSH key was never set up, so Git is still falling back to the legacy password authentication flow.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Re-authenticate the GitHub CLI&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gh auth login -h github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Select the following options in order:&lt;br /&gt;
&lt;br /&gt;
* What is your preferred protocol for Git operations on this host? → &amp;lt;code&amp;gt;HTTPS&amp;lt;/code&amp;gt; (matches the existing remote protocol)&lt;br /&gt;
* How would you like to authenticate GitHub CLI? → &amp;lt;code&amp;gt;Login with a web browser&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A one-time code will be displayed. Copy it and press Enter; a browser window will open the GitHub device authorization page to complete the login:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
! First copy your one-time code: XXXX-XXXX&lt;br /&gt;
Press Enter to open https://github.com/login/device in your browser...&lt;br /&gt;
&lt;br /&gt;
✓ Authentication complete.&lt;br /&gt;
* gh config set -h github.com git_protocol https&lt;br /&gt;
✓ Configured git protocol&lt;br /&gt;
✓ Logged in as UserName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Git Shows Files as Modified After chmod — File Mode Changes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After running &amp;lt;code&amp;gt;chmod +x&amp;lt;/code&amp;gt; or copying the repository between different operating systems or file systems, Git may report files as modified even though their contents have not changed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&lt;br /&gt;
modified: scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; may show only a file mode change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/scripts/deploy.sh b/scripts/deploy.sh&lt;br /&gt;
old mode 100644&lt;br /&gt;
new mode 100755&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Git file modes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;100644&amp;lt;/code&amp;gt; means a regular non-executable file.&lt;br /&gt;
* &amp;lt;code&amp;gt;100755&amp;lt;/code&amp;gt; means a regular executable file.&lt;br /&gt;
&lt;br /&gt;
Git records the executable bit as part of the tracked file metadata. Therefore, adding or removing executable permission can appear as a modification even when the file contents are identical. Git’s diff format explicitly reports these changes as &amp;lt;code&amp;gt;old mode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;new mode&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diagnosis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the following command to check whether the reported changes are file mode changes only:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff --summary&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode change 100644 =&amp;gt; 100755 scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also inspect the full diff:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the output contains only &amp;lt;code&amp;gt;old mode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;new mode&amp;lt;/code&amp;gt;, without added or removed content lines, the change is caused by the executable bit rather than file contents.&lt;br /&gt;
&lt;br /&gt;
Check the current repository setting with: &amp;lt;ref&amp;gt;[https://git-scm.com/docs/git-config?utm_source=chatgpt.com Git - git-config Documentation]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see which configuration file defines the value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --show-origin --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The behavior is controlled by Git’s &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; setting.&lt;br /&gt;
&lt;br /&gt;
When it is set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, Git checks whether the executable bit in the working tree differs from the mode stored in the Git index. This can create unexpected changes when:&lt;br /&gt;
&lt;br /&gt;
* A file was modified using &amp;lt;code&amp;gt;chmod +x&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;chmod -x&amp;lt;/code&amp;gt;.&lt;br /&gt;
* A repository was copied between Linux, macOS, Windows, a network drive, or another file system with different permission behavior.&lt;br /&gt;
* An archive, synchronization tool, or shared folder changed executable permissions.&lt;br /&gt;
* A container or deployment process rewrote file modes.&lt;br /&gt;
&lt;br /&gt;
Git’s documentation notes that some file systems may not reliably preserve executable-bit information, which is why &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; can be disabled when those mode differences should not be trusted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To ignore executable-permission changes in the current repository, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config core.fileMode false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the recommended scope when the issue affects only one repository. The setting is saved in that repository’s &amp;lt;code&amp;gt;.git/config&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
To apply the setting to all repositories for the current user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global core.fileMode false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global setting is stored in the user-level Git configuration and acts as a fallback unless a repository overrides it.&lt;br /&gt;
&lt;br /&gt;
Verify the effective value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The expected output is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check the repository again:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
git diff --summary&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Permission-only changes should no longer appear as unstaged modifications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Restore File Mode Tracking&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To restore executable-bit tracking for the current repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config core.fileMode true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remove the repository-specific override and return to the global or system default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --unset core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To restore tracking globally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global core.fileMode true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When the Executable Bit Should Be Committed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do not disable &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; merely to hide a legitimate permission change.&lt;br /&gt;
&lt;br /&gt;
For shell scripts, deployment scripts, Git hooks, command-line tools, and other files that must be executable after checkout, record the executable bit in Git intentionally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x scripts/deploy.sh&lt;br /&gt;
git add scripts/deploy.sh&lt;br /&gt;
git commit -m &amp;quot;Mark deploy script as executable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The committed mode change will appear as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode change 100644 =&amp;gt; 100755 scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the local file system cannot apply &amp;lt;code&amp;gt;chmod&amp;lt;/code&amp;gt; correctly, update the Git index directly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git update-index --chmod=+x scripts/deploy.sh&lt;br /&gt;
git commit -m &amp;quot;Mark deploy script as executable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remove executable status from the Git index:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git update-index --chmod=-x scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git provides index-level support for explicitly overriding a tracked file’s executable bit.&lt;br /&gt;
&lt;br /&gt;
{{exclaim}} Notice: Setting &amp;lt;code&amp;gt;core.fileMode=false&amp;lt;/code&amp;gt; does not change the actual operating-system permissions and does not rewrite previously committed file modes. It only tells Git not to treat executable-bit differences in the working tree as modifications. Use a repository-level setting unless the same problem consistently affects all repositories on the machine.&lt;br /&gt;
&lt;br /&gt;
=== Git Submodule Pull Failed: unable to create file — File exists ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After pulling in GitHub Desktop, met the error message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fetching submodule lib&lt;br /&gt;
error: unable to create file feeds/example.php: File exists&lt;br /&gt;
Updating xxxxxxxx..xxxxxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When Git tries to update the submodule to a newer commit, it finds a local untracked file with the same name, blocking the checkout. A mid-pull failure leaves the submodule in an inconsistent state and causes a large number of unexpected unstaged changes to appear in GitHub Desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run the following command in the project root directory to force re-sync the submodule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git submodule update --init --recursive --force&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it still fails, manually remove the conflicting file and retry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm lib/feeds/example.php&lt;br /&gt;
git submodule update --init --recursive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter the submodule directory and verify the status is clean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd lib&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The expected output should be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HEAD detached from xxxxxxxx&lt;br /&gt;
nothing to commit, working tree clean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
`nothing to commit, working tree clean` confirms the submodule has been successfully synced — return to GitHub Desktop and continue as normal. `HEAD detached` is the expected state for a submodule and does not require any action.&lt;br /&gt;
&lt;br /&gt;
{{exclaim}} Notice: The large number of unstaged changes appearing in GitHub Desktop after a failed Pull will typically return to normal once the submodule is fixed. If unexpected changes still remain, run &amp;lt;code&amp;gt;git submodule foreach git checkout .&amp;lt;/code&amp;gt; to revert all modifications inside every submodule.&lt;br /&gt;
&lt;br /&gt;
=== Restoring deleted files in Git ===&lt;br /&gt;
[[Restoring deleted files in Git]]&lt;br /&gt;
&lt;br /&gt;
=== SSH Authentication Failed: Permission denied (publickey) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After running the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
you may see the following error:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cloning into &#039;/opt/your-app&#039;...&lt;br /&gt;
git@github.com: Permission denied (publickey).&lt;br /&gt;
fatal: Could not read from remote repository.&lt;br /&gt;
&lt;br /&gt;
Please make sure you have the correct access rights and the repository exists.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A similar error may also occur when running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This error occurs when Git cannot authenticate with GitHub over SSH.&lt;br /&gt;
&lt;br /&gt;
Common causes include:&lt;br /&gt;
&lt;br /&gt;
* The SSH key does not exist on the server.&lt;br /&gt;
* The SSH key has not been added to GitHub.&lt;br /&gt;
* The SSH key is added to the wrong GitHub account or the wrong repository.&lt;br /&gt;
* The repository is private and the key does not have access.&lt;br /&gt;
* The server has multiple SSH keys, but Git is using the wrong one.&lt;br /&gt;
* The key is a GitHub Deploy Key that belongs to another repository.&lt;br /&gt;
* `sudo git clone` or `sudo git pull` is being used, causing Git to use the `root` user&#039;s SSH key instead of the deploy user&#039;s SSH key.&lt;br /&gt;
&lt;br /&gt;
For example, if you run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current SSH key is valid, but it is linked to another repository&#039;s Deploy Key. In that case, GitHub may return:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERROR: Repository not found.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
even if the target repository URL is correct.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended Solution — Use a dedicated SSH alias for the project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the safest approach when the server has multiple GitHub Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
Assume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Deploy user: your-user&lt;br /&gt;
App path: /opt/your-app&lt;br /&gt;
Private key: /home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
Public key: /home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
Repository: git@github.com:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1 — Check the key exists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -l ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the key does not exist, create one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t ed25519 -C &amp;quot;your-app-deploy-key&amp;quot; -f ~/.ssh/id_ed25519_your_app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2 — Add the public key to GitHub&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Print the public key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add it to the target repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub Repository&lt;br /&gt;
→ Settings&lt;br /&gt;
→ Deploy keys&lt;br /&gt;
→ Add deploy key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the server only needs to clone or pull the repository, do not enable write access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3 — Configure SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Edit the SSH config file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host github-your-app&lt;br /&gt;
  HostName github.com&lt;br /&gt;
  User git&lt;br /&gt;
  IdentityFile ~/.ssh/id_ed25519_your_app&lt;br /&gt;
  IdentitiesOnly yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fix SSH file permissions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod 700 ~/.ssh&lt;br /&gt;
chmod 600 ~/.ssh/config ~/.ssh/id_ed25519_your_app&lt;br /&gt;
chmod 644 ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh&amp;lt;/code&amp;gt; should be accessible only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/config/&amp;lt;/code&amp;gt; should be readable/writable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app&amp;lt;/code&amp;gt; private key should be readable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app.pub&amp;lt;/code&amp;gt; public key can be readable by others&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4 — Test the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is expected. It means SSH authentication works, but GitHub does not allow interactive shell login.&lt;br /&gt;
&lt;br /&gt;
If the result shows another repository, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the alias is not using the intended key, or the key was added to the wrong repository.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 5 — Clone using the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Instead of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If `/opt/your-app` requires root permission to create, prefer creating the directory first and assigning ownership to the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /opt/your-app&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This avoids using `sudo git clone`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 6 — If the repository already exists, update the remote URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check the current remote:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it uses the default GitHub host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
change it to use the SSH alias:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Avoid using sudo with Git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Avoid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because `sudo` runs Git as `root`, Git may use root&#039;s SSH keys instead of the deploy user&#039;s SSH keys.&lt;br /&gt;
&lt;br /&gt;
If the app directory is owned by `root`, fix ownership instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run Git commands as the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Issue: dubious ownership&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If Git shows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fatal: detected dubious ownership in repository at &#039;/opt/your-app&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current user and the repository owner do not match.&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -ld /opt/your-app&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the app should be maintained by the deploy user, fix ownership:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, mark the directory as safe:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global --add safe.directory /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For deployment directories, fixing ownership is usually cleaner if the deploy user is expected to run `git pull`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternative Solution — Pass the SSH key inline&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can also override the SSH command directly.&lt;br /&gt;
&lt;br /&gt;
First, test the key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to run this with `sudo`, preserve the environment explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, this is usually less clean than using an SSH alias, especially for long-term maintenance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-o IdentitiesOnly=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
forces SSH to use only the specified key and prevents SSH from trying other keys loaded in the agent. This is important on servers with multiple Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Recommended long-term setup:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 1. Create or confirm a dedicated deploy key&lt;br /&gt;
ls ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&lt;br /&gt;
# 2. Add the public key to the target GitHub repository Deploy Keys&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&lt;br /&gt;
# 3. Configure SSH alias&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&lt;br /&gt;
# 4. Test alias&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&lt;br /&gt;
# 5. Clone or update remote using alias&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&lt;br /&gt;
# or, for an existing repo&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The key lesson is: when multiple Deploy Keys exist on the same server, avoid relying on `git@github.com`. Use a project-specific SSH alias such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so Git always uses the correct SSH key.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent Generating a new SSH key and adding it to the ssh-agent - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account Adding a new SSH key to your GitHub account - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection Testing your SSH connection - GitHub Docs]&lt;br /&gt;
* [https://linux.die.net/man/5/ssh_config ssh_config(5): OpenSSH SSH client config files - Linux man page]&lt;br /&gt;
* [https://docs.github.com/en/authentication/troubleshooting-ssh Troubleshooting SSH - GitHub Docs]&lt;br /&gt;
&lt;br /&gt;
[[Category: Git]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26428</id>
		<title>Troubleshooting of GIT</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26428"/>
		<updated>2026-08-07T06:59:21Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Troubleshooting of GIT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Troubleshooting of GIT ==&lt;br /&gt;
&lt;br /&gt;
=== Git Push Failed: Invalid username or token (GitHub No Longer Supports Password Authentication) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; produces the following error:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
remote: Invalid username or token. Password authentication is not supported for Git operations.&lt;br /&gt;
fatal: Authentication failed for &#039;https://github.com/team_name/repo_name/&#039;&lt;br /&gt;
&lt;br /&gt;
In a case you entered incorrect password, please&lt;br /&gt;
update it in Keychain Access application.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diagnosis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
First check the current login status of the GitHub CLI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gh auth status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the token has expired, a message similar to the following will appear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
github.com&lt;br /&gt;
  X Failed to log in to github.com account UserName (keyring)&lt;br /&gt;
* Active account: true&lt;br /&gt;
* The token in keyring is invalid.&lt;br /&gt;
* To re-authenticate, run: gh auth login -h github.com&lt;br /&gt;
* To forget about this account, run: gh auth logout -h github.com -u UserName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also directly query the GitHub credentials stored in the macOS Keychain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
security find-internet-password -s github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This error is typically caused by one of the following:&lt;br /&gt;
&lt;br /&gt;
* An old GitHub account password (rather than a token) is stored in the macOS Keychain, and Git&#039;s attempt to authenticate with that password fails.&lt;br /&gt;
* The Personal Access Token in the &amp;lt;code&amp;gt;gh&amp;lt;/code&amp;gt; keyring has expired, been revoked, or had its permissions changed.&lt;br /&gt;
* A token or SSH key was never set up, so Git is still falling back to the legacy password authentication flow.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Re-authenticate the GitHub CLI&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gh auth login -h github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Select the following options in order:&lt;br /&gt;
&lt;br /&gt;
* What is your preferred protocol for Git operations on this host? → &amp;lt;code&amp;gt;HTTPS&amp;lt;/code&amp;gt; (matches the existing remote protocol)&lt;br /&gt;
* How would you like to authenticate GitHub CLI? → &amp;lt;code&amp;gt;Login with a web browser&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A one-time code will be displayed. Copy it and press Enter; a browser window will open the GitHub device authorization page to complete the login:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
! First copy your one-time code: XXXX-XXXX&lt;br /&gt;
Press Enter to open https://github.com/login/device in your browser...&lt;br /&gt;
&lt;br /&gt;
✓ Authentication complete.&lt;br /&gt;
* gh config set -h github.com git_protocol https&lt;br /&gt;
✓ Configured git protocol&lt;br /&gt;
✓ Logged in as UserName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Git Shows Files as Modified After chmod — File Mode Changes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After running &amp;lt;code&amp;gt;chmod +x&amp;lt;/code&amp;gt; or copying the repository between different operating systems or file systems, Git may report files as modified even though their contents have not changed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&lt;br /&gt;
modified: scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; may show only a file mode change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/scripts/deploy.sh b/scripts/deploy.sh&lt;br /&gt;
old mode 100644&lt;br /&gt;
new mode 100755&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Git file modes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;100644&amp;lt;/code&amp;gt; means a regular non-executable file.&lt;br /&gt;
* &amp;lt;code&amp;gt;100755&amp;lt;/code&amp;gt; means a regular executable file.&lt;br /&gt;
&lt;br /&gt;
Git records the executable bit as part of the tracked file metadata. Therefore, adding or removing executable permission can appear as a modification even when the file contents are identical. Git’s diff format explicitly reports these changes as &amp;lt;code&amp;gt;old mode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;new mode&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diagnosis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the following command to check whether the reported changes are file mode changes only:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff --summary&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode change 100644 =&amp;gt; 100755 scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also inspect the full diff:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the output contains only &amp;lt;code&amp;gt;old mode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;new mode&amp;lt;/code&amp;gt;, without added or removed content lines, the change is caused by the executable bit rather than file contents.&lt;br /&gt;
&lt;br /&gt;
Check the current repository setting with: &amp;lt;ref&amp;gt;[https://git-scm.com/docs/git-config?utm_source=chatgpt.com Git - git-config Documentation]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see which configuration file defines the value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --show-origin --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The behavior is controlled by Git’s &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; setting.&lt;br /&gt;
&lt;br /&gt;
When it is set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, Git checks whether the executable bit in the working tree differs from the mode stored in the Git index. This can create unexpected changes when:&lt;br /&gt;
&lt;br /&gt;
* A file was modified using &amp;lt;code&amp;gt;chmod +x&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;chmod -x&amp;lt;/code&amp;gt;.&lt;br /&gt;
* A repository was copied between Linux, macOS, Windows, a network drive, or another file system with different permission behavior.&lt;br /&gt;
* An archive, synchronization tool, or shared folder changed executable permissions.&lt;br /&gt;
* A container or deployment process rewrote file modes.&lt;br /&gt;
&lt;br /&gt;
Git’s documentation notes that some file systems may not reliably preserve executable-bit information, which is why &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; can be disabled when those mode differences should not be trusted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To ignore executable-permission changes in the current repository, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config core.fileMode false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the recommended scope when the issue affects only one repository. The setting is saved in that repository’s &amp;lt;code&amp;gt;.git/config&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
To apply the setting to all repositories for the current user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global core.fileMode false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global setting is stored in the user-level Git configuration and acts as a fallback unless a repository overrides it.&lt;br /&gt;
&lt;br /&gt;
Verify the effective value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The expected output is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check the repository again:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
git diff --summary&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Permission-only changes should no longer appear as unstaged modifications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Restore File Mode Tracking&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To restore executable-bit tracking for the current repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config core.fileMode true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remove the repository-specific override and return to the global or system default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --unset core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To restore tracking globally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global core.fileMode true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When the Executable Bit Should Be Committed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do not disable &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; merely to hide a legitimate permission change.&lt;br /&gt;
&lt;br /&gt;
For shell scripts, deployment scripts, Git hooks, command-line tools, and other files that must be executable after checkout, record the executable bit in Git intentionally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x scripts/deploy.sh&lt;br /&gt;
git add scripts/deploy.sh&lt;br /&gt;
git commit -m &amp;quot;Mark deploy script as executable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The committed mode change will appear as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode change 100644 =&amp;gt; 100755 scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the local file system cannot apply &amp;lt;code&amp;gt;chmod&amp;lt;/code&amp;gt; correctly, update the Git index directly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git update-index --chmod=+x scripts/deploy.sh&lt;br /&gt;
git commit -m &amp;quot;Mark deploy script as executable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remove executable status from the Git index:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git update-index --chmod=-x scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git provides index-level support for explicitly overriding a tracked file’s executable bit.&lt;br /&gt;
&lt;br /&gt;
{{exclaim}} Notice: Setting &amp;lt;code&amp;gt;core.fileMode=false&amp;lt;/code&amp;gt; does not change the actual operating-system permissions and does not rewrite previously committed file modes. It only tells Git not to treat executable-bit differences in the working tree as modifications. Use a repository-level setting unless the same problem consistently affects all repositories on the machine.&lt;br /&gt;
&lt;br /&gt;
=== Git Submodule Pull Failed: unable to create file — File exists ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After pulling in GitHub Desktop, met the error message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fetching submodule lib&lt;br /&gt;
error: unable to create file feeds/example.php: File exists&lt;br /&gt;
Updating xxxxxxxx..xxxxxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When Git tries to update the submodule to a newer commit, it finds a local untracked file with the same name, blocking the checkout. A mid-pull failure leaves the submodule in an inconsistent state and causes a large number of unexpected unstaged changes to appear in GitHub Desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run the following command in the project root directory to force re-sync the submodule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git submodule update --init --recursive --force&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it still fails, manually remove the conflicting file and retry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm lib/feeds/example.php&lt;br /&gt;
git submodule update --init --recursive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter the submodule directory and verify the status is clean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd lib&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The expected output should be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HEAD detached from xxxxxxxx&lt;br /&gt;
nothing to commit, working tree clean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
`nothing to commit, working tree clean` confirms the submodule has been successfully synced — return to GitHub Desktop and continue as normal. `HEAD detached` is the expected state for a submodule and does not require any action.&lt;br /&gt;
&lt;br /&gt;
{{exclaim}} Notice: The large number of unstaged changes appearing in GitHub Desktop after a failed Pull will typically return to normal once the submodule is fixed. If unexpected changes still remain, run &amp;lt;code&amp;gt;git submodule foreach git checkout .&amp;lt;/code&amp;gt; to revert all modifications inside every submodule.&lt;br /&gt;
&lt;br /&gt;
=== Restoring deleted files in Git ===&lt;br /&gt;
[[Restoring deleted files in Git]]&lt;br /&gt;
&lt;br /&gt;
=== SSH Authentication Failed: Permission denied (publickey) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After running the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
you may see the following error:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cloning into &#039;/opt/your-app&#039;...&lt;br /&gt;
git@github.com: Permission denied (publickey).&lt;br /&gt;
fatal: Could not read from remote repository.&lt;br /&gt;
&lt;br /&gt;
Please make sure you have the correct access rights and the repository exists.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A similar error may also occur when running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This error occurs when Git cannot authenticate with GitHub over SSH.&lt;br /&gt;
&lt;br /&gt;
Common causes include:&lt;br /&gt;
&lt;br /&gt;
* The SSH key does not exist on the server.&lt;br /&gt;
* The SSH key has not been added to GitHub.&lt;br /&gt;
* The SSH key is added to the wrong GitHub account or the wrong repository.&lt;br /&gt;
* The repository is private and the key does not have access.&lt;br /&gt;
* The server has multiple SSH keys, but Git is using the wrong one.&lt;br /&gt;
* The key is a GitHub Deploy Key that belongs to another repository.&lt;br /&gt;
* `sudo git clone` or `sudo git pull` is being used, causing Git to use the `root` user&#039;s SSH key instead of the deploy user&#039;s SSH key.&lt;br /&gt;
&lt;br /&gt;
For example, if you run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current SSH key is valid, but it is linked to another repository&#039;s Deploy Key. In that case, GitHub may return:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERROR: Repository not found.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
even if the target repository URL is correct.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended Solution — Use a dedicated SSH alias for the project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the safest approach when the server has multiple GitHub Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
Assume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Deploy user: your-user&lt;br /&gt;
App path: /opt/your-app&lt;br /&gt;
Private key: /home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
Public key: /home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
Repository: git@github.com:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1 — Check the key exists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -l ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the key does not exist, create one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t ed25519 -C &amp;quot;your-app-deploy-key&amp;quot; -f ~/.ssh/id_ed25519_your_app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2 — Add the public key to GitHub&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Print the public key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add it to the target repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub Repository&lt;br /&gt;
→ Settings&lt;br /&gt;
→ Deploy keys&lt;br /&gt;
→ Add deploy key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the server only needs to clone or pull the repository, do not enable write access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3 — Configure SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Edit the SSH config file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host github-your-app&lt;br /&gt;
  HostName github.com&lt;br /&gt;
  User git&lt;br /&gt;
  IdentityFile ~/.ssh/id_ed25519_your_app&lt;br /&gt;
  IdentitiesOnly yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fix SSH file permissions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod 700 ~/.ssh&lt;br /&gt;
chmod 600 ~/.ssh/config ~/.ssh/id_ed25519_your_app&lt;br /&gt;
chmod 644 ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh&amp;lt;/code&amp;gt; should be accessible only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/config/&amp;lt;/code&amp;gt; should be readable/writable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app&amp;lt;/code&amp;gt; private key should be readable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app.pub&amp;lt;/code&amp;gt; public key can be readable by others&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4 — Test the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is expected. It means SSH authentication works, but GitHub does not allow interactive shell login.&lt;br /&gt;
&lt;br /&gt;
If the result shows another repository, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the alias is not using the intended key, or the key was added to the wrong repository.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 5 — Clone using the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Instead of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If `/opt/your-app` requires root permission to create, prefer creating the directory first and assigning ownership to the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /opt/your-app&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This avoids using `sudo git clone`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 6 — If the repository already exists, update the remote URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check the current remote:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it uses the default GitHub host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
change it to use the SSH alias:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Avoid using sudo with Git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Avoid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because `sudo` runs Git as `root`, Git may use root&#039;s SSH keys instead of the deploy user&#039;s SSH keys.&lt;br /&gt;
&lt;br /&gt;
If the app directory is owned by `root`, fix ownership instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run Git commands as the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Issue: dubious ownership&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If Git shows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fatal: detected dubious ownership in repository at &#039;/opt/your-app&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current user and the repository owner do not match.&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -ld /opt/your-app&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the app should be maintained by the deploy user, fix ownership:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, mark the directory as safe:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global --add safe.directory /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For deployment directories, fixing ownership is usually cleaner if the deploy user is expected to run `git pull`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternative Solution — Pass the SSH key inline&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can also override the SSH command directly.&lt;br /&gt;
&lt;br /&gt;
First, test the key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to run this with `sudo`, preserve the environment explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, this is usually less clean than using an SSH alias, especially for long-term maintenance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-o IdentitiesOnly=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
forces SSH to use only the specified key and prevents SSH from trying other keys loaded in the agent. This is important on servers with multiple Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Recommended long-term setup:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 1. Create or confirm a dedicated deploy key&lt;br /&gt;
ls ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&lt;br /&gt;
# 2. Add the public key to the target GitHub repository Deploy Keys&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&lt;br /&gt;
# 3. Configure SSH alias&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&lt;br /&gt;
# 4. Test alias&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&lt;br /&gt;
# 5. Clone or update remote using alias&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&lt;br /&gt;
# or, for an existing repo&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The key lesson is: when multiple Deploy Keys exist on the same server, avoid relying on `git@github.com`. Use a project-specific SSH alias such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so Git always uses the correct SSH key.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent Generating a new SSH key and adding it to the ssh-agent - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account Adding a new SSH key to your GitHub account - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection Testing your SSH connection - GitHub Docs]&lt;br /&gt;
* [https://linux.die.net/man/5/ssh_config ssh_config(5): OpenSSH SSH client config files - Linux man page]&lt;br /&gt;
* [https://docs.github.com/en/authentication/troubleshooting-ssh Troubleshooting SSH - GitHub Docs]&lt;br /&gt;
&lt;br /&gt;
[[Category: Git]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26427</id>
		<title>Troubleshooting of GIT</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26427"/>
		<updated>2026-08-07T06:56:45Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Git Shows Files as Modified After chmod — File Mode Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Troubleshooting of GIT ==&lt;br /&gt;
&lt;br /&gt;
=== Restoring deleted files in Git ===&lt;br /&gt;
[[Restoring deleted files in Git]]&lt;br /&gt;
&lt;br /&gt;
=== SSH Authentication Failed: Permission denied (publickey) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After running the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
you may see the following error:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cloning into &#039;/opt/your-app&#039;...&lt;br /&gt;
git@github.com: Permission denied (publickey).&lt;br /&gt;
fatal: Could not read from remote repository.&lt;br /&gt;
&lt;br /&gt;
Please make sure you have the correct access rights and the repository exists.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A similar error may also occur when running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This error occurs when Git cannot authenticate with GitHub over SSH.&lt;br /&gt;
&lt;br /&gt;
Common causes include:&lt;br /&gt;
&lt;br /&gt;
* The SSH key does not exist on the server.&lt;br /&gt;
* The SSH key has not been added to GitHub.&lt;br /&gt;
* The SSH key is added to the wrong GitHub account or the wrong repository.&lt;br /&gt;
* The repository is private and the key does not have access.&lt;br /&gt;
* The server has multiple SSH keys, but Git is using the wrong one.&lt;br /&gt;
* The key is a GitHub Deploy Key that belongs to another repository.&lt;br /&gt;
* `sudo git clone` or `sudo git pull` is being used, causing Git to use the `root` user&#039;s SSH key instead of the deploy user&#039;s SSH key.&lt;br /&gt;
&lt;br /&gt;
For example, if you run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current SSH key is valid, but it is linked to another repository&#039;s Deploy Key. In that case, GitHub may return:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERROR: Repository not found.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
even if the target repository URL is correct.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended Solution — Use a dedicated SSH alias for the project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the safest approach when the server has multiple GitHub Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
Assume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Deploy user: your-user&lt;br /&gt;
App path: /opt/your-app&lt;br /&gt;
Private key: /home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
Public key: /home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
Repository: git@github.com:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1 — Check the key exists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -l ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the key does not exist, create one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t ed25519 -C &amp;quot;your-app-deploy-key&amp;quot; -f ~/.ssh/id_ed25519_your_app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2 — Add the public key to GitHub&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Print the public key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add it to the target repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub Repository&lt;br /&gt;
→ Settings&lt;br /&gt;
→ Deploy keys&lt;br /&gt;
→ Add deploy key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the server only needs to clone or pull the repository, do not enable write access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3 — Configure SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Edit the SSH config file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host github-your-app&lt;br /&gt;
  HostName github.com&lt;br /&gt;
  User git&lt;br /&gt;
  IdentityFile ~/.ssh/id_ed25519_your_app&lt;br /&gt;
  IdentitiesOnly yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fix SSH file permissions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod 700 ~/.ssh&lt;br /&gt;
chmod 600 ~/.ssh/config ~/.ssh/id_ed25519_your_app&lt;br /&gt;
chmod 644 ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh&amp;lt;/code&amp;gt; should be accessible only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/config/&amp;lt;/code&amp;gt; should be readable/writable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app&amp;lt;/code&amp;gt; private key should be readable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app.pub&amp;lt;/code&amp;gt; public key can be readable by others&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4 — Test the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is expected. It means SSH authentication works, but GitHub does not allow interactive shell login.&lt;br /&gt;
&lt;br /&gt;
If the result shows another repository, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the alias is not using the intended key, or the key was added to the wrong repository.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 5 — Clone using the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Instead of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If `/opt/your-app` requires root permission to create, prefer creating the directory first and assigning ownership to the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /opt/your-app&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This avoids using `sudo git clone`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 6 — If the repository already exists, update the remote URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check the current remote:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it uses the default GitHub host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
change it to use the SSH alias:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Avoid using sudo with Git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Avoid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because `sudo` runs Git as `root`, Git may use root&#039;s SSH keys instead of the deploy user&#039;s SSH keys.&lt;br /&gt;
&lt;br /&gt;
If the app directory is owned by `root`, fix ownership instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run Git commands as the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Issue: dubious ownership&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If Git shows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fatal: detected dubious ownership in repository at &#039;/opt/your-app&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current user and the repository owner do not match.&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -ld /opt/your-app&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the app should be maintained by the deploy user, fix ownership:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, mark the directory as safe:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global --add safe.directory /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For deployment directories, fixing ownership is usually cleaner if the deploy user is expected to run `git pull`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternative Solution — Pass the SSH key inline&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can also override the SSH command directly.&lt;br /&gt;
&lt;br /&gt;
First, test the key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to run this with `sudo`, preserve the environment explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, this is usually less clean than using an SSH alias, especially for long-term maintenance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-o IdentitiesOnly=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
forces SSH to use only the specified key and prevents SSH from trying other keys loaded in the agent. This is important on servers with multiple Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Recommended long-term setup:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 1. Create or confirm a dedicated deploy key&lt;br /&gt;
ls ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&lt;br /&gt;
# 2. Add the public key to the target GitHub repository Deploy Keys&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&lt;br /&gt;
# 3. Configure SSH alias&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&lt;br /&gt;
# 4. Test alias&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&lt;br /&gt;
# 5. Clone or update remote using alias&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&lt;br /&gt;
# or, for an existing repo&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The key lesson is: when multiple Deploy Keys exist on the same server, avoid relying on `git@github.com`. Use a project-specific SSH alias such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so Git always uses the correct SSH key.&lt;br /&gt;
&lt;br /&gt;
=== Git Push Failed: Invalid username or token (GitHub No Longer Supports Password Authentication) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; produces the following error:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
remote: Invalid username or token. Password authentication is not supported for Git operations.&lt;br /&gt;
fatal: Authentication failed for &#039;https://github.com/team_name/repo_name/&#039;&lt;br /&gt;
&lt;br /&gt;
In a case you entered incorrect password, please&lt;br /&gt;
update it in Keychain Access application.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diagnosis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
First check the current login status of the GitHub CLI:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gh auth status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the token has expired, a message similar to the following will appear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
github.com&lt;br /&gt;
  X Failed to log in to github.com account UserName (keyring)&lt;br /&gt;
* Active account: true&lt;br /&gt;
* The token in keyring is invalid.&lt;br /&gt;
* To re-authenticate, run: gh auth login -h github.com&lt;br /&gt;
* To forget about this account, run: gh auth logout -h github.com -u UserName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also directly query the GitHub credentials stored in the macOS Keychain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
security find-internet-password -s github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This error is typically caused by one of the following:&lt;br /&gt;
&lt;br /&gt;
* An old GitHub account password (rather than a token) is stored in the macOS Keychain, and Git&#039;s attempt to authenticate with that password fails.&lt;br /&gt;
* The Personal Access Token in the &amp;lt;code&amp;gt;gh&amp;lt;/code&amp;gt; keyring has expired, been revoked, or had its permissions changed.&lt;br /&gt;
* A token or SSH key was never set up, so Git is still falling back to the legacy password authentication flow.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Re-authenticate the GitHub CLI&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gh auth login -h github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Select the following options in order:&lt;br /&gt;
&lt;br /&gt;
* What is your preferred protocol for Git operations on this host? → &amp;lt;code&amp;gt;HTTPS&amp;lt;/code&amp;gt; (matches the existing remote protocol)&lt;br /&gt;
* How would you like to authenticate GitHub CLI? → &amp;lt;code&amp;gt;Login with a web browser&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A one-time code will be displayed. Copy it and press Enter; a browser window will open the GitHub device authorization page to complete the login:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
! First copy your one-time code: XXXX-XXXX&lt;br /&gt;
Press Enter to open https://github.com/login/device in your browser...&lt;br /&gt;
&lt;br /&gt;
✓ Authentication complete.&lt;br /&gt;
* gh config set -h github.com git_protocol https&lt;br /&gt;
✓ Configured git protocol&lt;br /&gt;
✓ Logged in as UserName&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Git Shows Files as Modified After chmod — File Mode Changes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After running &amp;lt;code&amp;gt;chmod +x&amp;lt;/code&amp;gt; or copying the repository between different operating systems or file systems, Git may report files as modified even though their contents have not changed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&lt;br /&gt;
modified: scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; may show only a file mode change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/scripts/deploy.sh b/scripts/deploy.sh&lt;br /&gt;
old mode 100644&lt;br /&gt;
new mode 100755&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Git file modes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;100644&amp;lt;/code&amp;gt; means a regular non-executable file.&lt;br /&gt;
* &amp;lt;code&amp;gt;100755&amp;lt;/code&amp;gt; means a regular executable file.&lt;br /&gt;
&lt;br /&gt;
Git records the executable bit as part of the tracked file metadata. Therefore, adding or removing executable permission can appear as a modification even when the file contents are identical. Git’s diff format explicitly reports these changes as &amp;lt;code&amp;gt;old mode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;new mode&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diagnosis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the following command to check whether the reported changes are file mode changes only:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff --summary&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode change 100644 =&amp;gt; 100755 scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also inspect the full diff:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the output contains only &amp;lt;code&amp;gt;old mode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;new mode&amp;lt;/code&amp;gt;, without added or removed content lines, the change is caused by the executable bit rather than file contents.&lt;br /&gt;
&lt;br /&gt;
Check the current repository setting with: &amp;lt;ref&amp;gt;[https://git-scm.com/docs/git-config?utm_source=chatgpt.com Git - git-config Documentation]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see which configuration file defines the value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --show-origin --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The behavior is controlled by Git’s &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; setting.&lt;br /&gt;
&lt;br /&gt;
When it is set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, Git checks whether the executable bit in the working tree differs from the mode stored in the Git index. This can create unexpected changes when:&lt;br /&gt;
&lt;br /&gt;
* A file was modified using &amp;lt;code&amp;gt;chmod +x&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;chmod -x&amp;lt;/code&amp;gt;.&lt;br /&gt;
* A repository was copied between Linux, macOS, Windows, a network drive, or another file system with different permission behavior.&lt;br /&gt;
* An archive, synchronization tool, or shared folder changed executable permissions.&lt;br /&gt;
* A container or deployment process rewrote file modes.&lt;br /&gt;
&lt;br /&gt;
Git’s documentation notes that some file systems may not reliably preserve executable-bit information, which is why &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; can be disabled when those mode differences should not be trusted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To ignore executable-permission changes in the current repository, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config core.fileMode false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the recommended scope when the issue affects only one repository. The setting is saved in that repository’s &amp;lt;code&amp;gt;.git/config&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
To apply the setting to all repositories for the current user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global core.fileMode false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global setting is stored in the user-level Git configuration and acts as a fallback unless a repository overrides it.&lt;br /&gt;
&lt;br /&gt;
Verify the effective value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The expected output is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check the repository again:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
git diff --summary&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Permission-only changes should no longer appear as unstaged modifications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Restore File Mode Tracking&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To restore executable-bit tracking for the current repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config core.fileMode true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remove the repository-specific override and return to the global or system default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --unset core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To restore tracking globally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global core.fileMode true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When the Executable Bit Should Be Committed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do not disable &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; merely to hide a legitimate permission change.&lt;br /&gt;
&lt;br /&gt;
For shell scripts, deployment scripts, Git hooks, command-line tools, and other files that must be executable after checkout, record the executable bit in Git intentionally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x scripts/deploy.sh&lt;br /&gt;
git add scripts/deploy.sh&lt;br /&gt;
git commit -m &amp;quot;Mark deploy script as executable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The committed mode change will appear as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode change 100644 =&amp;gt; 100755 scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the local file system cannot apply &amp;lt;code&amp;gt;chmod&amp;lt;/code&amp;gt; correctly, update the Git index directly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git update-index --chmod=+x scripts/deploy.sh&lt;br /&gt;
git commit -m &amp;quot;Mark deploy script as executable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remove executable status from the Git index:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git update-index --chmod=-x scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git provides index-level support for explicitly overriding a tracked file’s executable bit.&lt;br /&gt;
&lt;br /&gt;
{{exclaim}} Notice: Setting &amp;lt;code&amp;gt;core.fileMode=false&amp;lt;/code&amp;gt; does not change the actual operating-system permissions and does not rewrite previously committed file modes. It only tells Git not to treat executable-bit differences in the working tree as modifications. Use a repository-level setting unless the same problem consistently affects all repositories on the machine.&lt;br /&gt;
&lt;br /&gt;
=== Git Submodule Pull Failed: unable to create file — File exists ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After pulling in GitHub Desktop, met the error message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fetching submodule lib&lt;br /&gt;
error: unable to create file feeds/example.php: File exists&lt;br /&gt;
Updating xxxxxxxx..xxxxxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When Git tries to update the submodule to a newer commit, it finds a local untracked file with the same name, blocking the checkout. A mid-pull failure leaves the submodule in an inconsistent state and causes a large number of unexpected unstaged changes to appear in GitHub Desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run the following command in the project root directory to force re-sync the submodule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git submodule update --init --recursive --force&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it still fails, manually remove the conflicting file and retry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm lib/feeds/example.php&lt;br /&gt;
git submodule update --init --recursive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter the submodule directory and verify the status is clean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd lib&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The expected output should be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HEAD detached from xxxxxxxx&lt;br /&gt;
nothing to commit, working tree clean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
`nothing to commit, working tree clean` confirms the submodule has been successfully synced — return to GitHub Desktop and continue as normal. `HEAD detached` is the expected state for a submodule and does not require any action.&lt;br /&gt;
&lt;br /&gt;
{{exclaim}} Notice: The large number of unstaged changes appearing in GitHub Desktop after a failed Pull will typically return to normal once the submodule is fixed. If unexpected changes still remain, run &amp;lt;code&amp;gt;git submodule foreach git checkout .&amp;lt;/code&amp;gt; to revert all modifications inside every submodule.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent Generating a new SSH key and adding it to the ssh-agent - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account Adding a new SSH key to your GitHub account - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection Testing your SSH connection - GitHub Docs]&lt;br /&gt;
* [https://linux.die.net/man/5/ssh_config ssh_config(5): OpenSSH SSH client config files - Linux man page]&lt;br /&gt;
* [https://docs.github.com/en/authentication/troubleshooting-ssh Troubleshooting SSH - GitHub Docs]&lt;br /&gt;
&lt;br /&gt;
[[Category: Git]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=UX_industry_survey_report&amp;diff=26426</id>
		<title>UX industry survey report</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=UX_industry_survey_report&amp;diff=26426"/>
		<updated>2026-08-05T09:06:13Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* 台灣 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;使用者體驗產業研究、UX 產業研究&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== 台灣 ==&lt;br /&gt;
&lt;br /&gt;
使用者經驗設計產業與工作者年度調查&lt;br /&gt;
* [https://www.uigathering.org/ UXTW 台灣使用者經驗設計協會] (2024). [https://www.uxtw.org/%E7%94%A2%E6%A5%AD%E5%A0%B1%E5%91%8A-%E6%96%87%E7%AB%A0/ux-%E7%94%A2%E6%A5%AD%E8%88%87%E5%B7%A5%E4%BD%9C%E8%80%85%E8%AA%BF%E6%9F%A5%E5%A0%B1%E5%91%8A/2023 台灣使用者經驗設計產業與工作者 2023 年度調查] ([https://drive.google.com/open?id=1kPYpU86BQqumy2h8ninX-P0sNFDLkHzK 完整報告 PDF 下載地址]) &lt;br /&gt;
* [https://www.uigathering.org/ UXTW 台灣使用者經驗設計協會] (2023). [https://www.facebook.com/theUXTW/posts/pfbid02U5SkJs33ekMzFHDwmg56d7EgY9BfugThxrvtDYGr1KZepfKGQSger2HgaXUGyTxMl 台灣使用者經驗設計產業與工作者 2022 年度調查] {{FB}} ([https://drive.google.com/file/d/1RcprBB1_j84s8x1YcTq5qD-PB7P4Q1Mq/view 完整報告 PDF 下載地址]) &lt;br /&gt;
* [https://www.uigathering.org/ UXTW 台灣使用者經驗設計協會] (2022). [https://www.facebook.com/theUXTW/posts/10159525022523382 台灣使用者經驗設計產業與工作者 2021 年度調查] {{FB}} ([https://drive.google.com/file/d/1Iv4QPX-FaPmPtG3pGEe8216bxHdY0RlS/view 完整報告 PDF 下載地址]) &lt;br /&gt;
* [https://www.uigathering.org/ UXTW 台灣使用者經驗設計協會] (2020). [https://www.facebook.com/theUXTW/posts/10158610802408382 台灣使用者經驗設計產業與工作者 2020 年度調查] {{FB}} ([https://drive.google.com/file/d/1FEoH7sIKAzxGGAfVzHVzZ5--s5nyYgTQ/view?fbclid=IwAR3YQ2JfSTfxXwp0lNPgJrnpY03zW1sSBBTV_fjwd5rmmo0R1THnrfDB1F0 完整報告 PDF 下載地址])&lt;br /&gt;
* Lin Simon (2018). [https://medium.com/as-a-product-designer/ui-ux-%E8%A8%AD%E8%A8%88%E5%B8%AB%E8%96%AA%E8%B3%87%E8%AA%BF%E6%9F%A5-%E6%8F%AD%E9%96%8B%E4%BD%A0%E6%89%80%E5%A5%BD%E5%A5%87%E7%9A%84%E8%A1%8C%E6%A5%AD%E5%A4%A9%E8%8A%B1%E6%9D%BF-2018-b3cbf40ac128 UI/UX 設計師薪資調查：揭開你所好奇的行業天花板(2018) – As A Product Designer – Medium] {{access | date=2018-11-13}}&lt;br /&gt;
&lt;br /&gt;
薪資&lt;br /&gt;
* [https://airtable.com/shr5qEyG2KbKstwzy/tbl6chE1oGON9LIyr Airtable - 台灣國內外 UI/UX 業界薪資情報 (公開)]  by [https://medium.com/as-a-product-designer AAPD] ([https://airtable.com/shrmQOsAXJfz1HaRw 匿名分享你的薪資])&lt;br /&gt;
&lt;br /&gt;
== 中國 ==&lt;br /&gt;
* [http://ixdc.org/ 國際體驗設計協會] (IxDC) &amp;amp; [http://cdc.tencent.com/ 騰訊用戶研究與體驗設計部] (騰訊 CDC) (2021). [http://meia.me/article/906 2021 中國用戶體驗行業調研報告] ([https://web.archive.org/web/20220717040540/https://meia.me/article/906 複本])&lt;br /&gt;
* [http://ixdc.org/ 國際體驗設計協會] (IxDC) &amp;amp; [http://cdc.tencent.com/ 騰訊用戶研究與體驗設計部] (騰訊 CDC) (2020). [http://meia.me/doc/2108/1629540293207.pdf 2020 中國用戶體驗行業調研報告] ([https://web.archive.org/web/20220201063643/http://meia.me/doc/2108/1629540293207.pdf 複本])&lt;br /&gt;
* [http://ixdc.org/ 國際體驗設計協會] (IxDC) &amp;amp; [http://cdc.tencent.com/ 騰訊用戶研究與體驗設計部] (騰訊 CDC) (2019). [https://ixdc.org/act/3/research.html 2019 中國用戶體驗行業調研報告] ([https://web.archive.org/web/20191027050101/https://meia.me/doc/1908/1567148943796.pdf 複本])&lt;br /&gt;
* [http://ixdc.org/ 國際體驗設計協會] (IxDC) &amp;amp; [http://cdc.tencent.com/ 騰訊用戶研究與體驗設計部] (騰訊 CDC) (2018). [https://ixdc.org/2018/act/2/research.html 2018 中國用戶體驗行業調研報告] ([https://web.archive.org/web/20181024025745/https://cdn.meia.me/public/activity/file/2018UXIndustry_ResearchReport.pdf 複本])&lt;br /&gt;
* [http://ixdc.org/ 國際體驗設計協會] (IxDC) &amp;amp; [http://cdc.tencent.com/ 騰訊用戶研究與體驗設計部] (騰訊 CDC) (2017). [https://www.ixdc.org/2017/research.php 2017 中國用戶體驗行業調研報告] ([https://web.archive.org/web/20181024025120/https://ixdc.org/2017/uxresearch.pdf 複本])&lt;br /&gt;
* [http://www.uxpachina.org/ UXPA 中國] (2016). [http://mp.weixin.qq.com/s?__biz=MjM5NjE5OTk2NA==&amp;amp;mid=2651019079&amp;amp;idx=1&amp;amp;sn=62e6a21430050995cea226974dc04407&amp;amp;chksm=bd1b1c348a6c9522c21a0a8da74f3331b33342516abde42dbdbbab263d73289ec35b0177499a&amp;amp;mpshare=1&amp;amp;scene=1&amp;amp;srcid=1110bc5GdDdgqTORnxDNBgUc&amp;amp;from=singlemessage&amp;amp;isappinstalled=0 2016用戶體驗職業教育研究報告]&lt;br /&gt;
* [http://ixdc.org/ 國際體驗設計協會] (IxDC) &amp;amp; [http://cdc.tencent.com/ 騰訊用戶研究與體驗設計部] (騰訊 CDC) (2016). [http://www.199it.com/archives/491049.html 2016 中國用戶體驗產業調查報告] ([https://web.archive.org/web/20181024025407/https://ixdc.org/2017/2016ChinaUserExperienceResearch.pdf 複本])&lt;br /&gt;
&lt;br /&gt;
== USA ==&lt;br /&gt;
* John Maeda (2021). [https://cx.report/2021-cx-report/ 2021 CX Report]&lt;br /&gt;
* John Maeda (2020). [https://cx.report/2020-cxreport/ 2020 CX Report]&lt;br /&gt;
* John Maeda (2019). [https://designintech.report/wp-content/uploads/2019/03/dit2019_v00.pdf Design in Tech Report 2019] &lt;br /&gt;
* John Maeda (2018). [https://www.slideshare.net/johnmaeda/design-in-tech-report-2018/27-3102018_2018_Design_In_Tech Design in Tech Report 2018]&lt;br /&gt;
* John Maeda (2017). [https://www.slideshare.net/johnmaeda/design-in-tech-report-2017 Design in Tech Report 2017] [https://designintechreport.wordpress.com/]&lt;br /&gt;
* John Maeda (2016). [http://www.kpcb.com/blog/design-in-tech-report-2016 Design in Tech Report 2016]&lt;br /&gt;
&lt;br /&gt;
== Global ==&lt;br /&gt;
* [https://www.userinterviews.com/ User Interviews Inc.] (2022). [https://www.userinterviews.com/state-of-user-research-2022-report The State of User Research 2022 Report]&lt;br /&gt;
* [https://uxpa.org/ User Experience Professionals Association] (UXPA International) (2017). [https://uxpa.org/resources/past-salary-surveys 2016 UX Salary Survey]&lt;br /&gt;
* 資誠聯合會計師事務所 (2018). [https://www.pwc.tw/zh/news/press-release/press-20180329.html 資誠《2018消費者體驗的未來》調查報告：客戶體驗是一切 企業需在科技與人性之間取得平衡] / [https://www.pwc.com/future-of-cx Companies must get customer experience right: PwC]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Related pages&lt;br /&gt;
* [[Product manager community | 網站企劃與產品設計相關活動訊息 與 社群網站]]&lt;br /&gt;
&lt;br /&gt;
[[Category:User_experience]] [[Category:Design]]&lt;br /&gt;
[[Category:Design]] [[Category:Industry survey report]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=MySQL_commands&amp;diff=26425</id>
		<title>MySQL commands</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=MySQL_commands&amp;diff=26425"/>
		<updated>2026-08-03T07:48:17Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MySQL commands and troubleshooting of MySQL errors.&lt;br /&gt;
&lt;br /&gt;
=== Preparation ===&lt;br /&gt;
install MySQL database client apps contains {{kbd | key=mysql}} &amp;amp; {{kbd | key=mysqldump}} commands&lt;br /&gt;
* {{Linux}}: &lt;br /&gt;
* {{Win}}: Install (1) [https://www.cygwin.com/ Cygwin], (2) search mysql &amp;amp; install MySQL database clients apps package&lt;br /&gt;
* {{Mac}}: &lt;br /&gt;
** Install [https://www.apachefriends.org/zh_tw/download.html XAMPP]. Path of {{kbd | key=mysql}} executable file is: {{kbd | key=/Applications/xampp/xamppfiles/bin/mysql}}&lt;br /&gt;
** MAMP: path of mysql command: {{kbd | key=/Applications/MAMP/Library/bin/mysql}}&amp;lt;ref&amp;gt;[https://dev.to/arbaoui_mehdi/how-to-access-the-mysql-cli-with-mamp-25m How to access the MySQL CLI With MAMP - DEV Community]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(optional) install the [http://www.ivarch.com/programs/pv.shtml Pipe Viewer] (pv) package&lt;br /&gt;
* {{Linux}}: &lt;br /&gt;
*# [http://www.tecmint.com/enable-rpmforge-repository/ How to Enable RPMForge Repository in RHEL/CentOS 7.x/6.x/5.x/4.x]&lt;br /&gt;
*# (1){{kbd | key =yum install pv}} for RHEL / CentOS / SL / Fedora Linux&amp;lt;ref&amp;gt;[http://www.cyberciti.biz/open-source/command-line-hacks/pv-command-examples/ Linux / Unix pv Command: Monitor Progress of Data Sent Via a Pipe]&amp;lt;/ref&amp;gt;;  (2) {{kbd | key =apt-get install pv}} for Debian / Ubuntu&amp;lt;ref&amp;gt;[http://www.ivarch.com/programs/pv.shtml ivarch.com: Pipe Viewer]&amp;lt;/ref&amp;gt;; &lt;br /&gt;
* {{Win}}: Install (1) [https://www.cygwin.com/ Cygwin], (2) search pv &amp;amp; install pv package&lt;br /&gt;
* {{Mac}}: Install (1) {{kbd | key =brew install pv}} to get the latest version of pv package&amp;lt;ref&amp;gt;[http://ashleyangell.com/2013/11/pipe-viewer-pv-in-mac-osx/ Pipe Viewer (pv) in Mac OSX]&amp;lt;/ref&amp;gt; and (2) MySQL database clients from [https://www.apachefriends.org/zh_tw/download.html XAMPP]. Path of mysql is: /Applications/xampp/xamppfiles/bin/mysql&lt;br /&gt;
&lt;br /&gt;
create the db user&lt;br /&gt;
# create the db user&lt;br /&gt;
# grant the minimum permission: {{kbd | key=SELECT}}, {{kbd | key=LOCK TABLES}} to the db user. SQL query: {{kbd | key=&amp;lt;nowiki&amp;gt;GRANT SELECT, LOCK TABLES ON `DATA\_BASE\_NAME`.* TO &#039;dbuser&#039;@&#039;localhost&#039;;&amp;lt;/nowiki&amp;gt;}}&amp;lt;ref&amp;gt;[http://serverfault.com/questions/22712/minimum-permissions-for-a-user-to-perform-a-mysqldump security - Minimum permissions for a user to perform a mysqldump? - Server Fault]&amp;lt;/ref&amp;gt;&lt;br /&gt;
# the db user will be able to execute the mysqldump command&lt;br /&gt;
&lt;br /&gt;
=== Exporting data of database/table  into MySql sql file ===&lt;br /&gt;
==== mysqldump Options ====&lt;br /&gt;
Default option without any options specified&lt;br /&gt;
* {{kbd | key=&amp;lt;nowiki&amp;gt;drop table&amp;lt;/nowiki&amp;gt;}} &amp;amp; insert new data&lt;br /&gt;
&lt;br /&gt;
Replace (overwrite) the current data &lt;br /&gt;
* Run {{kbd | key=&amp;lt;nowiki&amp;gt;mysqldump&amp;lt;/nowiki&amp;gt;}} with the option {{kbd | key=&amp;lt;nowiki&amp;gt;--replace --no-create-info&amp;lt;/nowiki&amp;gt;}}&amp;lt;ref&amp;gt;[https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_replace --replace]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_no-create-info --no-create-info]&amp;lt;/ref&amp;gt;: (1) {{kbd | key=&amp;lt;nowiki&amp;gt;--replace&amp;lt;/nowiki&amp;gt;}}: &amp;quot;Write REPLACE statements rather than INSERT statements.&amp;quot; (2) {{kbd | key=&amp;lt;nowiki&amp;gt;--no-create-info&amp;lt;/nowiki&amp;gt;}}: &amp;quot;Do not write CREATE TABLE statements that create each dumped table.&amp;quot; &amp;amp; &amp;quot;Do not add a DROP TABLE statement before each CREATE TABLE statement&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Append the current data&lt;br /&gt;
* Run {{kbd | key=&amp;lt;nowiki&amp;gt;mysqldump&amp;lt;/nowiki&amp;gt;}} with the option {{kbd | key=&amp;lt;nowiki&amp;gt;--insert-ignore --no-create-info&amp;lt;/nowiki&amp;gt;}}&amp;lt;ref&amp;gt;[https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_insert-ignore --insert-ignore]&amp;lt;/ref&amp;gt;: (1) {{kbd | key=&amp;lt;nowiki&amp;gt;mysqldump&amp;lt;/nowiki&amp;gt;}} with the option {{kbd | key=&amp;lt;nowiki&amp;gt;--insert-ignore&amp;lt;/nowiki&amp;gt;}}:  &amp;quot;Write INSERT IGNORE statements rather than INSERT statements.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Schema only&lt;br /&gt;
* [https://www.electrictoolbox.com/mysqldump-schema-only/ Use mysqldump to get the schema only - Electric Toolbox]&lt;br /&gt;
&lt;br /&gt;
==== Exporting entire data ====&lt;br /&gt;
&#039;&#039;&#039;method1&#039;&#039;&#039;: {{Gd}} export the compressed *.sql file (especially for BIG sql file). It will show a progress bar and estimated time to complete the mysqldump&amp;lt;ref&amp;gt;[http://dba.stackexchange.com/questions/17367/how-can-i-monitor-the-progress-of-an-import-of-a-large-sql-file mysql - How can I monitor the progress of an import of a large .sql file? - Database Administrators Stack Exchange]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://dev.mysql.com/doc/refman/5.1/en/mysqldump.html MySQL :: MySQL 5.1 Reference Manual :: 4.5.4 mysqldump — A Database Backup Program]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://stackoverflow.com/questions/5666784/how-can-i-slow-down-a-mysql-dump-as-to-not-affect-current-load-on-the-server backup - How can I slow down a MySQL dump as to not affect current load on the server? - Stack Overflow]&amp;lt;/ref&amp;gt;: &lt;br /&gt;
# (optional) install {{kbd | key =pv}} if the {{kbd | key =pv}} was not installed&lt;br /&gt;
# (for InnoDB tables){{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p --force --single-transaction --default-character-set=utf8 DATA_BASE_NAME | pv | gzip -c &amp;gt; database.sql.gz&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[http://journal.andrewloe.com/2009/05/12/pv-gzip-mysql/ pv + gzip + mysql — W. Andrew Loe III: Journal]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;(if have permission to LOCK TABLES){{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p DATA_BASE_NAME | pv | gzip -c &amp;gt; database.sql.gz&amp;lt;/nowiki&amp;gt;}} (if have no permission to LOCK TABLES){{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p --lock-tables=false DATA_BASE_NAME | pv | gzip -c &amp;gt; database.sql.gz&amp;lt;/nowiki&amp;gt;}} via [http://stackoverflow.com/questions/104612/run-mysqldump-without-locking-tables mysql - Run MySQLDump without Locking Tables - Stack Overflow]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# ask to enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
optional: Append the Today&#039;s date to file name&lt;br /&gt;
* On {{Linux}}: (for InnoDB tables){{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p --force --single-transaction --default-character-set=utf8 DATA_BASE_NAME | pv | gzip -c &amp;gt; database.sql.$(date +&amp;quot;%y%m%d&amp;quot;).gz&amp;lt;/nowiki&amp;gt;}} &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method2&#039;&#039;&#039;: Bulk export individual tables into the multiple compressed *.sql files&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mysqldump -h localhost -u username -pPASSWORD --force --single-transaction --default-character-set=utf8 DB_NAME TABLE_1 | pv | gzip -c &amp;gt; table_1.sql.gz&lt;br /&gt;
mysqldump -h localhost -u username -pPASSWORD --force --single-transaction --default-character-set=utf8 DB_NAME TABLE_2 | pv | gzip -c &amp;gt; table_2.sql.gz&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
note: the last line of above part is &#039;&#039;&#039;return symbol&#039;&#039;&#039;. The last command will not be executed automatically without the return symbol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method3&#039;&#039;&#039;: export the *.sql file. It will show a progress bar and estimated time to complete the mysqldump &amp;lt;ref&amp;gt;[http://dubbs.github.io/blog/2013/09/05/mysql-import-slash-export-progress-bar/ MySQL Import/Export Progress Bar - Kevin Warrington]&amp;lt;/ref&amp;gt;: &lt;br /&gt;
# (optional if the {{kbd | key =pv}} was not installed) {{kbd | key =yum install pv}} for RHEL / CentOS / SL / Fedora Linux&lt;br /&gt;
# (for InnoDB tables){{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p --force --single-transaction --default-character-set=utf8 DATA_BASE_NAME | pv &amp;gt; database.sql&amp;lt;/nowiki&amp;gt;}}  and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method4&#039;&#039;&#039;: export the *.sql file&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p --single-transaction  --default-character-set=utf8 DATA-BASE-NAME &amp;gt; /path/to/database.sql &amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method5&#039;&#039;&#039;:  Using phpmyadmin to export the database. {{exclaim}} But I found the number rows of table after imported was not the same with the number rows of original table once.&lt;br /&gt;
&lt;br /&gt;
==== Exporting selected data ====&lt;br /&gt;
[http://stackoverflow.com/questions/17397661/append-mysql-dump-to-a-table mysqldump - Append MYSQL dump to a table - Stack Overflow] {{access | date = 2016-06-29}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Potential failure issue ====&lt;br /&gt;
* insufficient hard-disk space&lt;br /&gt;
&lt;br /&gt;
=== Importing data from MySql sql file ===&lt;br /&gt;
{{exclaim}} Notice: existing database will be overwritten&lt;br /&gt;
&lt;br /&gt;
Optional&lt;br /&gt;
# (optional) install {{kbd | key =pv}} if the {{kbd | key =pv}} was not installed for RHEL / CentOS / SL / Fedora Linux or {{kbd | key =brew install pv}} for {{Mac}}&amp;lt;ref&amp;gt;[https://formulae.brew.sh/formula/pv pv — Homebrew Formulae]&amp;lt;/ref&amp;gt;&lt;br /&gt;
# (optional if the 7Zip was not installed) {{kbd | key =yum install p7zip}} for RHEL / CentOS / SL / Fedora Linux&lt;br /&gt;
&#039;&#039;&#039;method 1&#039;&#039;&#039;: Import *.sql file: &lt;br /&gt;
# (optional if the .sql file was compressed) {{kbd | key =unzip data.zip}} or {{kbd | key =gzip -d data.gz}} if the file was compressed by gzip&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt;mysql -u username -p -h localhost --default_character_set utf8 --force DATA_BASE_NAME &amp;lt; data.sql&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[http://www.cyberciti.biz/faq/import-mysql-dumpfile-sql-datafile-into-my-database/ Import MySQL Dumpfile, SQL Datafile Into My Database]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 2&#039;&#039;&#039;: Import *.sql file with {{kbd | key =--binary-mode}} (useful when the dump contains complex JSON string, binary data or BLOB fields, to avoid &amp;quot;\r\n&amp;quot; being misinterpreted and causing corrupted imports):&lt;br /&gt;
# (optional if the .sql file was compressed) {{kbd | key =unzip data.zip}} or {{kbd | key =gzip -d data.gz}} if the file was compressed by gzip&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt;mysql -u username -p -h localhost --default_character_set utf8 --binary-mode --force DATA_BASE_NAME &amp;lt; data.sql&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[https://dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html#option_mysql_binary-mode mysql Command-Line Client Options — MySQL Reference Manual]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }} {{kbd | key =--binary-mode}} disables all client-side conversions of {{kbd | key =\r\n}} and treats {{kbd | key =\0}} as a normal character, which is recommended whenever the dump was produced with {{kbd | key =mysqldump --hex-blob}} or otherwise contains binary/BLOB content&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 3&#039;&#039;&#039;: Import the *.sql file (especially for BIG sql file). It will show a progress bar and estimated time to complete the mysql command&amp;lt;ref&amp;gt;[http://dba.stackexchange.com/questions/17367/how-can-i-monitor-the-progress-of-an-import-of-a-large-sql-file mysql - How can I monitor the progress of an import of a large .sql file? - Database Administrators Stack Exchange]&amp;lt;/ref&amp;gt;: &lt;br /&gt;
# Install {{kbd | key =pv}}&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt;pv data.sql | mysql -u username -p -h localhost --default_character_set utf8 --force DATA_BASE_NAME&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[http://www.cyberciti.biz/faq/import-mysql-dumpfile-sql-datafile-into-my-database/ Import MySQL Dumpfile, SQL Datafile Into My Database]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }} The console window will show ETA (Estimated Time of Arrival)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 4&#039;&#039;&#039;: Same as method 3, but combined with {{kbd | key =--binary-mode}} to safely handle binary/BLOB content while showing a progress bar:&lt;br /&gt;
# Install {{kbd | key =pv}}&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt;pv data.sql | mysql -u username -p -h localhost --default_character_set utf8 --binary-mode --force DATA_BASE_NAME&amp;lt;/nowiki&amp;gt;}} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }} The console window will show ETA (Estimated Time of Arrival), and {{kbd | key =--binary-mode}} disables all client-side conversions of {{kbd | key =\r\n}} and treats {{kbd | key =\0}} as a normal character, which is recommended whenever the dump was produced with {{kbd | key =mysqldump --hex-blob}} or otherwise contains binary/BLOB content&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 5&#039;&#039;&#039;: {{Gd}} Import the compressed *.sql file with gzip (especially for BIG sql file). It will show a progress bar and estimated time to complete the mysql command: &lt;br /&gt;
# Install {{kbd | key =pv}}&lt;br /&gt;
# Check if the file is gzip format (test the compressed file integrity) ex: (1) {{kbd | key =  &amp;lt;nowiki&amp;gt;gunzip -t database.sql.gz&amp;lt;/nowiki&amp;gt;}} If not, it will return the message &amp;quot;gzip: database.sql.gz: not in gzip format.&amp;quot; (2) Using [http://www.winmd5.com/ WinMD5 Free] for {{Win}} or [http://linux.die.net/man/1/md5sum md5sum] command for {{Linux}} to obtain MD5 checksum of files.&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt; pv database.sql.gz | gunzip | mysql -u username -p -h localhost --default_character_set utf8 --force DATA_BASE_NAME&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[http://journal.andrewloe.com/2009/05/12/pv-gzip-mysql/ pv + gzip + mysql — W. Andrew Loe III: Journal]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }} The console window will show ETA (Estimated Time of Arrival)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 6&#039;&#039;&#039;: Same as method 5, but combined with {{kbd | key =--binary-mode}} to safely handle binary/BLOB content while showing a progress bar:&lt;br /&gt;
# Install {{kbd | key =pv}}&lt;br /&gt;
# Check if the file is gzip format (test the compressed file integrity) ex: (1) {{kbd | key =  &amp;lt;nowiki&amp;gt;gunzip -t database.sql.gz&amp;lt;/nowiki&amp;gt;}} If not, it will return the message &amp;quot;gzip: database.sql.gz: not in gzip format.&amp;quot; (2) Using [http://www.winmd5.com/ WinMD5 Free] for {{Win}} or [http://linux.die.net/man/1/md5sum md5sum] command for {{Linux}} to obtain MD5 checksum of files.&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt; pv database.sql.gz | gunzip -c | mysql -u username -p -h localhost --default_character_set utf8 --binary-mode --force DATA_BASE_NAME&amp;lt;/nowiki&amp;gt;}} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }} The console window will show ETA (Estimated Time of Arrival), and {{kbd | key =--binary-mode}} disables all client-side conversions of {{kbd | key =\r\n}} and treats {{kbd | key =\0}} as a normal character, which is recommended whenever the dump was produced with {{kbd | key =mysqldump --hex-blob}} or otherwise contains binary/BLOB content&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 7&#039;&#039;&#039;: Import ZIP file to MySql directly:&lt;br /&gt;
# Install the 7Zip&lt;br /&gt;
# {{kbd | key = &amp;lt;nowiki&amp;gt;7za x -so data.zip | mysql -u username -p -h localhost --default_character_set utf8 --force DATA_BASE_NAME&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[http://stackoverflow.com/questions/11267309/importing-zipped-files-in-mysql-using-command-line database - Importing zipped files in Mysql using command line - Stack Overflow]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://needs-be.blogspot.tw/2011/01/install-7zip-on-centos-55.html Install 7Zip on CentOS 5.5]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing databases ===&lt;br /&gt;
Synchronizing two MySQL databases:&lt;br /&gt;
* [http://www.heidisql.com/ HeidiSQL - MySQL, MSSQL and PostgreSQL made easy] v.9.4.0.5125 for {{Win}}, {{Mac}} &amp;amp; {{Linux}}&lt;br /&gt;
** Steps: Choose the database or table --&amp;gt; Export database as SQL --&amp;gt; Output: Select the mysql server connection&lt;br /&gt;
** Scheduler: Not available&amp;lt;ref&amp;gt;[http://www.heidisql.com/forum.php?t=22040 Schedule backups/exports]&amp;lt;/ref&amp;gt; {{exclaim}}. Manually synchronizing databases between two different servers.&lt;br /&gt;
* [https://dev.mysql.com/doc/refman/5.7/en/replication.html Replication]&lt;br /&gt;
** Steps:&lt;br /&gt;
** Scheduler: Auto {{Gd}}.&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.webyog.com/product/sqlyog SQLyog] v.12.4.0 for {{Win}}.&lt;br /&gt;
** Steps: Menu --&amp;gt; Powertools --&amp;gt; Database Synchronization Wizard&lt;br /&gt;
** Scheduler: Available {{Gd}}. Save the job file &amp;amp; Schedule it using Windows scheduler.&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.devart.com/dbforge/mysql/studio/ MySQL GUI Tool - MariaDB and MySQL Front End Client for Windows]&lt;br /&gt;
** Steps: &lt;br /&gt;
*** Menu: Comparison -&amp;gt; New Data Comparison -&amp;gt; Choose the connection: Next -&amp;gt; &lt;br /&gt;
*** Mapping: Select objects that you want to compare -&amp;gt; &lt;br /&gt;
*** After hours or minutes ...&lt;br /&gt;
*** Menu: Comparison -&amp;gt; Synchronize -&amp;gt; Open the synchronization script in the internal editor -&amp;gt; Synchronize &lt;br /&gt;
*** Menu: SQL -&amp;gt; Execute&lt;br /&gt;
** Scheduler:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Transfer date from MS SQL server to MySQL or MariaDB server&amp;lt;ref&amp;gt;[https://mariadb.com/kb/en/library/monyog-sqlyog/ MONyog &amp;amp; SQLyog - MariaDB Knowledge Base]&amp;lt;/ref&amp;gt;: &lt;br /&gt;
* See on [[Troubleshooting_of_MySQL_errors#Transfer_Data_from_MySQL_to_MSSQL | Transfer Data from MySQL to MSSQL]]&lt;br /&gt;
&lt;br /&gt;
=== Show the MySQL process list &amp;amp; kill the process ===&lt;br /&gt;
Show the MySQL process list &amp;amp; kill the process (especial for SLOW query command)&amp;lt;ref&amp;gt;[http://dev.mysql.com/doc/refman/5.1/en/show-processlist.html MySQL :: MySQL 5.1 Reference Manual :: 13.7.5.31 SHOW PROCESSLIST Syntax]&amp;lt;/ref&amp;gt;&lt;br /&gt;
# {{kbd | key=mysql -h HOST -u ACCOUNT -p }}&lt;br /&gt;
# And keyin the PASSWORD of your MySQL ACCOUNT. The first character will be changed to &#039;&#039;mysql&amp;gt;&#039;&#039; from &#039;&#039;$&#039;&#039; or &#039;&#039;#&#039;&#039;&lt;br /&gt;
# mysql&amp;gt; &lt;br /&gt;
#* {{kbd | key=SHOW FULL PROCESSLIST\G}} to show the process list&lt;br /&gt;
#* {{kbd | key=SHOW PROCESSLIST\G}} to show the brief process list&lt;br /&gt;
# mysql&amp;gt; {{kbd | key=kill 101;}} to kill the process with Id number: {{kbd | key=101}}&lt;br /&gt;
# mysql&amp;gt; {{kbd | key=exit;}} to leave the MySQL command.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting of MySQL errors ===&lt;br /&gt;
[[Troubleshooting of MySQL errors]]&lt;br /&gt;
&lt;br /&gt;
=== Further reading ===&lt;br /&gt;
* [https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html MySQL :: MySQL 8.0 Reference Manual :: 4.5.4 mysqldump — A Database Backup Program]&lt;br /&gt;
* [http://dev.mysql.com/doc/refman/5.7/en/error-handling.html MySQL :: MySQL 5.7 Reference Manual :: B Errors, Error Codes, and Common Problems]&lt;br /&gt;
* [http://eosrei.net/articles/2013/03/forcing-mysqldump-always-be-nice-cpu-and-io Forcing a mysqldump to always be nice to CPU and I/O | eosrei.net]: using [http://www.computerhope.com/unix/unice.htm nice] or [http://www.tutorialspoint.com/unix_commands/ionice.htm ionice] commands {{exclaim}} &lt;br /&gt;
** ionice command is not exists in cygwin&lt;br /&gt;
* [http://www.dbastuff.net/2014/09/mysql-dump-and-partitions.html DBAStuff: Mysql Dump and partitions] {{access | date = 2016-01-01}}&lt;br /&gt;
* [https://dev.mysql.com/doc/refman/5.5/en/backup-methods.html MySQL :: MySQL 5.5 Reference Manual :: 7.2 Database Backup Methods]  {{access | date = 2016-06-29}}&lt;br /&gt;
* [[SQL syntax debug]]&lt;br /&gt;
* [https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html MySQL :: MySQL 8.0 Reference Manual :: 5.1.8 Server SQL Modes]&lt;br /&gt;
* [https://dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html MySQL :: MySQL 8.0 Reference Manual :: 4.5.1.1 mysql Client Options]&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Data factory flow}}&lt;br /&gt;
&lt;br /&gt;
[[Category: MySQL]]&lt;br /&gt;
[[Category: Data Science]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=MySQL_commands&amp;diff=26424</id>
		<title>MySQL commands</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=MySQL_commands&amp;diff=26424"/>
		<updated>2026-08-03T07:47:45Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Importing data from MySql sql file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MySQL commands and troubleshooting of MySQL errors.&lt;br /&gt;
&lt;br /&gt;
=== Preparation ===&lt;br /&gt;
install MySQL database client apps contains {{kbd | key=mysql}} &amp;amp; {{kbd | key=mysqldump}} commands&lt;br /&gt;
* {{Linux}}: &lt;br /&gt;
* {{Win}}: Install (1) [https://www.cygwin.com/ Cygwin], (2) search mysql &amp;amp; install MySQL database clients apps package&lt;br /&gt;
* {{Mac}}: &lt;br /&gt;
** Install [https://www.apachefriends.org/zh_tw/download.html XAMPP]. Path of {{kbd | key=mysql}} executable file is: {{kbd | key=/Applications/xampp/xamppfiles/bin/mysql}}&lt;br /&gt;
** MAMP: path of mysql command: {{kbd | key=/Applications/MAMP/Library/bin/mysql}}&amp;lt;ref&amp;gt;[https://dev.to/arbaoui_mehdi/how-to-access-the-mysql-cli-with-mamp-25m How to access the MySQL CLI With MAMP - DEV Community]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(optional) install the [http://www.ivarch.com/programs/pv.shtml Pipe Viewer] (pv) package&lt;br /&gt;
* {{Linux}}: &lt;br /&gt;
*# [http://www.tecmint.com/enable-rpmforge-repository/ How to Enable RPMForge Repository in RHEL/CentOS 7.x/6.x/5.x/4.x]&lt;br /&gt;
*# (1){{kbd | key =yum install pv}} for RHEL / CentOS / SL / Fedora Linux&amp;lt;ref&amp;gt;[http://www.cyberciti.biz/open-source/command-line-hacks/pv-command-examples/ Linux / Unix pv Command: Monitor Progress of Data Sent Via a Pipe]&amp;lt;/ref&amp;gt;;  (2) {{kbd | key =apt-get install pv}} for Debian / Ubuntu&amp;lt;ref&amp;gt;[http://www.ivarch.com/programs/pv.shtml ivarch.com: Pipe Viewer]&amp;lt;/ref&amp;gt;; &lt;br /&gt;
* {{Win}}: Install (1) [https://www.cygwin.com/ Cygwin], (2) search pv &amp;amp; install pv package&lt;br /&gt;
* {{Mac}}: Install (1) {{kbd | key =brew install pv}} to get the latest version of pv package&amp;lt;ref&amp;gt;[http://ashleyangell.com/2013/11/pipe-viewer-pv-in-mac-osx/ Pipe Viewer (pv) in Mac OSX]&amp;lt;/ref&amp;gt; and (2) MySQL database clients from [https://www.apachefriends.org/zh_tw/download.html XAMPP]. Path of mysql is: /Applications/xampp/xamppfiles/bin/mysql&lt;br /&gt;
&lt;br /&gt;
create the db user&lt;br /&gt;
# create the db user&lt;br /&gt;
# grant the minimum permission: {{kbd | key=SELECT}}, {{kbd | key=LOCK TABLES}} to the db user. SQL query: {{kbd | key=&amp;lt;nowiki&amp;gt;GRANT SELECT, LOCK TABLES ON `DATA\_BASE\_NAME`.* TO &#039;dbuser&#039;@&#039;localhost&#039;;&amp;lt;/nowiki&amp;gt;}}&amp;lt;ref&amp;gt;[http://serverfault.com/questions/22712/minimum-permissions-for-a-user-to-perform-a-mysqldump security - Minimum permissions for a user to perform a mysqldump? - Server Fault]&amp;lt;/ref&amp;gt;&lt;br /&gt;
# the db user will be able to execute the mysqldump command&lt;br /&gt;
&lt;br /&gt;
=== Exporting data of database/table  into MySql sql file ===&lt;br /&gt;
==== mysqldump Options ====&lt;br /&gt;
Default option without any options specified&lt;br /&gt;
* {{kbd | key=&amp;lt;nowiki&amp;gt;drop table&amp;lt;/nowiki&amp;gt;}} &amp;amp; insert new data&lt;br /&gt;
&lt;br /&gt;
Replace (overwrite) the current data &lt;br /&gt;
* Run {{kbd | key=&amp;lt;nowiki&amp;gt;mysqldump&amp;lt;/nowiki&amp;gt;}} with the option {{kbd | key=&amp;lt;nowiki&amp;gt;--replace --no-create-info&amp;lt;/nowiki&amp;gt;}}&amp;lt;ref&amp;gt;[https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_replace --replace]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_no-create-info --no-create-info]&amp;lt;/ref&amp;gt;: (1) {{kbd | key=&amp;lt;nowiki&amp;gt;--replace&amp;lt;/nowiki&amp;gt;}}: &amp;quot;Write REPLACE statements rather than INSERT statements.&amp;quot; (2) {{kbd | key=&amp;lt;nowiki&amp;gt;--no-create-info&amp;lt;/nowiki&amp;gt;}}: &amp;quot;Do not write CREATE TABLE statements that create each dumped table.&amp;quot; &amp;amp; &amp;quot;Do not add a DROP TABLE statement before each CREATE TABLE statement&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Append the current data&lt;br /&gt;
* Run {{kbd | key=&amp;lt;nowiki&amp;gt;mysqldump&amp;lt;/nowiki&amp;gt;}} with the option {{kbd | key=&amp;lt;nowiki&amp;gt;--insert-ignore --no-create-info&amp;lt;/nowiki&amp;gt;}}&amp;lt;ref&amp;gt;[https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_insert-ignore --insert-ignore]&amp;lt;/ref&amp;gt;: (1) {{kbd | key=&amp;lt;nowiki&amp;gt;mysqldump&amp;lt;/nowiki&amp;gt;}} with the option {{kbd | key=&amp;lt;nowiki&amp;gt;--insert-ignore&amp;lt;/nowiki&amp;gt;}}:  &amp;quot;Write INSERT IGNORE statements rather than INSERT statements.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Schema only&lt;br /&gt;
* [https://www.electrictoolbox.com/mysqldump-schema-only/ Use mysqldump to get the schema only - Electric Toolbox]&lt;br /&gt;
&lt;br /&gt;
==== Exporting entire data ====&lt;br /&gt;
&#039;&#039;&#039;method1&#039;&#039;&#039;: {{Gd}} export the compressed *.sql file (especially for BIG sql file). It will show a progress bar and estimated time to complete the mysqldump&amp;lt;ref&amp;gt;[http://dba.stackexchange.com/questions/17367/how-can-i-monitor-the-progress-of-an-import-of-a-large-sql-file mysql - How can I monitor the progress of an import of a large .sql file? - Database Administrators Stack Exchange]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://dev.mysql.com/doc/refman/5.1/en/mysqldump.html MySQL :: MySQL 5.1 Reference Manual :: 4.5.4 mysqldump — A Database Backup Program]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://stackoverflow.com/questions/5666784/how-can-i-slow-down-a-mysql-dump-as-to-not-affect-current-load-on-the-server backup - How can I slow down a MySQL dump as to not affect current load on the server? - Stack Overflow]&amp;lt;/ref&amp;gt;: &lt;br /&gt;
# (optional) install {{kbd | key =pv}} if the {{kbd | key =pv}} was not installed&lt;br /&gt;
# (for InnoDB tables){{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p --force --single-transaction --default-character-set=utf8 DATA_BASE_NAME | pv | gzip -c &amp;gt; database.sql.gz&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[http://journal.andrewloe.com/2009/05/12/pv-gzip-mysql/ pv + gzip + mysql — W. Andrew Loe III: Journal]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;(if have permission to LOCK TABLES){{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p DATA_BASE_NAME | pv | gzip -c &amp;gt; database.sql.gz&amp;lt;/nowiki&amp;gt;}} (if have no permission to LOCK TABLES){{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p --lock-tables=false DATA_BASE_NAME | pv | gzip -c &amp;gt; database.sql.gz&amp;lt;/nowiki&amp;gt;}} via [http://stackoverflow.com/questions/104612/run-mysqldump-without-locking-tables mysql - Run MySQLDump without Locking Tables - Stack Overflow]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# ask to enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
optional: Append the Today&#039;s date to file name&lt;br /&gt;
* On {{Linux}}: (for InnoDB tables){{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p --force --single-transaction --default-character-set=utf8 DATA_BASE_NAME | pv | gzip -c &amp;gt; database.sql.$(date +&amp;quot;%y%m%d&amp;quot;).gz&amp;lt;/nowiki&amp;gt;}} &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method2&#039;&#039;&#039;: Bulk export individual tables into the multiple compressed *.sql files&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mysqldump -h localhost -u username -pPASSWORD --force --single-transaction --default-character-set=utf8 DB_NAME TABLE_1 | pv | gzip -c &amp;gt; table_1.sql.gz&lt;br /&gt;
mysqldump -h localhost -u username -pPASSWORD --force --single-transaction --default-character-set=utf8 DB_NAME TABLE_2 | pv | gzip -c &amp;gt; table_2.sql.gz&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
note: the last line of above part is &#039;&#039;&#039;return symbol&#039;&#039;&#039;. The last command will not be executed automatically without the return symbol.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method3&#039;&#039;&#039;: export the *.sql file. It will show a progress bar and estimated time to complete the mysqldump &amp;lt;ref&amp;gt;[http://dubbs.github.io/blog/2013/09/05/mysql-import-slash-export-progress-bar/ MySQL Import/Export Progress Bar - Kevin Warrington]&amp;lt;/ref&amp;gt;: &lt;br /&gt;
# (optional if the {{kbd | key =pv}} was not installed) {{kbd | key =yum install pv}} for RHEL / CentOS / SL / Fedora Linux&lt;br /&gt;
# (for InnoDB tables){{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p --force --single-transaction --default-character-set=utf8 DATA_BASE_NAME | pv &amp;gt; database.sql&amp;lt;/nowiki&amp;gt;}}  and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method4&#039;&#039;&#039;: export the *.sql file&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt;mysqldump -h localhost -u username -p --single-transaction  --default-character-set=utf8 DATA-BASE-NAME &amp;gt; /path/to/database.sql &amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method5&#039;&#039;&#039;:  Using phpmyadmin to export the database. {{exclaim}} But I found the number rows of table after imported was not the same with the number rows of original table once.&lt;br /&gt;
&lt;br /&gt;
==== Exporting selected data ====&lt;br /&gt;
[http://stackoverflow.com/questions/17397661/append-mysql-dump-to-a-table mysqldump - Append MYSQL dump to a table - Stack Overflow] {{access | date = 2016-06-29}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Potential failure issue ====&lt;br /&gt;
* insufficient hard-disk space&lt;br /&gt;
&lt;br /&gt;
=== Importing data from MySql sql file ===&lt;br /&gt;
{{exclaim}} Notice: existing database will be overwritten&lt;br /&gt;
&lt;br /&gt;
Optional&lt;br /&gt;
# (optional) install {{kbd | key =pv}} if the {{kbd | key =pv}} was not installed for RHEL / CentOS / SL / Fedora Linux or {{kbd | key =brew install pv}} for {{Mac}}&amp;lt;ref&amp;gt;[https://formulae.brew.sh/formula/pv pv — Homebrew Formulae]&amp;lt;/ref&amp;gt;&lt;br /&gt;
# (optional if the 7Zip was not installed) {{kbd | key =yum install p7zip}} for RHEL / CentOS / SL / Fedora Linux&lt;br /&gt;
&#039;&#039;&#039;method 1&#039;&#039;&#039;: Import *.sql file: &lt;br /&gt;
# (optional if the .sql file was compressed) {{kbd | key =unzip data.zip}} or {{kbd | key =gzip -d data.gz}} if the file was compressed by gzip&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt;mysql -u username -p -h localhost --default_character_set utf8 --force DATA_BASE_NAME &amp;lt; data.sql&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[http://www.cyberciti.biz/faq/import-mysql-dumpfile-sql-datafile-into-my-database/ Import MySQL Dumpfile, SQL Datafile Into My Database]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 2&#039;&#039;&#039;: Import *.sql file with {{kbd | key =--binary-mode}} (useful when the dump contains complex JSON string, binary data or BLOB fields, to avoid &amp;quot;\r\n&amp;quot; being misinterpreted and causing corrupted imports):&lt;br /&gt;
# (optional if the .sql file was compressed) {{kbd | key =unzip data.zip}} or {{kbd | key =gzip -d data.gz}} if the file was compressed by gzip&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt;mysql -u username -p -h localhost --default_character_set utf8 --binary-mode --force DATA_BASE_NAME &amp;lt; data.sql&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[https://dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html#option_mysql_binary-mode mysql Command-Line Client Options — MySQL Reference Manual]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }} {{kbd | key =--binary-mode}} disables all client-side conversions of {{kbd | key =\r\n}} and treats {{kbd | key =\0}} as a normal character, which is recommended whenever the dump was produced with {{kbd | key =mysqldump --hex-blob}} or otherwise contains binary/BLOB content&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 3&#039;&#039;&#039;: Import the *.sql file (especially for BIG sql file). It will show a progress bar and estimated time to complete the mysql command&amp;lt;ref&amp;gt;[http://dba.stackexchange.com/questions/17367/how-can-i-monitor-the-progress-of-an-import-of-a-large-sql-file mysql - How can I monitor the progress of an import of a large .sql file? - Database Administrators Stack Exchange]&amp;lt;/ref&amp;gt;: &lt;br /&gt;
# Install {{kbd | key =pv}}&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt;pv data.sql | mysql -u username -p -h localhost --default_character_set utf8 --force DATA_BASE_NAME&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[http://www.cyberciti.biz/faq/import-mysql-dumpfile-sql-datafile-into-my-database/ Import MySQL Dumpfile, SQL Datafile Into My Database]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }} The console window will show ETA (Estimated Time of Arrival)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 4&#039;&#039;&#039;: Same as method 3, but combined with {{kbd | key =--binary-mode}} to safely handle binary/BLOB content while showing a progress bar:&lt;br /&gt;
# Install {{kbd | key =pv}}&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt;pv data.sql | mysql -u username -p -h localhost --default_character_set utf8 --binary-mode --force DATA_BASE_NAME&amp;lt;/nowiki&amp;gt;}} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }} The console window will show ETA (Estimated Time of Arrival), and {{kbd | key =--binary-mode}} disables all client-side conversions of {{kbd | key =\r\n}} and treats {{kbd | key =\0}} as a normal character, which is recommended whenever the dump was produced with {{kbd | key =mysqldump --hex-blob}} or otherwise contains binary/BLOB content&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 5&#039;&#039;&#039;: {{Gd}} Import the compressed *.sql file with gzip (especially for BIG sql file). It will show a progress bar and estimated time to complete the mysql command: &lt;br /&gt;
# Install {{kbd | key =pv}}&lt;br /&gt;
# Check if the file is gzip format (test the compressed file integrity) ex: (1) {{kbd | key =  &amp;lt;nowiki&amp;gt;gunzip -t database.sql.gz&amp;lt;/nowiki&amp;gt;}} If not, it will return the message &amp;quot;gzip: database.sql.gz: not in gzip format.&amp;quot; (2) Using [http://www.winmd5.com/ WinMD5 Free] for {{Win}} or [http://linux.die.net/man/1/md5sum md5sum] command for {{Linux}} to obtain MD5 checksum of files.&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt; pv database.sql.gz | gunzip | mysql -u username -p -h localhost --default_character_set utf8 --force DATA_BASE_NAME&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[http://journal.andrewloe.com/2009/05/12/pv-gzip-mysql/ pv + gzip + mysql — W. Andrew Loe III: Journal]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }} The console window will show ETA (Estimated Time of Arrival)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 6&#039;&#039;&#039;: Same as method 5, but combined with {{kbd | key =--binary-mode}} to safely handle binary/BLOB content while showing a progress bar:&lt;br /&gt;
# Install {{kbd | key =pv}}&lt;br /&gt;
# Check if the file is gzip format (test the compressed file integrity) ex: (1) {{kbd | key =  &amp;lt;nowiki&amp;gt;gunzip -t database.sql.gz&amp;lt;/nowiki&amp;gt;}} If not, it will return the message &amp;quot;gzip: database.sql.gz: not in gzip format.&amp;quot; (2) Using [http://www.winmd5.com/ WinMD5 Free] for {{Win}} or [http://linux.die.net/man/1/md5sum md5sum] command for {{Linux}} to obtain MD5 checksum of files.&lt;br /&gt;
# {{kbd | key =  &amp;lt;nowiki&amp;gt; pv database.sql.gz | gunzip -c | mysql -u username -p -h localhost --default_character_set utf8 --binary-mode --force DATA_BASE_NAME&amp;lt;/nowiki&amp;gt;}} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }} The console window will show ETA (Estimated Time of Arrival), and {{kbd | key =--binary-mode}} disables all client-side conversions of {{kbd | key =\r\n}} and treats {{kbd | key =\0}} as a normal character, which is recommended whenever the dump was produced with {{kbd | key =mysqldump --hex-blob}} or otherwise contains binary/BLOB content&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;method 7&#039;&#039;&#039;: Import ZIP file to MySql directly:&lt;br /&gt;
# Install the 7Zip&lt;br /&gt;
# {{kbd | key = &amp;lt;nowiki&amp;gt;7za x -so data.zip | mysql -u username -p -h localhost --default_character_set utf8 --force DATA_BASE_NAME&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[http://stackoverflow.com/questions/11267309/importing-zipped-files-in-mysql-using-command-line database - Importing zipped files in Mysql using command line - Stack Overflow]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://needs-be.blogspot.tw/2011/01/install-7zip-on-centos-55.html Install 7Zip on CentOS 5.5]&amp;lt;/ref&amp;gt; and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
# enter {{kbd | key =  &amp;lt;nowiki&amp;gt;password&amp;lt;/nowiki&amp;gt; }} and press {{kbd | key =  &amp;lt;nowiki&amp;gt;Enter&amp;lt;/nowiki&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing databases ===&lt;br /&gt;
Synchronizing two MySQL databases:&lt;br /&gt;
* [http://www.heidisql.com/ HeidiSQL - MySQL, MSSQL and PostgreSQL made easy] v.9.4.0.5125 for {{Win}}, {{Mac}} &amp;amp; {{Linux}}&lt;br /&gt;
** Steps: Choose the database or table --&amp;gt; Export database as SQL --&amp;gt; Output: Select the mysql server connection&lt;br /&gt;
** Scheduler: Not available&amp;lt;ref&amp;gt;[http://www.heidisql.com/forum.php?t=22040 Schedule backups/exports]&amp;lt;/ref&amp;gt; {{exclaim}}. Manually synchronizing databases between two different servers.&lt;br /&gt;
* [https://dev.mysql.com/doc/refman/5.7/en/replication.html Replication]&lt;br /&gt;
** Steps:&lt;br /&gt;
** Scheduler: Auto {{Gd}}.&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.webyog.com/product/sqlyog SQLyog] v.12.4.0 for {{Win}}.&lt;br /&gt;
** Steps: Menu --&amp;gt; Powertools --&amp;gt; Database Synchronization Wizard&lt;br /&gt;
** Scheduler: Available {{Gd}}. Save the job file &amp;amp; Schedule it using Windows scheduler.&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.devart.com/dbforge/mysql/studio/ MySQL GUI Tool - MariaDB and MySQL Front End Client for Windows]&lt;br /&gt;
** Steps: &lt;br /&gt;
*** Menu: Comparison -&amp;gt; New Data Comparison -&amp;gt; Choose the connection: Next -&amp;gt; &lt;br /&gt;
*** Mapping: Select objects that you want to compare -&amp;gt; &lt;br /&gt;
*** After hours or minutes ...&lt;br /&gt;
*** Menu: Comparison -&amp;gt; Synchronize -&amp;gt; Open the synchronization script in the internal editor -&amp;gt; Synchronize &lt;br /&gt;
*** Menu: SQL -&amp;gt; Execute&lt;br /&gt;
** Scheduler:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Transfer date from MS SQL server to MySQL or MariaDB server&amp;lt;ref&amp;gt;[https://mariadb.com/kb/en/library/monyog-sqlyog/ MONyog &amp;amp; SQLyog - MariaDB Knowledge Base]&amp;lt;/ref&amp;gt;: &lt;br /&gt;
* See on [[Troubleshooting_of_MySQL_errors#Transfer_Data_from_MySQL_to_MSSQL | Transfer Data from MySQL to MSSQL]]&lt;br /&gt;
&lt;br /&gt;
=== Show the MySQL process list &amp;amp; kill the process ===&lt;br /&gt;
Show the MySQL process list &amp;amp; kill the process (especial for SLOW query command)&amp;lt;ref&amp;gt;[http://dev.mysql.com/doc/refman/5.1/en/show-processlist.html MySQL :: MySQL 5.1 Reference Manual :: 13.7.5.31 SHOW PROCESSLIST Syntax]&amp;lt;/ref&amp;gt;&lt;br /&gt;
# {{kbd | key=mysql -h HOST -u ACCOUNT -p }}&lt;br /&gt;
# And keyin the PASSWORD of your MySQL ACCOUNT. The first character will be changed to &#039;&#039;mysql&amp;gt;&#039;&#039; from &#039;&#039;$&#039;&#039; or &#039;&#039;#&#039;&#039;&lt;br /&gt;
# mysql&amp;gt; &lt;br /&gt;
#* {{kbd | key=SHOW FULL PROCESSLIST\G}} to show the process list&lt;br /&gt;
#* {{kbd | key=SHOW PROCESSLIST\G}} to show the brief process list&lt;br /&gt;
# mysql&amp;gt; {{kbd | key=kill 101;}} to kill the process with Id number: {{kbd | key=101}}&lt;br /&gt;
# mysql&amp;gt; {{kbd | key=exit;}} to leave the MySQL command.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting of MySQL errors ===&lt;br /&gt;
[[Troubleshooting of MySQL errors]]&lt;br /&gt;
&lt;br /&gt;
=== Further reading ===&lt;br /&gt;
* [https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html MySQL :: MySQL 8.0 Reference Manual :: 4.5.4 mysqldump — A Database Backup Program]&lt;br /&gt;
* [http://dev.mysql.com/doc/refman/5.7/en/error-handling.html MySQL :: MySQL 5.7 Reference Manual :: B Errors, Error Codes, and Common Problems]&lt;br /&gt;
* [http://eosrei.net/articles/2013/03/forcing-mysqldump-always-be-nice-cpu-and-io Forcing a mysqldump to always be nice to CPU and I/O | eosrei.net]: using [http://www.computerhope.com/unix/unice.htm nice] or [http://www.tutorialspoint.com/unix_commands/ionice.htm ionice] commands {{exclaim}} &lt;br /&gt;
** ionice command is not exists in cygwin&lt;br /&gt;
* [http://www.dbastuff.net/2014/09/mysql-dump-and-partitions.html DBAStuff: Mysql Dump and partitions] {{access | date = 2016-01-01}}&lt;br /&gt;
* [https://dev.mysql.com/doc/refman/5.5/en/backup-methods.html MySQL :: MySQL 5.5 Reference Manual :: 7.2 Database Backup Methods]  {{access | date = 2016-06-29}}&lt;br /&gt;
* [[SQL syntax debug]]&lt;br /&gt;
* [https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html MySQL :: MySQL 8.0 Reference Manual :: 5.1.8 Server SQL Modes]&lt;br /&gt;
* [https://dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html MySQL :: MySQL 8.0 Reference Manual :: 4.5.1.1 mysql Client Options]&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Data factory flow}}&lt;br /&gt;
&lt;br /&gt;
[[Category:MySQL]]&lt;br /&gt;
[[Category:Data Science]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Guiding_principles_on_generative_artificial_intelligence_in_Mandarin&amp;diff=26423</id>
		<title>Guiding principles on generative artificial intelligence in Mandarin</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Guiding_principles_on_generative_artificial_intelligence_in_Mandarin&amp;diff=26423"/>
		<updated>2026-08-03T05:52:36Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* 相關法規 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;生成式 AI 的校園、公司或政府機關的使用指引與法規&lt;br /&gt;
&lt;br /&gt;
{{Template:Generative AI Tool in Mandarin}}&lt;br /&gt;
&lt;br /&gt;
{{LanguageSwitcher | content = [[Guiding principles on generative artificial intelligence | English]], [[Guiding principles on generative artificial intelligence in Mandarin | 漢字]] }}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 使用指引 ==&lt;br /&gt;
學校&lt;br /&gt;
* Harvard University Information Technology (n.d.). [https://huit.harvard.edu/ai/guidelines Generative Artificial Intelligence (AI) Guidelines]&lt;br /&gt;
* 臺灣師範大學 (n.d.). [https://ctld.ntnu.edu.tw/generative_ai 國立臺灣師範大學 – 生成式 AI 之學習應用及參考指引 – 國立臺灣師範大學教學發展中心] ([https://web.archive.org/web/20251206170602/https://ctld.ntnu.edu.tw/generative_ai 網頁備份])&lt;br /&gt;
* 臺灣大學 (n.d.). [https://www.dlc.ntu.edu.tw/ai-tools/ 臺大針對生成式 AI 工具之教學因應措施] by 教務處教學發展中心 x 數位學習中心 ([https://web.archive.org/web/20260117130949/https://www.dlc.ntu.edu.tw/ai-tools/ 網頁備份])&lt;br /&gt;
* 臺灣大學 (2023). [http://tul.blog.ntu.edu.tw/archives/32789 如何引用ChatGPT生成內容？ – 國立臺灣大學圖書館參考服務部落格]&lt;br /&gt;
* 清華大學 (2023). [https://curricul.site.nthu.edu.tw/p/404-1208-248357.php?Lang=zh-tw 生成式人工智慧倫理聲明]&lt;br /&gt;
* 臺北科大 (2023). [https://oaa.ntut.edu.tw/p/406-1008-129455,r11.php?Lang=zh-tw 因應生成式 AI 工具之教學參考指引]&lt;br /&gt;
* 政大圖書館 (n.d.). [https://sites.google.com/view/ncculibgenai/basics?authuser=0 政大圖書館生成式AI使用指引]&lt;br /&gt;
&lt;br /&gt;
企業&lt;br /&gt;
* 資策會 (2023). [https://www.iii.org.tw/Publish/DownloadPages_download.aspx?dp_sqno=26 2023企業應具備的AI素養-生成式AI導入指引]&lt;br /&gt;
* 資策會軟體院 (2024). [https://www.iii.org.tw/Publish/DownloadPages_download.aspx?dp_sqno=35 生成式AI企業大腦開發指引]&lt;br /&gt;
* [https://www.itri.org.tw/ListStyle.aspx?DisplayStyle=18_content&amp;amp;SiteID=1&amp;amp;MmmID=1036452026061075714&amp;amp;MGID=1220020611016273662 生成式AI的機會與挑戰-工業技術與資訊月刊-出版品-新聞中心-工業技術研究院] 提到「生成式人工智慧（GAI）使用指引的部分內容&lt;br /&gt;
&lt;br /&gt;
非營利組織 (NGO, NPO)&lt;br /&gt;
* [https://netivism.com.tw/guideline 網絡行動科技 AI 使用指引 | 網絡行動科技]&lt;br /&gt;
&lt;br /&gt;
政府機關、政府機構&lt;br /&gt;
* 行政院 (2023). [https://www.nstc.gov.tw/folksonomy/list/c79bf57b-dc94-4aff-8d14-3262b5559cfc?l=ch 行政院及所屬機關（構）使用生成式AI參考指引-國家科學及技術委員會]&amp;lt;ref&amp;gt;[https://www.technice.com.tw/issues/ai/67585/ 政院通過生成式AI參考指引　10大重點依趨勢滾動修正]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 數位發展部 (2025). [https://moda.gov.tw/digital-affairs/digital-service/guide/15002 公部門人工智慧應用參考手冊（草案）｜數位政府相關參考文件 - 數位政府 - 核心業務｜moda — 數位發展部 Ministry of Digital Affairs]&lt;br /&gt;
* 數位發展部 (2026). [https://moda.gov.tw/major-policies/ai/governance/19244 AI 風險分類框架]「依據《人工智慧基本法》規定，推動與國際接軌之「人工智慧風險分類框架」。本框架旨在作為政府跨部會溝通的共同語言，提供一套共通的評估標準。 ...」&lt;br /&gt;
* 文化部 (2025). [https://www.moc.gov.tw/News.aspx?n=9149&amp;amp;sms=16053 文化藝術應用生成式AI指引]&lt;br /&gt;
&lt;br /&gt;
媒體&lt;br /&gt;
* 上下游 News&amp;amp;Market (2024). [https://www.newsmarket.com.tw/mazu-oyster/ch08/ 《上下游》生成式人工智慧（AI）使用指引 | 上下游]&lt;br /&gt;
&lt;br /&gt;
== 相關文章 ==&lt;br /&gt;
* [https://learn.microsoft.com/zh-tw/azure/machine-learning/concept-responsible-ai?view=azureml-api-2 什麼是負責任 AI - Azure Machine Learning | Microsoft Learn]&lt;br /&gt;
* [https://www.microsoft.com/en-us/corporate-responsibility/responsible-ai-transparency-report Microsoft Responsible AI Transparency Report | Microsoft CSR]&lt;br /&gt;
* [https://learn.microsoft.com/en-us/legal/cognitive-services/openai/transparency-note?tabs=text Transparency Note for Azure OpenAI - Azure AI services | Microsoft Learn]&lt;br /&gt;
* [https://ai.google/responsibility/responsible-ai-practices/ Google Responsible AI Practices – Google AI]&lt;br /&gt;
* [[Data privacy in Large Language Models in Mandarin | 大型語言模型的資料隱私政策]]&lt;br /&gt;
&lt;br /&gt;
== 相關關鍵字 ==&lt;br /&gt;
* 可信任 AI 原則&lt;br /&gt;
* 可信賴的 AI&lt;br /&gt;
&lt;br /&gt;
== 相關認證 ==&lt;br /&gt;
* [https://www.ipas.org.tw/AIAP :::經濟部產業人才能力鑑定推動網:::] 工研院推的「專業工程師考試 AI應用規劃師」&lt;br /&gt;
* [https://www.iii.org.tw/zh-TW/news/newsroom/iii-news/eff273d9-5fe8-4239-a5f4-63c828ddc1a7 資策會教研所推出免費「生成式AI能力認證」 助力臺灣培育AI新生代｜本會新聞｜新聞中心｜最新消息｜資策會]&lt;br /&gt;
* [https://aiacademy.tw/genai2025-courses/ 台灣人工智慧學校 2025 生成式 AI 實體課程 比較表 - 台灣人工智慧學校]&lt;br /&gt;
&lt;br /&gt;
== 相關法規 ==&lt;br /&gt;
* 台灣行政院新聞傳播處 (2025-08-28). [https://www.ey.gov.tw/Page/9277F759E41CCD91/5d673d1e-f418-47dc-ab35-a06600f77f07 政院通過「人工智慧基本法」草案 建構AI發展與應用良善環境 打造臺灣成為AI人工智慧島 (行政院全球資訊網-本院一般新聞)]&lt;br /&gt;
* 歐盟 《人工智慧法案》 (歐盟 AI 法案) [https://artificialintelligenceact.eu/ EU Artificial Intelligence Act | Up-to-date developments and analyses of the EU AI Act]&lt;br /&gt;
* 中國 [https://en.wikipedia.org/wiki/Interim_Measures_for_the_Management_of_Generative_AI_Services Interim Measures for the Management of Generative AI Services - Wikipedia] ([https://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm 生成式人工智慧服務管理暫行辦法_中央網路安全和資訊化委員會辦公室])&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Artificial intelligence]]&lt;br /&gt;
[[Category:Generative AI]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Guiding_principles_on_generative_artificial_intelligence_in_Mandarin&amp;diff=26422</id>
		<title>Guiding principles on generative artificial intelligence in Mandarin</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Guiding_principles_on_generative_artificial_intelligence_in_Mandarin&amp;diff=26422"/>
		<updated>2026-08-03T05:52:05Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* 相關法規 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;生成式 AI 的校園、公司或政府機關的使用指引與法規&lt;br /&gt;
&lt;br /&gt;
{{Template:Generative AI Tool in Mandarin}}&lt;br /&gt;
&lt;br /&gt;
{{LanguageSwitcher | content = [[Guiding principles on generative artificial intelligence | English]], [[Guiding principles on generative artificial intelligence in Mandarin | 漢字]] }}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 使用指引 ==&lt;br /&gt;
學校&lt;br /&gt;
* Harvard University Information Technology (n.d.). [https://huit.harvard.edu/ai/guidelines Generative Artificial Intelligence (AI) Guidelines]&lt;br /&gt;
* 臺灣師範大學 (n.d.). [https://ctld.ntnu.edu.tw/generative_ai 國立臺灣師範大學 – 生成式 AI 之學習應用及參考指引 – 國立臺灣師範大學教學發展中心] ([https://web.archive.org/web/20251206170602/https://ctld.ntnu.edu.tw/generative_ai 網頁備份])&lt;br /&gt;
* 臺灣大學 (n.d.). [https://www.dlc.ntu.edu.tw/ai-tools/ 臺大針對生成式 AI 工具之教學因應措施] by 教務處教學發展中心 x 數位學習中心 ([https://web.archive.org/web/20260117130949/https://www.dlc.ntu.edu.tw/ai-tools/ 網頁備份])&lt;br /&gt;
* 臺灣大學 (2023). [http://tul.blog.ntu.edu.tw/archives/32789 如何引用ChatGPT生成內容？ – 國立臺灣大學圖書館參考服務部落格]&lt;br /&gt;
* 清華大學 (2023). [https://curricul.site.nthu.edu.tw/p/404-1208-248357.php?Lang=zh-tw 生成式人工智慧倫理聲明]&lt;br /&gt;
* 臺北科大 (2023). [https://oaa.ntut.edu.tw/p/406-1008-129455,r11.php?Lang=zh-tw 因應生成式 AI 工具之教學參考指引]&lt;br /&gt;
* 政大圖書館 (n.d.). [https://sites.google.com/view/ncculibgenai/basics?authuser=0 政大圖書館生成式AI使用指引]&lt;br /&gt;
&lt;br /&gt;
企業&lt;br /&gt;
* 資策會 (2023). [https://www.iii.org.tw/Publish/DownloadPages_download.aspx?dp_sqno=26 2023企業應具備的AI素養-生成式AI導入指引]&lt;br /&gt;
* 資策會軟體院 (2024). [https://www.iii.org.tw/Publish/DownloadPages_download.aspx?dp_sqno=35 生成式AI企業大腦開發指引]&lt;br /&gt;
* [https://www.itri.org.tw/ListStyle.aspx?DisplayStyle=18_content&amp;amp;SiteID=1&amp;amp;MmmID=1036452026061075714&amp;amp;MGID=1220020611016273662 生成式AI的機會與挑戰-工業技術與資訊月刊-出版品-新聞中心-工業技術研究院] 提到「生成式人工智慧（GAI）使用指引的部分內容&lt;br /&gt;
&lt;br /&gt;
非營利組織 (NGO, NPO)&lt;br /&gt;
* [https://netivism.com.tw/guideline 網絡行動科技 AI 使用指引 | 網絡行動科技]&lt;br /&gt;
&lt;br /&gt;
政府機關、政府機構&lt;br /&gt;
* 行政院 (2023). [https://www.nstc.gov.tw/folksonomy/list/c79bf57b-dc94-4aff-8d14-3262b5559cfc?l=ch 行政院及所屬機關（構）使用生成式AI參考指引-國家科學及技術委員會]&amp;lt;ref&amp;gt;[https://www.technice.com.tw/issues/ai/67585/ 政院通過生成式AI參考指引　10大重點依趨勢滾動修正]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 數位發展部 (2025). [https://moda.gov.tw/digital-affairs/digital-service/guide/15002 公部門人工智慧應用參考手冊（草案）｜數位政府相關參考文件 - 數位政府 - 核心業務｜moda — 數位發展部 Ministry of Digital Affairs]&lt;br /&gt;
* 數位發展部 (2026). [https://moda.gov.tw/major-policies/ai/governance/19244 AI 風險分類框架]「依據《人工智慧基本法》規定，推動與國際接軌之「人工智慧風險分類框架」。本框架旨在作為政府跨部會溝通的共同語言，提供一套共通的評估標準。 ...」&lt;br /&gt;
* 文化部 (2025). [https://www.moc.gov.tw/News.aspx?n=9149&amp;amp;sms=16053 文化藝術應用生成式AI指引]&lt;br /&gt;
&lt;br /&gt;
媒體&lt;br /&gt;
* 上下游 News&amp;amp;Market (2024). [https://www.newsmarket.com.tw/mazu-oyster/ch08/ 《上下游》生成式人工智慧（AI）使用指引 | 上下游]&lt;br /&gt;
&lt;br /&gt;
== 相關文章 ==&lt;br /&gt;
* [https://learn.microsoft.com/zh-tw/azure/machine-learning/concept-responsible-ai?view=azureml-api-2 什麼是負責任 AI - Azure Machine Learning | Microsoft Learn]&lt;br /&gt;
* [https://www.microsoft.com/en-us/corporate-responsibility/responsible-ai-transparency-report Microsoft Responsible AI Transparency Report | Microsoft CSR]&lt;br /&gt;
* [https://learn.microsoft.com/en-us/legal/cognitive-services/openai/transparency-note?tabs=text Transparency Note for Azure OpenAI - Azure AI services | Microsoft Learn]&lt;br /&gt;
* [https://ai.google/responsibility/responsible-ai-practices/ Google Responsible AI Practices – Google AI]&lt;br /&gt;
* [[Data privacy in Large Language Models in Mandarin | 大型語言模型的資料隱私政策]]&lt;br /&gt;
&lt;br /&gt;
== 相關關鍵字 ==&lt;br /&gt;
* 可信任 AI 原則&lt;br /&gt;
* 可信賴的 AI&lt;br /&gt;
&lt;br /&gt;
== 相關認證 ==&lt;br /&gt;
* [https://www.ipas.org.tw/AIAP :::經濟部產業人才能力鑑定推動網:::] 工研院推的「專業工程師考試 AI應用規劃師」&lt;br /&gt;
* [https://www.iii.org.tw/zh-TW/news/newsroom/iii-news/eff273d9-5fe8-4239-a5f4-63c828ddc1a7 資策會教研所推出免費「生成式AI能力認證」 助力臺灣培育AI新生代｜本會新聞｜新聞中心｜最新消息｜資策會]&lt;br /&gt;
* [https://aiacademy.tw/genai2025-courses/ 台灣人工智慧學校 2025 生成式 AI 實體課程 比較表 - 台灣人工智慧學校]&lt;br /&gt;
&lt;br /&gt;
== 相關法規 ==&lt;br /&gt;
* 台灣行政院新聞傳播處 (2025-08-28). [https://www.ey.gov.tw/Page/9277F759E41CCD91/5d673d1e-f418-47dc-ab35-a06600f77f07 政院通過「人工智慧基本法」草案 建構AI發展與應用良善環境 打造臺灣成為AI人工智慧島 (行政院全球資訊網-本院一般新聞)]&lt;br /&gt;
* 歐盟 AI 法案 [https://artificialintelligenceact.eu/ EU Artificial Intelligence Act | Up-to-date developments and analyses of the EU AI Act]&lt;br /&gt;
* 中國 [https://en.wikipedia.org/wiki/Interim_Measures_for_the_Management_of_Generative_AI_Services Interim Measures for the Management of Generative AI Services - Wikipedia] ([https://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm 生成式人工智慧服務管理暫行辦法_中央網路安全和資訊化委員會辦公室])&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Artificial intelligence]]&lt;br /&gt;
[[Category:Generative AI]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=HTTP_request_and_response_data_tool&amp;diff=26421</id>
		<title>HTTP request and response data tool</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=HTTP_request_and_response_data_tool&amp;diff=26421"/>
		<updated>2026-07-31T07:25:10Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt; [[Testing]]&lt;br /&gt;
&lt;br /&gt;
== HTTP request and response data tool ==&lt;br /&gt;
Testing the &amp;lt;span title=&amp;quot;應用程式介面 (Application Programming Interface, API)&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;cursor:help; Border-bottom-style:dotted; Border-bottom-width:thin;&amp;quot; class=&amp;quot;acronym&amp;quot;&amp;gt;API&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; or pressure test.&lt;br /&gt;
&lt;br /&gt;
=== HTTP headers generator ===&lt;br /&gt;
* [[Apache Jmeter]] v. 2.7&amp;lt;ref&amp;gt;[http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf JMeter proxy Step-by-step]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** approach 1: (1) Add config element: HTTP request defaults (2) Add Sampler: HTTP request (3) Add Listener: View results tree (4) Run the test plan&lt;br /&gt;
** approach 2: (1) install unofficial [http://code.google.com/p/jmeter-plugins/ jmeter-plugins] (2) Add Sampler: jp@gc - HTTP Raw Request&amp;lt;ref&amp;gt;[http://code.google.com/p/jmeter-plugins/wiki/RawRequest RawRequest - jmeter-plugins - Every load test needs some sexy features! - Google Project Hosting]&amp;lt;/ref&amp;gt; (3) Add Listener: View results tree (4) Run the test plan&lt;br /&gt;
&lt;br /&gt;
* [http://www.telerik.com/fiddler Fiddler free web debugging proxy] for {{Win}}&lt;br /&gt;
&lt;br /&gt;
* [http://blog.darkthread.net/post-2015-03-12-http-request-with-telnet.aspx 網站除錯小技巧－用TELNET模擬HTTP請求 - 黑暗執行緒]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
telnet localhost 80&lt;br /&gt;
&amp;quot;header content&amp;quot; Enter&lt;br /&gt;
Enter&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=zh-TW Postman] ([https://www.getpostman.com/docs/ documentation]) &amp;amp; [https://chrome.google.com/webstore/detail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo?hl=zh-TW Postman Interceptor] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
=== Display HTTP headers of a web page ===&lt;br /&gt;
* {{Gd}} [https://www.getpostman.com/ Postman | API Development Environment]&lt;br /&gt;
* {{Chrome}}: Press {{kbd | key = F12}} to open the &#039;&#039;&#039;Developer Tools&#039;&#039;&#039; window -&amp;gt; Switch to &#039;&#039;Network&#039;&#039; panel -&amp;gt; Click the &#039;&#039;Headers&#039;&#039; to display the HTTP headers of a web page. (1)Section &#039;&#039;Query String Parameters&#039;&#039; for HTTP GET request (2)Section &#039;&#039;Form Data&#039;&#039; for HTTP POST request.  Further reading: [https://developers.google.com/chrome-developer-tools/docs/network?hl=zh-TW Chrome DevTools — Google Developers]&lt;br /&gt;
* [https://www.mozilla.org/zh-TW/firefox/new/ Firefox]: [https://developer.mozilla.org/en-US/docs/Tools/Web_Console/Opening_the_Web_Console Opening the Web Console - Firefox Developer Tools | MDN] --&amp;gt; Switch to &amp;quot;Network&amp;quot; label --&amp;gt; Click one of URLs --&amp;gt; Show the Headers. (formerly [http://getfirebug.com/ Firebug])&lt;br /&gt;
&lt;br /&gt;
* [http://livehttpheaders.mozdev.org/ LiveHTTPHeaders] for {{Fx}}&lt;br /&gt;
&lt;br /&gt;
* [http://www.ericgiguere.com/articles/masquerading-your-browser.html Masquerading Your Browser]: also offer the tool [http://www.ericgiguere.com/tools/http-header-viewer.html HTTP Header Viewer] {{access | date=2012-05-16}}&lt;br /&gt;
&lt;br /&gt;
* [https://curl.haxx.se/ curl] e.g. Input the command {{kbd | key=&amp;lt;nowiki&amp;gt;curl -L -I &amp;lt;URL&amp;gt;&amp;lt;/nowiki&amp;gt;}}{{access | date=2018-09-20}}&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-L, --location&amp;lt;/nowiki&amp;gt;}} &amp;quot;If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code).&amp;quot; quoted from [https://curl.haxx.se/docs/manpage.html manual].&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-I, --head&amp;lt;/nowiki&amp;gt;}} &amp;quot;Fetch the headers only!&amp;quot; quoted from manual.&lt;br /&gt;
&lt;br /&gt;
* [https://www.gnu.org/software/wget/ Wget - GNU Project - Free Software Foundation] e.g. Input the command {{kbd | key=&amp;lt;nowiki&amp;gt;wget -S --spider &amp;lt;URL&amp;gt;&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[https://www.zyxware.com/articles/2402/viewing-http-headers-using-wget Viewing HTTP Headers using Wget | Zyxware Technologies]&amp;lt;/ref&amp;gt;{{access | date=2018-09-20}}&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-S, --server-response&amp;lt;/nowiki&amp;gt;}} &amp;quot;Print the headers sent by HTTP servers and responses sent by FTP servers.&amp;quot; quoted from manual.&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;--spider&amp;lt;/nowiki&amp;gt;}} &amp;quot;When invoked with this option, Wget will behave as a Web spider, which means that it will not download the pages, just check that they are there.&amp;quot; quoted from manual.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://paw.cloud/ Paw – The most advanced API tool] for {{Mac}}&lt;br /&gt;
&lt;br /&gt;
Example result after executed {{kbd | key=curl}} command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -L -I https://www.google.com&lt;br /&gt;
&lt;br /&gt;
HTTP/2 200&lt;br /&gt;
date: Thu, 20 Sep 2018 02:56:29 GMT&lt;br /&gt;
expires: -1&lt;br /&gt;
cache-control: private, max-age=0&lt;br /&gt;
content-type: text/html; charset=ISO-8859-1&lt;br /&gt;
p3p: CP=&amp;quot;This is not a P3P policy! See g.co/p3phelp for more info.&amp;quot;&lt;br /&gt;
server: gws&lt;br /&gt;
x-xss-protection: 1; mode=block&lt;br /&gt;
x-frame-options: SAMEORIGIN&lt;br /&gt;
set-cookie: 1P_JAR=2018-09-20-02; expires=Sat, 20-Oct-2018 02:56:29 GMT; path=/; domain=.google.com&lt;br /&gt;
set-cookie: NID=139=DXgMIx0L06ZUBLaTUD2J_pqIvfgSEo945An0URyIwGqVf_NOxPcHcaAxhNwNforv-Lw0-m6DSKX-y1wz0EhuC-tdzLHPyWYqLVOdu7VBgjH9spnMr_2MfY79uh05aYuH; expires=Fri, 22-Mar-2019 02:56:29 GMT; path=/; domain=.google.com; HttpOnly&lt;br /&gt;
alt-svc: quic=&amp;quot;:443&amp;quot;; ma=2592000; v=&amp;quot;44,43,39,35&amp;quot;&lt;br /&gt;
accept-ranges: none&lt;br /&gt;
vary: Accept-Encoding&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirect checker ===&lt;br /&gt;
* [https://wheregoes.com/ Link Checker | Redirect Checker - WhereGoes] {{Gd}}&lt;br /&gt;
&lt;br /&gt;
Curl command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -sI -L &amp;quot;https://example.com/&amp;quot; | grep -i &amp;quot;^location:&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command &#039;&#039;&#039;traces the redirect chain of a URL&#039;&#039;&#039;, printing only the destination of each redirect step. Here&#039;s the breakdown:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sI -L &amp;quot;https://example.com/&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt;&#039;&#039;&#039;: a tool for sending HTTP requests&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;-s&amp;lt;/code&amp;gt;&#039;&#039;&#039; (silent): quiet mode, suppresses progress bars and other status info&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt;&#039;&#039;&#039; (capital, &amp;lt;code&amp;gt;--head&amp;lt;/code&amp;gt;): fetches only the &#039;&#039;&#039;HTTP headers&#039;&#039;&#039;, not the page body — faster&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;-L&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&amp;lt;code&amp;gt;--location&amp;lt;/code&amp;gt;): if the server responds with a 3xx redirect status code (like 301, 302, 307), curl will &#039;&#039;&#039;automatically follow&#039;&#039;&#039; the new URL and keep requesting until it reaches the final page (or hits the redirect limit)&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;&amp;quot;https://example.com/&amp;quot;&amp;lt;/code&amp;gt;&#039;&#039;&#039;: the target URL to query&lt;br /&gt;
&lt;br /&gt;
So this sends a HEAD request for each redirect step along the way, and prints all the response headers, which might look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Location: https://www.example.com/&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;| grep -i &amp;quot;^location:&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;&#039;&#039;&#039;: pipes curl&#039;s output into &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;grep -i&amp;lt;/code&amp;gt;&#039;&#039;&#039;: searches text, &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt; means case-insensitive (so it matches both &amp;lt;code&amp;gt;Location:&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;location:&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;&amp;quot;^location:&amp;quot;&amp;lt;/code&amp;gt;&#039;&#039;&#039;: &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt; means &#039;&#039;&#039;start of line&#039;&#039;&#039;, so it only picks lines that &#039;&#039;&#039;begin with&#039;&#039;&#039; &amp;lt;code&amp;gt;location:&amp;lt;/code&amp;gt; — that is, the new destination URL specified by the redirect header&lt;br /&gt;
&lt;br /&gt;
This command will:&lt;br /&gt;
# Send a request to the target URL, fetching only headers&lt;br /&gt;
# Automatically follow any redirects&lt;br /&gt;
# Filter out every &amp;lt;code&amp;gt;Location:&amp;lt;/code&amp;gt; line — i.e., the destination URL of &#039;&#039;&#039;each&#039;&#039;&#039; redirect step&lt;br /&gt;
&lt;br /&gt;
=== other tools ===&lt;br /&gt;
* [[Packet sniffer]]: Wireshark, URL Snooper&lt;br /&gt;
* [https://addons.mozilla.org/en-US/firefox/addon/poster/ Poster][http://code.google.com/p/poster-extension/] for {{Fx}}&lt;br /&gt;
* [http://www.httpwatch.com/ HttpWatch 9.0: HTTP Sniffer] for {{IE}}, {{Fx}} and iPhone&lt;br /&gt;
** Steps to view the POST data: (1)start recording HTTP requests (2)click URL (3)switch the label to &#039;&#039;&#039;POST Data&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
echo&lt;br /&gt;
* [https://httpbin.org/ httpbin.org] &amp;quot;A simple HTTP Request &amp;amp; Response Service.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
web security&lt;br /&gt;
* [https://tools.geekflare.com/tools/x-frame-options-test X-Frame-Options Header Checker Tool] {{access | date=2019-03-06}}&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project OWASP Zed Attack Proxy Project - OWASP] {{access | date=2019-03-06}}&lt;br /&gt;
&lt;br /&gt;
== HTTP &amp;amp; HTTPS Proxy ==&lt;br /&gt;
* [https://mitmproxy.org/ mitmproxy - an interactive HTTPS proxy] ([https://github.com/mitmproxy/mitmproxy/blob/main/LICENSE MIT license] {{Gd}}) on {{Win}}, {{Mac}} &amp;amp; {{Linux}}&amp;lt;ref&amp;gt;[https://docs.mitmproxy.org/stable/overview/installation/ Installation]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://portswigger.net/burp Burp Suite - Application Security Testing Software - PortSwigger]&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.charlesproxy.com/ Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS &amp;amp; SSL Proxy / Reverse Proxy] on {{Mac}}&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.telerik.com/fiddler Fiddler - Web Debugging Proxy - Telerik] on {{Win}}, {{Mac}} &amp;amp; {{Linux}}&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://proxyman.io/ Proxyman · Native, Modern Web Debugging Proxy · Inspect network from Mac, iOS, Android devices with ease]&lt;br /&gt;
&lt;br /&gt;
== Web page compression check ==&lt;br /&gt;
online gzip test &lt;br /&gt;
* [http://www.gidnetwork.com/tools/gzip-test.php GIDZipTest: Web Page Compression (Deflate / Gzip) Test - GIDNetwork]: A simple online web page compression / deflate / gzip test tool&lt;br /&gt;
* [http://www.port80software.com/products/httpzip/ Port80 Software » Products » File Compression for IIS Servers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== related article ==&lt;br /&gt;
* [[Web Ping]]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/List_of_HTTP_status_codes List of HTTP status codes - Wikipedia, the free encyclopedia]&lt;br /&gt;
* [http://stackoverflow.com/questions/3390547/capturing-ajax-requests html - capturing ajax requests - Stack Overflow] {{access | date = 2015-09-01}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Design]]&lt;br /&gt;
[[Category: Programming]]&lt;br /&gt;
[[Category: Data collecting]]&lt;br /&gt;
[[Category: Security]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=HTTP_request_and_response_data_tool&amp;diff=26420</id>
		<title>HTTP request and response data tool</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=HTTP_request_and_response_data_tool&amp;diff=26420"/>
		<updated>2026-07-31T07:24:27Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt; [[Testing]]&lt;br /&gt;
&lt;br /&gt;
== HTTP request and response data tool ==&lt;br /&gt;
Testing the &amp;lt;span title=&amp;quot;應用程式介面 (Application Programming Interface, API)&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;cursor:help; Border-bottom-style:dotted; Border-bottom-width:thin;&amp;quot; class=&amp;quot;acronym&amp;quot;&amp;gt;API&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; or pressure test.&lt;br /&gt;
&lt;br /&gt;
=== HTTP headers generator ===&lt;br /&gt;
* [[Apache Jmeter]] v. 2.7&amp;lt;ref&amp;gt;[http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf JMeter proxy Step-by-step]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** approach 1: (1) Add config element: HTTP request defaults (2) Add Sampler: HTTP request (3) Add Listener: View results tree (4) Run the test plan&lt;br /&gt;
** approach 2: (1) install unofficial [http://code.google.com/p/jmeter-plugins/ jmeter-plugins] (2) Add Sampler: jp@gc - HTTP Raw Request&amp;lt;ref&amp;gt;[http://code.google.com/p/jmeter-plugins/wiki/RawRequest RawRequest - jmeter-plugins - Every load test needs some sexy features! - Google Project Hosting]&amp;lt;/ref&amp;gt; (3) Add Listener: View results tree (4) Run the test plan&lt;br /&gt;
&lt;br /&gt;
* [http://www.telerik.com/fiddler Fiddler free web debugging proxy] for {{Win}}&lt;br /&gt;
&lt;br /&gt;
* [http://blog.darkthread.net/post-2015-03-12-http-request-with-telnet.aspx 網站除錯小技巧－用TELNET模擬HTTP請求 - 黑暗執行緒]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
telnet localhost 80&lt;br /&gt;
&amp;quot;header content&amp;quot; Enter&lt;br /&gt;
Enter&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=zh-TW Postman] ([https://www.getpostman.com/docs/ documentation]) &amp;amp; [https://chrome.google.com/webstore/detail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo?hl=zh-TW Postman Interceptor] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
=== Display HTTP headers of a web page ===&lt;br /&gt;
* {{Gd}} [https://www.getpostman.com/ Postman | API Development Environment]&lt;br /&gt;
* {{Chrome}}: Press {{kbd | key = F12}} to open the &#039;&#039;&#039;Developer Tools&#039;&#039;&#039; window -&amp;gt; Switch to &#039;&#039;Network&#039;&#039; panel -&amp;gt; Click the &#039;&#039;Headers&#039;&#039; to display the HTTP headers of a web page. (1)Section &#039;&#039;Query String Parameters&#039;&#039; for HTTP GET request (2)Section &#039;&#039;Form Data&#039;&#039; for HTTP POST request.  Further reading: [https://developers.google.com/chrome-developer-tools/docs/network?hl=zh-TW Chrome DevTools — Google Developers]&lt;br /&gt;
* [https://www.mozilla.org/zh-TW/firefox/new/ Firefox]: [https://developer.mozilla.org/en-US/docs/Tools/Web_Console/Opening_the_Web_Console Opening the Web Console - Firefox Developer Tools | MDN] --&amp;gt; Switch to &amp;quot;Network&amp;quot; label --&amp;gt; Click one of URLs --&amp;gt; Show the Headers. (formerly [http://getfirebug.com/ Firebug])&lt;br /&gt;
&lt;br /&gt;
* [http://livehttpheaders.mozdev.org/ LiveHTTPHeaders] for {{Fx}}&lt;br /&gt;
&lt;br /&gt;
* [http://www.ericgiguere.com/articles/masquerading-your-browser.html Masquerading Your Browser]: also offer the tool [http://www.ericgiguere.com/tools/http-header-viewer.html HTTP Header Viewer] {{access | date=2012-05-16}}&lt;br /&gt;
&lt;br /&gt;
* [https://curl.haxx.se/ curl] e.g. Input the command {{kbd | key=&amp;lt;nowiki&amp;gt;curl -L -I &amp;lt;URL&amp;gt;&amp;lt;/nowiki&amp;gt;}}{{access | date=2018-09-20}}&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-L, --location&amp;lt;/nowiki&amp;gt;}} &amp;quot;If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code).&amp;quot; quoted from [https://curl.haxx.se/docs/manpage.html manual].&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-I, --head&amp;lt;/nowiki&amp;gt;}} &amp;quot;Fetch the headers only!&amp;quot; quoted from manual.&lt;br /&gt;
&lt;br /&gt;
* [https://www.gnu.org/software/wget/ Wget - GNU Project - Free Software Foundation] e.g. Input the command {{kbd | key=&amp;lt;nowiki&amp;gt;wget -S --spider &amp;lt;URL&amp;gt;&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[https://www.zyxware.com/articles/2402/viewing-http-headers-using-wget Viewing HTTP Headers using Wget | Zyxware Technologies]&amp;lt;/ref&amp;gt;{{access | date=2018-09-20}}&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-S, --server-response&amp;lt;/nowiki&amp;gt;}} &amp;quot;Print the headers sent by HTTP servers and responses sent by FTP servers.&amp;quot; quoted from manual.&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;--spider&amp;lt;/nowiki&amp;gt;}} &amp;quot;When invoked with this option, Wget will behave as a Web spider, which means that it will not download the pages, just check that they are there.&amp;quot; quoted from manual.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://paw.cloud/ Paw – The most advanced API tool] for {{Mac}}&lt;br /&gt;
&lt;br /&gt;
Example result after executed {{kbd | key=curl}} command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -L -I https://www.google.com&lt;br /&gt;
&lt;br /&gt;
HTTP/2 200&lt;br /&gt;
date: Thu, 20 Sep 2018 02:56:29 GMT&lt;br /&gt;
expires: -1&lt;br /&gt;
cache-control: private, max-age=0&lt;br /&gt;
content-type: text/html; charset=ISO-8859-1&lt;br /&gt;
p3p: CP=&amp;quot;This is not a P3P policy! See g.co/p3phelp for more info.&amp;quot;&lt;br /&gt;
server: gws&lt;br /&gt;
x-xss-protection: 1; mode=block&lt;br /&gt;
x-frame-options: SAMEORIGIN&lt;br /&gt;
set-cookie: 1P_JAR=2018-09-20-02; expires=Sat, 20-Oct-2018 02:56:29 GMT; path=/; domain=.google.com&lt;br /&gt;
set-cookie: NID=139=DXgMIx0L06ZUBLaTUD2J_pqIvfgSEo945An0URyIwGqVf_NOxPcHcaAxhNwNforv-Lw0-m6DSKX-y1wz0EhuC-tdzLHPyWYqLVOdu7VBgjH9spnMr_2MfY79uh05aYuH; expires=Fri, 22-Mar-2019 02:56:29 GMT; path=/; domain=.google.com; HttpOnly&lt;br /&gt;
alt-svc: quic=&amp;quot;:443&amp;quot;; ma=2592000; v=&amp;quot;44,43,39,35&amp;quot;&lt;br /&gt;
accept-ranges: none&lt;br /&gt;
vary: Accept-Encoding&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirect checker ===&lt;br /&gt;
* [https://wheregoes.com/ Link Checker | Redirect Checker - WhereGoes] {{Gd}}&lt;br /&gt;
&lt;br /&gt;
Curl command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -sI -L &amp;quot;https://example.com/&amp;quot; | grep -i &amp;quot;^location:&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command &#039;&#039;&#039;traces the redirect chain of a URL&#039;&#039;&#039;, printing only the destination of each redirect step. Here&#039;s the breakdown:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -sI -L &amp;quot;https://example.com/&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt;&#039;&#039;&#039;: a tool for sending HTTP requests&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;-s&amp;lt;/code&amp;gt;&#039;&#039;&#039; (silent): quiet mode, suppresses progress bars and other status info&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;-I&amp;lt;/code&amp;gt;&#039;&#039;&#039; (capital, &amp;lt;code&amp;gt;--head&amp;lt;/code&amp;gt;): fetches only the &#039;&#039;&#039;HTTP headers&#039;&#039;&#039;, not the page body — faster&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;-L&amp;lt;/code&amp;gt;&#039;&#039;&#039; (&amp;lt;code&amp;gt;--location&amp;lt;/code&amp;gt;): if the server responds with a 3xx redirect status code (like 301, 302, 307), curl will &#039;&#039;&#039;automatically follow&#039;&#039;&#039; the new URL and keep requesting until it reaches the final page (or hits the redirect limit)&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;&amp;quot;https://example.com/&amp;quot;&amp;lt;/code&amp;gt;&#039;&#039;&#039;: the target URL to query&lt;br /&gt;
&lt;br /&gt;
So this sends a HEAD request for each redirect step along the way, and prints all the response headers, which might look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP/1.1 301 Moved Permanently&lt;br /&gt;
Location: https://www.example.com/&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;| grep -i &amp;quot;^location:&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;&#039;&#039;&#039;: pipes curl&#039;s output into &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;grep -i&amp;lt;/code&amp;gt;&#039;&#039;&#039;: searches text, &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt; means case-insensitive (so it matches both &amp;lt;code&amp;gt;Location:&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;location:&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;code&amp;gt;&amp;quot;^location:&amp;quot;&amp;lt;/code&amp;gt;&#039;&#039;&#039;: &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt; means &#039;&#039;&#039;start of line&#039;&#039;&#039;, so it only picks lines that &#039;&#039;&#039;begin with&#039;&#039;&#039; &amp;lt;code&amp;gt;location:&amp;lt;/code&amp;gt; — that is, the new destination URL specified by the redirect header&lt;br /&gt;
&lt;br /&gt;
This command will:&lt;br /&gt;
# Send a request to the target URL, fetching only headers&lt;br /&gt;
# Automatically follow any redirects&lt;br /&gt;
# Filter out every &amp;lt;code&amp;gt;Location:&amp;lt;/code&amp;gt; line — i.e., the destination URL of &#039;&#039;&#039;each&#039;&#039;&#039; redirect step&lt;br /&gt;
&lt;br /&gt;
=== other tools ===&lt;br /&gt;
* [[Packet sniffer]]: Wireshark, URL Snooper&lt;br /&gt;
* [https://addons.mozilla.org/en-US/firefox/addon/poster/ Poster][http://code.google.com/p/poster-extension/] for {{Fx}}&lt;br /&gt;
* [http://www.httpwatch.com/ HttpWatch 9.0: HTTP Sniffer] for {{IE}}, {{Fx}} and iPhone&lt;br /&gt;
** Steps to view the POST data: (1)start recording HTTP requests (2)click URL (3)switch the label to &#039;&#039;&#039;POST Data&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
echo&lt;br /&gt;
* [https://httpbin.org/ httpbin.org] &amp;quot;A simple HTTP Request &amp;amp; Response Service.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
web security&lt;br /&gt;
* [https://tools.geekflare.com/tools/x-frame-options-test X-Frame-Options Header Checker Tool] {{access | date=2019-03-06}}&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project OWASP Zed Attack Proxy Project - OWASP] {{access | date=2019-03-06}}&lt;br /&gt;
&lt;br /&gt;
== HTTP &amp;amp; HTTPS Proxy ==&lt;br /&gt;
* [https://mitmproxy.org/ mitmproxy - an interactive HTTPS proxy] ([https://github.com/mitmproxy/mitmproxy/blob/main/LICENSE MIT license] {{Gd}}) on {{Win}}, {{Mac}} &amp;amp; {{Linux}}&amp;lt;ref&amp;gt;[https://docs.mitmproxy.org/stable/overview/installation/ Installation]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://portswigger.net/burp Burp Suite - Application Security Testing Software - PortSwigger]&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.charlesproxy.com/ Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS &amp;amp; SSL Proxy / Reverse Proxy] on {{Mac}}&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.telerik.com/fiddler Fiddler - Web Debugging Proxy - Telerik] on {{Win}}, {{Mac}} &amp;amp; {{Linux}}&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://proxyman.io/ Proxyman · Native, Modern Web Debugging Proxy · Inspect network from Mac, iOS, Android devices with ease]&lt;br /&gt;
&lt;br /&gt;
== Web page compression check ==&lt;br /&gt;
online gzip test &lt;br /&gt;
* [http://www.gidnetwork.com/tools/gzip-test.php GIDZipTest: Web Page Compression (Deflate / Gzip) Test - GIDNetwork]: A simple online web page compression / deflate / gzip test tool&lt;br /&gt;
* [http://www.port80software.com/products/httpzip/ Port80 Software » Products » File Compression for IIS Servers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== related article ==&lt;br /&gt;
* [[Web Ping]]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/List_of_HTTP_status_codes List of HTTP status codes - Wikipedia, the free encyclopedia]&lt;br /&gt;
* [http://stackoverflow.com/questions/3390547/capturing-ajax-requests html - capturing ajax requests - Stack Overflow] {{access | date = 2015-09-01}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Data collecting]]&lt;br /&gt;
[[Category:Security]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=HTTP_request_and_response_data_tool&amp;diff=26419</id>
		<title>HTTP request and response data tool</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=HTTP_request_and_response_data_tool&amp;diff=26419"/>
		<updated>2026-07-31T07:19:38Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Redirect checker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt; [[Testing]]&lt;br /&gt;
&lt;br /&gt;
== HTTP request and response data tool ==&lt;br /&gt;
Testing the &amp;lt;span title=&amp;quot;應用程式介面 (Application Programming Interface, API)&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;cursor:help; Border-bottom-style:dotted; Border-bottom-width:thin;&amp;quot; class=&amp;quot;acronym&amp;quot;&amp;gt;API&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; or pressure test.&lt;br /&gt;
&lt;br /&gt;
=== HTTP headers generator ===&lt;br /&gt;
* [[Apache Jmeter]] v. 2.7&amp;lt;ref&amp;gt;[http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf JMeter proxy Step-by-step]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** approach 1: (1) Add config element: HTTP request defaults (2) Add Sampler: HTTP request (3) Add Listener: View results tree (4) Run the test plan&lt;br /&gt;
** approach 2: (1) install unofficial [http://code.google.com/p/jmeter-plugins/ jmeter-plugins] (2) Add Sampler: jp@gc - HTTP Raw Request&amp;lt;ref&amp;gt;[http://code.google.com/p/jmeter-plugins/wiki/RawRequest RawRequest - jmeter-plugins - Every load test needs some sexy features! - Google Project Hosting]&amp;lt;/ref&amp;gt; (3) Add Listener: View results tree (4) Run the test plan&lt;br /&gt;
&lt;br /&gt;
* [http://www.telerik.com/fiddler Fiddler free web debugging proxy] for {{Win}}&lt;br /&gt;
&lt;br /&gt;
* [http://blog.darkthread.net/post-2015-03-12-http-request-with-telnet.aspx 網站除錯小技巧－用TELNET模擬HTTP請求 - 黑暗執行緒]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
telnet localhost 80&lt;br /&gt;
&amp;quot;header content&amp;quot; Enter&lt;br /&gt;
Enter&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=zh-TW Postman] ([https://www.getpostman.com/docs/ documentation]) &amp;amp; [https://chrome.google.com/webstore/detail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo?hl=zh-TW Postman Interceptor] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
=== Display HTTP headers of a web page ===&lt;br /&gt;
* {{Gd}} [https://www.getpostman.com/ Postman | API Development Environment]&lt;br /&gt;
* {{Chrome}}: Press {{kbd | key = F12}} to open the &#039;&#039;&#039;Developer Tools&#039;&#039;&#039; window -&amp;gt; Switch to &#039;&#039;Network&#039;&#039; panel -&amp;gt; Click the &#039;&#039;Headers&#039;&#039; to display the HTTP headers of a web page. (1)Section &#039;&#039;Query String Parameters&#039;&#039; for HTTP GET request (2)Section &#039;&#039;Form Data&#039;&#039; for HTTP POST request.  Further reading: [https://developers.google.com/chrome-developer-tools/docs/network?hl=zh-TW Chrome DevTools — Google Developers]&lt;br /&gt;
* [https://www.mozilla.org/zh-TW/firefox/new/ Firefox]: [https://developer.mozilla.org/en-US/docs/Tools/Web_Console/Opening_the_Web_Console Opening the Web Console - Firefox Developer Tools | MDN] --&amp;gt; Switch to &amp;quot;Network&amp;quot; label --&amp;gt; Click one of URLs --&amp;gt; Show the Headers. (formerly [http://getfirebug.com/ Firebug])&lt;br /&gt;
&lt;br /&gt;
* [http://livehttpheaders.mozdev.org/ LiveHTTPHeaders] for {{Fx}}&lt;br /&gt;
&lt;br /&gt;
* [http://www.ericgiguere.com/articles/masquerading-your-browser.html Masquerading Your Browser]: also offer the tool [http://www.ericgiguere.com/tools/http-header-viewer.html HTTP Header Viewer] {{access | date=2012-05-16}}&lt;br /&gt;
&lt;br /&gt;
* [https://curl.haxx.se/ curl] e.g. Input the command {{kbd | key=&amp;lt;nowiki&amp;gt;curl -L -I &amp;lt;URL&amp;gt;&amp;lt;/nowiki&amp;gt;}}{{access | date=2018-09-20}}&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-L, --location&amp;lt;/nowiki&amp;gt;}} &amp;quot;If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code).&amp;quot; quoted from [https://curl.haxx.se/docs/manpage.html manual].&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-I, --head&amp;lt;/nowiki&amp;gt;}} &amp;quot;Fetch the headers only!&amp;quot; quoted from manual.&lt;br /&gt;
&lt;br /&gt;
* [https://www.gnu.org/software/wget/ Wget - GNU Project - Free Software Foundation] e.g. Input the command {{kbd | key=&amp;lt;nowiki&amp;gt;wget -S --spider &amp;lt;URL&amp;gt;&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[https://www.zyxware.com/articles/2402/viewing-http-headers-using-wget Viewing HTTP Headers using Wget | Zyxware Technologies]&amp;lt;/ref&amp;gt;{{access | date=2018-09-20}}&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-S, --server-response&amp;lt;/nowiki&amp;gt;}} &amp;quot;Print the headers sent by HTTP servers and responses sent by FTP servers.&amp;quot; quoted from manual.&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;--spider&amp;lt;/nowiki&amp;gt;}} &amp;quot;When invoked with this option, Wget will behave as a Web spider, which means that it will not download the pages, just check that they are there.&amp;quot; quoted from manual.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://paw.cloud/ Paw – The most advanced API tool] for {{Mac}}&lt;br /&gt;
&lt;br /&gt;
Example result after executed {{kbd | key=curl}} command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -L -I https://www.google.com&lt;br /&gt;
&lt;br /&gt;
HTTP/2 200&lt;br /&gt;
date: Thu, 20 Sep 2018 02:56:29 GMT&lt;br /&gt;
expires: -1&lt;br /&gt;
cache-control: private, max-age=0&lt;br /&gt;
content-type: text/html; charset=ISO-8859-1&lt;br /&gt;
p3p: CP=&amp;quot;This is not a P3P policy! See g.co/p3phelp for more info.&amp;quot;&lt;br /&gt;
server: gws&lt;br /&gt;
x-xss-protection: 1; mode=block&lt;br /&gt;
x-frame-options: SAMEORIGIN&lt;br /&gt;
set-cookie: 1P_JAR=2018-09-20-02; expires=Sat, 20-Oct-2018 02:56:29 GMT; path=/; domain=.google.com&lt;br /&gt;
set-cookie: NID=139=DXgMIx0L06ZUBLaTUD2J_pqIvfgSEo945An0URyIwGqVf_NOxPcHcaAxhNwNforv-Lw0-m6DSKX-y1wz0EhuC-tdzLHPyWYqLVOdu7VBgjH9spnMr_2MfY79uh05aYuH; expires=Fri, 22-Mar-2019 02:56:29 GMT; path=/; domain=.google.com; HttpOnly&lt;br /&gt;
alt-svc: quic=&amp;quot;:443&amp;quot;; ma=2592000; v=&amp;quot;44,43,39,35&amp;quot;&lt;br /&gt;
accept-ranges: none&lt;br /&gt;
vary: Accept-Encoding&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirect checker ===&lt;br /&gt;
* [https://wheregoes.com/ Link Checker | Redirect Checker - WhereGoes] {{Gd}}&lt;br /&gt;
&lt;br /&gt;
Curl command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -sI -L &amp;quot;https://example.com/&amp;quot; | grep -i &amp;quot;^location:&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== other tools ===&lt;br /&gt;
* [[Packet sniffer]]: Wireshark, URL Snooper&lt;br /&gt;
* [https://addons.mozilla.org/en-US/firefox/addon/poster/ Poster][http://code.google.com/p/poster-extension/] for {{Fx}}&lt;br /&gt;
* [http://www.httpwatch.com/ HttpWatch 9.0: HTTP Sniffer] for {{IE}}, {{Fx}} and iPhone&lt;br /&gt;
** Steps to view the POST data: (1)start recording HTTP requests (2)click URL (3)switch the label to &#039;&#039;&#039;POST Data&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
echo&lt;br /&gt;
* [https://httpbin.org/ httpbin.org] &amp;quot;A simple HTTP Request &amp;amp; Response Service.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
web security&lt;br /&gt;
* [https://tools.geekflare.com/tools/x-frame-options-test X-Frame-Options Header Checker Tool] {{access | date=2019-03-06}}&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project OWASP Zed Attack Proxy Project - OWASP] {{access | date=2019-03-06}}&lt;br /&gt;
&lt;br /&gt;
== HTTP &amp;amp; HTTPS Proxy ==&lt;br /&gt;
* [https://mitmproxy.org/ mitmproxy - an interactive HTTPS proxy] ([https://github.com/mitmproxy/mitmproxy/blob/main/LICENSE MIT license] {{Gd}}) on {{Win}}, {{Mac}} &amp;amp; {{Linux}}&amp;lt;ref&amp;gt;[https://docs.mitmproxy.org/stable/overview/installation/ Installation]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://portswigger.net/burp Burp Suite - Application Security Testing Software - PortSwigger]&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.charlesproxy.com/ Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS &amp;amp; SSL Proxy / Reverse Proxy] on {{Mac}}&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.telerik.com/fiddler Fiddler - Web Debugging Proxy - Telerik] on {{Win}}, {{Mac}} &amp;amp; {{Linux}}&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://proxyman.io/ Proxyman · Native, Modern Web Debugging Proxy · Inspect network from Mac, iOS, Android devices with ease]&lt;br /&gt;
&lt;br /&gt;
== Web page compression check ==&lt;br /&gt;
online gzip test &lt;br /&gt;
* [http://www.gidnetwork.com/tools/gzip-test.php GIDZipTest: Web Page Compression (Deflate / Gzip) Test - GIDNetwork]: A simple online web page compression / deflate / gzip test tool&lt;br /&gt;
* [http://www.port80software.com/products/httpzip/ Port80 Software » Products » File Compression for IIS Servers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== related article ==&lt;br /&gt;
* [[Web Ping]]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/List_of_HTTP_status_codes List of HTTP status codes - Wikipedia, the free encyclopedia]&lt;br /&gt;
* [http://stackoverflow.com/questions/3390547/capturing-ajax-requests html - capturing ajax requests - Stack Overflow] {{access | date = 2015-09-01}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Data collecting]]&lt;br /&gt;
[[Category:Security]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=HTTP_request_and_response_data_tool&amp;diff=26418</id>
		<title>HTTP request and response data tool</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=HTTP_request_and_response_data_tool&amp;diff=26418"/>
		<updated>2026-07-31T07:18:38Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Display HTTP headers of a web page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt; [[Testing]]&lt;br /&gt;
&lt;br /&gt;
== HTTP request and response data tool ==&lt;br /&gt;
Testing the &amp;lt;span title=&amp;quot;應用程式介面 (Application Programming Interface, API)&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;cursor:help; Border-bottom-style:dotted; Border-bottom-width:thin;&amp;quot; class=&amp;quot;acronym&amp;quot;&amp;gt;API&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; or pressure test.&lt;br /&gt;
&lt;br /&gt;
=== HTTP headers generator ===&lt;br /&gt;
* [[Apache Jmeter]] v. 2.7&amp;lt;ref&amp;gt;[http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf JMeter proxy Step-by-step]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** approach 1: (1) Add config element: HTTP request defaults (2) Add Sampler: HTTP request (3) Add Listener: View results tree (4) Run the test plan&lt;br /&gt;
** approach 2: (1) install unofficial [http://code.google.com/p/jmeter-plugins/ jmeter-plugins] (2) Add Sampler: jp@gc - HTTP Raw Request&amp;lt;ref&amp;gt;[http://code.google.com/p/jmeter-plugins/wiki/RawRequest RawRequest - jmeter-plugins - Every load test needs some sexy features! - Google Project Hosting]&amp;lt;/ref&amp;gt; (3) Add Listener: View results tree (4) Run the test plan&lt;br /&gt;
&lt;br /&gt;
* [http://www.telerik.com/fiddler Fiddler free web debugging proxy] for {{Win}}&lt;br /&gt;
&lt;br /&gt;
* [http://blog.darkthread.net/post-2015-03-12-http-request-with-telnet.aspx 網站除錯小技巧－用TELNET模擬HTTP請求 - 黑暗執行緒]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
telnet localhost 80&lt;br /&gt;
&amp;quot;header content&amp;quot; Enter&lt;br /&gt;
Enter&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=zh-TW Postman] ([https://www.getpostman.com/docs/ documentation]) &amp;amp; [https://chrome.google.com/webstore/detail/postman-interceptor/aicmkgpgakddgnaphhhpliifpcfhicfo?hl=zh-TW Postman Interceptor] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
=== Display HTTP headers of a web page ===&lt;br /&gt;
* {{Gd}} [https://www.getpostman.com/ Postman | API Development Environment]&lt;br /&gt;
* {{Chrome}}: Press {{kbd | key = F12}} to open the &#039;&#039;&#039;Developer Tools&#039;&#039;&#039; window -&amp;gt; Switch to &#039;&#039;Network&#039;&#039; panel -&amp;gt; Click the &#039;&#039;Headers&#039;&#039; to display the HTTP headers of a web page. (1)Section &#039;&#039;Query String Parameters&#039;&#039; for HTTP GET request (2)Section &#039;&#039;Form Data&#039;&#039; for HTTP POST request.  Further reading: [https://developers.google.com/chrome-developer-tools/docs/network?hl=zh-TW Chrome DevTools — Google Developers]&lt;br /&gt;
* [https://www.mozilla.org/zh-TW/firefox/new/ Firefox]: [https://developer.mozilla.org/en-US/docs/Tools/Web_Console/Opening_the_Web_Console Opening the Web Console - Firefox Developer Tools | MDN] --&amp;gt; Switch to &amp;quot;Network&amp;quot; label --&amp;gt; Click one of URLs --&amp;gt; Show the Headers. (formerly [http://getfirebug.com/ Firebug])&lt;br /&gt;
&lt;br /&gt;
* [http://livehttpheaders.mozdev.org/ LiveHTTPHeaders] for {{Fx}}&lt;br /&gt;
&lt;br /&gt;
* [http://www.ericgiguere.com/articles/masquerading-your-browser.html Masquerading Your Browser]: also offer the tool [http://www.ericgiguere.com/tools/http-header-viewer.html HTTP Header Viewer] {{access | date=2012-05-16}}&lt;br /&gt;
&lt;br /&gt;
* [https://curl.haxx.se/ curl] e.g. Input the command {{kbd | key=&amp;lt;nowiki&amp;gt;curl -L -I &amp;lt;URL&amp;gt;&amp;lt;/nowiki&amp;gt;}}{{access | date=2018-09-20}}&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-L, --location&amp;lt;/nowiki&amp;gt;}} &amp;quot;If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code).&amp;quot; quoted from [https://curl.haxx.se/docs/manpage.html manual].&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-I, --head&amp;lt;/nowiki&amp;gt;}} &amp;quot;Fetch the headers only!&amp;quot; quoted from manual.&lt;br /&gt;
&lt;br /&gt;
* [https://www.gnu.org/software/wget/ Wget - GNU Project - Free Software Foundation] e.g. Input the command {{kbd | key=&amp;lt;nowiki&amp;gt;wget -S --spider &amp;lt;URL&amp;gt;&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[https://www.zyxware.com/articles/2402/viewing-http-headers-using-wget Viewing HTTP Headers using Wget | Zyxware Technologies]&amp;lt;/ref&amp;gt;{{access | date=2018-09-20}}&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;-S, --server-response&amp;lt;/nowiki&amp;gt;}} &amp;quot;Print the headers sent by HTTP servers and responses sent by FTP servers.&amp;quot; quoted from manual.&lt;br /&gt;
** Option {{kbd | key=&amp;lt;nowiki&amp;gt;--spider&amp;lt;/nowiki&amp;gt;}} &amp;quot;When invoked with this option, Wget will behave as a Web spider, which means that it will not download the pages, just check that they are there.&amp;quot; quoted from manual.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://paw.cloud/ Paw – The most advanced API tool] for {{Mac}}&lt;br /&gt;
&lt;br /&gt;
Example result after executed {{kbd | key=curl}} command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -L -I https://www.google.com&lt;br /&gt;
&lt;br /&gt;
HTTP/2 200&lt;br /&gt;
date: Thu, 20 Sep 2018 02:56:29 GMT&lt;br /&gt;
expires: -1&lt;br /&gt;
cache-control: private, max-age=0&lt;br /&gt;
content-type: text/html; charset=ISO-8859-1&lt;br /&gt;
p3p: CP=&amp;quot;This is not a P3P policy! See g.co/p3phelp for more info.&amp;quot;&lt;br /&gt;
server: gws&lt;br /&gt;
x-xss-protection: 1; mode=block&lt;br /&gt;
x-frame-options: SAMEORIGIN&lt;br /&gt;
set-cookie: 1P_JAR=2018-09-20-02; expires=Sat, 20-Oct-2018 02:56:29 GMT; path=/; domain=.google.com&lt;br /&gt;
set-cookie: NID=139=DXgMIx0L06ZUBLaTUD2J_pqIvfgSEo945An0URyIwGqVf_NOxPcHcaAxhNwNforv-Lw0-m6DSKX-y1wz0EhuC-tdzLHPyWYqLVOdu7VBgjH9spnMr_2MfY79uh05aYuH; expires=Fri, 22-Mar-2019 02:56:29 GMT; path=/; domain=.google.com; HttpOnly&lt;br /&gt;
alt-svc: quic=&amp;quot;:443&amp;quot;; ma=2592000; v=&amp;quot;44,43,39,35&amp;quot;&lt;br /&gt;
accept-ranges: none&lt;br /&gt;
vary: Accept-Encoding&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Redirect checker ===&lt;br /&gt;
* [https://wheregoes.com/ Link Checker | Redirect Checker - WhereGoes] {{Gd}}&lt;br /&gt;
&lt;br /&gt;
=== other tools ===&lt;br /&gt;
* [[Packet sniffer]]: Wireshark, URL Snooper&lt;br /&gt;
* [https://addons.mozilla.org/en-US/firefox/addon/poster/ Poster][http://code.google.com/p/poster-extension/] for {{Fx}}&lt;br /&gt;
* [http://www.httpwatch.com/ HttpWatch 9.0: HTTP Sniffer] for {{IE}}, {{Fx}} and iPhone&lt;br /&gt;
** Steps to view the POST data: (1)start recording HTTP requests (2)click URL (3)switch the label to &#039;&#039;&#039;POST Data&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
echo&lt;br /&gt;
* [https://httpbin.org/ httpbin.org] &amp;quot;A simple HTTP Request &amp;amp; Response Service.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
web security&lt;br /&gt;
* [https://tools.geekflare.com/tools/x-frame-options-test X-Frame-Options Header Checker Tool] {{access | date=2019-03-06}}&lt;br /&gt;
* [https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project OWASP Zed Attack Proxy Project - OWASP] {{access | date=2019-03-06}}&lt;br /&gt;
&lt;br /&gt;
== HTTP &amp;amp; HTTPS Proxy ==&lt;br /&gt;
* [https://mitmproxy.org/ mitmproxy - an interactive HTTPS proxy] ([https://github.com/mitmproxy/mitmproxy/blob/main/LICENSE MIT license] {{Gd}}) on {{Win}}, {{Mac}} &amp;amp; {{Linux}}&amp;lt;ref&amp;gt;[https://docs.mitmproxy.org/stable/overview/installation/ Installation]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [https://portswigger.net/burp Burp Suite - Application Security Testing Software - PortSwigger]&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.charlesproxy.com/ Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS &amp;amp; SSL Proxy / Reverse Proxy] on {{Mac}}&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.telerik.com/fiddler Fiddler - Web Debugging Proxy - Telerik] on {{Win}}, {{Mac}} &amp;amp; {{Linux}}&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://proxyman.io/ Proxyman · Native, Modern Web Debugging Proxy · Inspect network from Mac, iOS, Android devices with ease]&lt;br /&gt;
&lt;br /&gt;
== Web page compression check ==&lt;br /&gt;
online gzip test &lt;br /&gt;
* [http://www.gidnetwork.com/tools/gzip-test.php GIDZipTest: Web Page Compression (Deflate / Gzip) Test - GIDNetwork]: A simple online web page compression / deflate / gzip test tool&lt;br /&gt;
* [http://www.port80software.com/products/httpzip/ Port80 Software » Products » File Compression for IIS Servers]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== related article ==&lt;br /&gt;
* [[Web Ping]]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/List_of_HTTP_status_codes List of HTTP status codes - Wikipedia, the free encyclopedia]&lt;br /&gt;
* [http://stackoverflow.com/questions/3390547/capturing-ajax-requests html - capturing ajax requests - Stack Overflow] {{access | date = 2015-09-01}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Data collecting]]&lt;br /&gt;
[[Category:Security]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=I_need_inspiration&amp;diff=26417</id>
		<title>I need inspiration</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=I_need_inspiration&amp;diff=26417"/>
		<updated>2026-07-31T04:06:21Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I need inspiration for design purpose&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Classification ==&lt;br /&gt;
=== Show cases / UI / APP design ===&lt;br /&gt;
* [https://dribbble.com/shots?sort=views Popular show cases on dribbble.com]: &amp;quot;Web designers, graphic designers, illustrators, icon artists, typographers, logo designers, and other creative types share small screenshots (shots) that show their work, process, and current projects.&amp;quot; &amp;lt;ref&amp;gt;[http://dribbble.com/site/about Dribbble - About]&amp;lt;/ref&amp;gt; {{access | date = 2023-01-04}}&lt;br /&gt;
** 「專門為平面設計師和創意專業人士設立。這個網站提供了一個展示和發現創意作品的空間，涵蓋了各種設計類別，如網頁設計、品牌、動畫和插畫等。可以按顏色、標籤和時間篩選內容，方便使用者發現特定的設計風格或趨勢。Dribbble 也為設計師們提供了一個交流想法、分享作品和相互獲得靈感的空間。」Made with GPT-4 🤖 &lt;br /&gt;
* [https://www.behance.net/ Behance 在线作品集]: [https://www.behance.net/search?field=132&amp;amp;content=projects&amp;amp;sort=appreciations&amp;amp;time=week UI/UX projects on Behance] {{access | date = 2016-06-20}}&lt;br /&gt;
** 「Adobe 旗下的創意作品集平台，涵蓋平面設計、插畫、攝影、UI/UX、動態影像等多元領域。使用者可以建立完整的專案作品集、追蹤喜愛的創作者，並依熱門程度、時間或領域篩選作品，是全球設計師展示與求職的重要平台之一。」Made with Claude 🤖&lt;br /&gt;
* [http://www.site.uplabs.com/ Web design and development, Daily – SiteUp] {{access | date = 2016-02-29}}&lt;br /&gt;
** 「每日更新的網頁設計與開發資源分享平台，內容包含 UI 素材、程式碼片段、設計靈感等，適合開發者與設計師快速獲取當日精選的實用資源與趨勢動態。」Made with Claude 🤖&lt;br /&gt;
* [http://www.heyshow.com/gallery/ 設計畫廊 | 黑秀網 HeyShow.com] {{access | date = 2015-12-10}}&lt;br /&gt;
** 「台灣早期具代表性的華文設計社群網站，畫廊區收錄插畫、平面設計、攝影等各類創作作品，讓設計師與創作者能夠展示作品集、交流創作心得，並認識台灣本地的設計圈生態。」Made with Claude 🤖&lt;br /&gt;
* [http://woofeng.cn/inspiration/web/ 黄蜂网woofeng.cn] {{access | date = 2016-09-02}}&lt;br /&gt;
** 「中國的設計靈感與素材分享網站，網頁設計欄目彙整大量國內外優秀網站作品，並延伸提供平面、UI、攝影等相關教學與資源下載，是簡體中文使用者常用的設計參考站台之一。」Made with Claude 🤖&lt;br /&gt;
* tool: [https://chrome.google.com/webstore/detail/panda-5-news-inspiration/haafibkemckmbknhfkiiniobjpgkebko Panda 5 | News &amp;amp; Inspiration Dashboard] on {{Chrome}}&lt;br /&gt;
** 「一款 Chrome 瀏覽器擴充功能，將新分頁轉換為設計靈感儀表板，整合多個設計新聞與作品展示網站的最新內容，讓使用者一開啟瀏覽器就能瀏覽當日的設計趨勢與新聞。」Made with Claude 🤖&lt;br /&gt;
* CodePen: Explore [https://codepen.io/tag/nav-bar Pens tagged &#039;nav-bar&#039; on CodePen] or browse [https://codepen.io/chriscoyier/pens/tags Chris Coyier&#039;s tagged pens on CodePen]&lt;br /&gt;
** 「前端開發者社群平台，讓使用者以 HTML、CSS、JavaScript 撰寫並即時預覽網頁作品（稱為 Pen）。可依標籤（如 nav-bar）搜尋特定元件的實作範例，是尋找互動效果與版面實作程式碼的實用資源。」Made with Claude 🤖&lt;br /&gt;
* [https://muz.li/ Muzli - Design inspiration hub]&lt;br /&gt;
** 「以瀏覽器擴充功能形式提供的設計靈感彙整工具，自動蒐集來自各大設計網站的最新作品、文章與趨勢，並整合成單一資訊流，方便設計師隨時掌握業界動態與獲取創作靈感。」Made with Claude 🤖&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://mobbin.com/ Mobbin — UI &amp;amp; UX design inspiration for mobile &amp;amp; web apps]: Find design patterns in seconds, such as screens, UI elements, flows, and text within screenshots.&lt;br /&gt;
** 「付費訂閱的 UI/UX 設計模式資料庫，收錄大量真實 App 與網站的畫面截圖，並依畫面類型、元件、使用流程等分類整理，讓設計師能快速查找特定情境（如登入、結帳）的業界實作範例。」Made with Claude 🤖&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.details.so/inspo The details behind the world&#039;s best websites.]&lt;br /&gt;
** 「付費制的網站設計拆解分析平台，深入剖析知名網站在排版、動效、色彩與互動細節上的設計決策，適合想學習頂尖網站背後設計思維、而非僅止於視覺參考的使用者。」Made with Claude 🤖&lt;br /&gt;
&lt;br /&gt;
=== Admin UI Design Showcase ===&lt;br /&gt;
Seeking quality admin dashboard design examples for reference.&lt;br /&gt;
&lt;br /&gt;
* [https://dribbble.com/tags/backend-dashboard Backend Dashboard designs, themes, templates and downloadable graphic elements on Dribbble]&lt;br /&gt;
* [https://elements.envato.com/web-templates/admin-templates/backend Admin Templates Backend Templates - Envato]&lt;br /&gt;
* [https://99designs.com/inspiration/designs/admin-panel Admin Panel Designs - 75+ Admin Design Ideas, Images &amp;amp; Inspiration In 2025 | 99designs]&lt;br /&gt;
* [https://www.figma.com/templates/dashboard-designs/ 50+ Free Dashboard Design Templates &amp;amp; Components | Figma]&lt;br /&gt;
* [https://www.creative-tim.com/templates/admin-dashboard 206+ Admin and Dashboard Template @ Creative Tim]&lt;br /&gt;
&lt;br /&gt;
=== Animation effect ===&lt;br /&gt;
* [https://www.designspells.com/ Design Spells · Design details that feel like magic]&lt;br /&gt;
&lt;br /&gt;
=== Awards ===&lt;br /&gt;
* [http://www.csswinner.com/ CSS Winner - Website Awards - CSS Award Gallery for Web Design Inspiration]&lt;br /&gt;
* [http://www.cssdesignawards.com/ Website Awards | CSS Awards | Best Websites In The World - CSSDA]&lt;br /&gt;
* [http://www.awwwards.com/ Awwwards - Website Awards - Best Web Design Trends] {{access | date = 2016-02-29}}&lt;br /&gt;
* [https://www.cssdesignawards.com/ CSS Design Awards - Website Awards - Best Web Design Inspiration - CSS Awards]&lt;br /&gt;
&lt;br /&gt;
=== Which design is better? ===&lt;br /&gt;
Vote by the users.&lt;br /&gt;
* [http://desinion.com/ Desinion] {{access | date = 2016-02-29}}&lt;br /&gt;
&lt;br /&gt;
=== Landing page ===&lt;br /&gt;
* [https://ryuki-design.jp/ 楽天市場のデザイン制作 リューキデザイン｜東京・大阪・福岡]&lt;br /&gt;
&lt;br /&gt;
=== Presentation ===&lt;br /&gt;
* [https://www.instagram.com/p/C0g2P5hRe4B/?igshid=ODhhZWM5NmIwOQ%3D%3D Deck.Gallery 是一個專門為設計師、創業者和市場行銷人員提供簡報設計靈感的平台。 由產品設計師 Muharrem 創建，這個平台讓你可以欣賞到來自全球的精彩設計，也歡迎你提交自己的作品，與大家分享你的創意。 如果你需要專業的設計服務，Deck.Gallery… | Instagram]&lt;br /&gt;
&lt;br /&gt;
=== Misc. ===&lt;br /&gt;
* [https://www.checklist.design/ Checklist Design - A collection of the best design practices.] 收集了最佳設計實踐 (design practice)，提供全面的收錄。該網站包括了各種設計清單，涵蓋了頁面、元素、流程、主題和品牌等方面，特別聚焦於登入頁面、部落格文章、定價、404錯誤等。 {{access | date = 2023-12-14}}&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
Subscribe the fan pages or community&lt;br /&gt;
* [https://www.facebook.com/designtongue 設計大舌頭]&lt;br /&gt;
* [https://www.facebook.com/fis.workshop/ 空白地區｜Fi（Peng, Hsing Kai）]&lt;br /&gt;
* [https://www.facebook.com/somekidding 聶永真 Aaron Nieh]&lt;br /&gt;
* [https://www.facebook.com/wangzhihongstudio wangzhihong.com] 王志弘&lt;br /&gt;
* [https://www.facebook.com/ogdesign.tw 奧革設計]&lt;br /&gt;
* [https://www.facebook.com/yenpochundesign/ 三頁文]&lt;br /&gt;
* [https://www.facebook.com/loveudfish/ 愛˙通用設計的小魚]&lt;br /&gt;
* [https://www.facebook.com/ConversionLab.co/ Conversion Lab]&lt;br /&gt;
* [https://ello.co/discover Featured | Ello]&lt;br /&gt;
&lt;br /&gt;
== Style guideline &amp;amp; UI patterns ==&lt;br /&gt;
Style guideline, Design guideline , Branding guidelines, Branding design guidelines&lt;br /&gt;
* {{Gd}} &#039;&#039;&#039;Collection&#039;&#039;&#039;: [https://github.com/alexpate/awesome-design-systems alexpate/awesome-design-systems: 💅🏻 ⚒ A collection of awesome design systems]&lt;br /&gt;
* [https://playbook.cio.gov/designstandards/ U.S. Web Design Standards]&lt;br /&gt;
* Apple [https://developer.apple.com/ios/human-interface-guidelines/ iOS Human Interface Guidelines]&lt;br /&gt;
* [https://developers.google.com/web/fundamentals/resources/styleguide/ Visual Style Guide — Web Fundamentals]&lt;br /&gt;
* Google [https://material.google.com/ Material design guidelines]&lt;br /&gt;
* Salesforce [http://www.lightningdesignsystem.com/guidelines/overview/ Lightning Design System]&lt;br /&gt;
* [http://brand.uber.com/ Uber Brand Guide]&lt;br /&gt;
* [https://ant.design/ Ant Design - A UI Design Language] {{access | date =2017-05-23}}&lt;br /&gt;
* [https://atlassian.design/ Atlassian Design] {{access | date =2017-05-23}}&lt;br /&gt;
* [http://design.iing.tw/ 點亮台灣・設計規範 Web Design Guideline] 「點亮台灣 — 蔡英文・陳建仁總統候選人競選官網所制訂的網站設計規範」{{access | date =2017-03-02}} [https://web.archive.org/web/20190718224305/http://design.iing.tw/ 網頁備份]&lt;br /&gt;
* [https://codepen.io/frank890417/pen/YGKVrj Project2-Brand Guideline] {{access | date =2018-06-04}}&lt;br /&gt;
* [https://heydesign.systems/ Hey Design Systems!]&lt;br /&gt;
* [https://tiponet.tipo.gov.tw/TIPO_UIUX/ 設計規範書 Design Guideline · GitBook]&lt;br /&gt;
&lt;br /&gt;
UI patterns&lt;br /&gt;
* [https://pttrns.com/ Mobile Design Patterns - Pttrns] {{access | date = 2017-03-18}}&lt;br /&gt;
* [http://android.inspired-ui.com/ Inspired UI - Mobile Apps Design Patterns [Android]] {{access | date = 2017-03-18}}&lt;br /&gt;
* [https://ui.shadcn.com/ The Foundation for your Design System - shadcn/ui] {{access | date = 2025-10-08}}&lt;br /&gt;
&lt;br /&gt;
Collection of snapshots&lt;br /&gt;
* Follow the interests: [https://www.pinterest.com/ Pinterest: Discover and save creative ideas]&lt;br /&gt;
* [http://emptystat.es/ Empty States] examples {{access | date = 2016-06-06}}&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
* [http://www.inspireux.com/ User Experience articles and quotes to inspire and connect the UX community | inspireUX]&lt;br /&gt;
* [http://littlebigdetails.com/ Little Big Details]&lt;br /&gt;
* [http://www.creativebloq.com/tag/inspiration Latest Inspiration articles | Tags | Creative Bloq]&lt;br /&gt;
* [http://designmodo.com/ Designmodo - Web Design Blog and Shop]&lt;br /&gt;
* [https://www.quora.com/Which-websites-should-a-Front-end-developer-look-up-to-for-inspiration Which websites should a Front-end developer look up to for inspiration? - Quora]&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
* [https://coolors.co/ Coolors - The super fast color schemes generator!] Press {{kbd | key=space}} to generate the new color set&lt;br /&gt;
相關文章: [[CSS_tools#.E6.8C.91.E9.81.B8.E9.A1.8F.E8.89.B2|挑選顏色]]&lt;br /&gt;
* Pantone [https://www.pantone.com/hk/tc/color-of-the-year-2022 彩通亞太區 | Pantone Color of the Year 2022 / 介紹] {{access | date=2022-07-14}}&lt;br /&gt;
&lt;br /&gt;
== Examples of bad design ==&lt;br /&gt;
* Hashtag #badeesign on [https://www.instagram.com/explore/tags/baddesign/ Instagram 上的 #baddesign 主題標籤], [https://twitter.com/hashtag/baddesign #baddesign - Twitter 搜尋]&lt;br /&gt;
* Hashtag #NormanDoor on [https://www.instagram.com/explore/tags/normandoor/ Instagram 上的 #normandoor 主題標籤], [https://twitter.com/hashtag/normandoor #normandoor - Twitter Search]&lt;br /&gt;
* [https://www.theuncomfortable.com/ The Uncomfortable - a collection of deliberately inconvenient objects]&lt;br /&gt;
* [https://userinyerface.com/ User Inyerface - A worst-practice UI experiment]&lt;br /&gt;
* [https://hungryowl.typepad.com/webdesign/ 網站設計大不易]&lt;br /&gt;
&lt;br /&gt;
{{Tips}} [https://99percentinvisible.org/article/norman-doors-dont-know-whether-push-pull-blame-design/ Norman Doors: Don&#039;t Know Whether to Push or Pull? Blame Design. - 99% Invisible]&lt;br /&gt;
&lt;br /&gt;
== off topic ==&lt;br /&gt;
* [http://www.reddit.com/r/GetMotivated/ Get Motivated!] on reddit&lt;br /&gt;
&lt;br /&gt;
reference&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Template:Build a website}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Design]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=I_need_inspiration&amp;diff=26416</id>
		<title>I need inspiration</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=I_need_inspiration&amp;diff=26416"/>
		<updated>2026-07-31T04:05:58Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Show cases / UI / APP design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I need inspiration for design purpose&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Classification ==&lt;br /&gt;
=== Show cases / UI / APP design ===&lt;br /&gt;
* [https://dribbble.com/shots?sort=views Popular show cases on dribbble.com]: &amp;quot;Web designers, graphic designers, illustrators, icon artists, typographers, logo designers, and other creative types share small screenshots (shots) that show their work, process, and current projects.&amp;quot; &amp;lt;ref&amp;gt;[http://dribbble.com/site/about Dribbble - About]&amp;lt;/ref&amp;gt; {{access | date = 2023-01-04}}&lt;br /&gt;
** 「專門為平面設計師和創意專業人士設立。這個網站提供了一個展示和發現創意作品的空間，涵蓋了各種設計類別，如網頁設計、品牌、動畫和插畫等。可以按顏色、標籤和時間篩選內容，方便使用者發現特定的設計風格或趨勢。Dribbble 也為設計師們提供了一個交流想法、分享作品和相互獲得靈感的空間。」Made with GPT-4 🤖 &lt;br /&gt;
* [https://www.behance.net/ Behance 在线作品集]: [https://www.behance.net/search?field=132&amp;amp;content=projects&amp;amp;sort=appreciations&amp;amp;time=week UI/UX projects on Behance] {{access | date = 2016-06-20}}&lt;br /&gt;
** 「Adobe 旗下的創意作品集平台，涵蓋平面設計、插畫、攝影、UI/UX、動態影像等多元領域。使用者可以建立完整的專案作品集、追蹤喜愛的創作者，並依熱門程度、時間或領域篩選作品，是全球設計師展示與求職的重要平台之一。」Made with Claude 🤖&lt;br /&gt;
* [http://www.site.uplabs.com/ Web design and development, Daily – SiteUp] {{access | date = 2016-02-29}}&lt;br /&gt;
** 「每日更新的網頁設計與開發資源分享平台，內容包含 UI 素材、程式碼片段、設計靈感等，適合開發者與設計師快速獲取當日精選的實用資源與趨勢動態。」Made with Claude 🤖&lt;br /&gt;
* [http://www.heyshow.com/gallery/ 設計畫廊 | 黑秀網 HeyShow.com] {{access | date = 2015-12-10}}&lt;br /&gt;
** 「台灣早期具代表性的華文設計社群網站，畫廊區收錄插畫、平面設計、攝影等各類創作作品，讓設計師與創作者能夠展示作品集、交流創作心得，並認識台灣本地的設計圈生態。」Made with Claude 🤖&lt;br /&gt;
* [http://woofeng.cn/inspiration/web/ 黄蜂网woofeng.cn] {{access | date = 2016-09-02}}&lt;br /&gt;
** 「中國的設計靈感與素材分享網站，網頁設計欄目彙整大量國內外優秀網站作品，並延伸提供平面、UI、攝影等相關教學與資源下載，是簡體中文使用者常用的設計參考站台之一。」Made with Claude 🤖&lt;br /&gt;
* tool: [https://chrome.google.com/webstore/detail/panda-5-news-inspiration/haafibkemckmbknhfkiiniobjpgkebko Panda 5 | News &amp;amp; Inspiration Dashboard] on {{Chrome}}&lt;br /&gt;
** 「一款 Chrome 瀏覽器擴充功能，將新分頁轉換為設計靈感儀表板，整合多個設計新聞與作品展示網站的最新內容，讓使用者一開啟瀏覽器就能瀏覽當日的設計趨勢與新聞。」Made with Claude 🤖&lt;br /&gt;
* CodePen: Explore [https://codepen.io/tag/nav-bar Pens tagged &#039;nav-bar&#039; on CodePen] or browse [https://codepen.io/chriscoyier/pens/tags Chris Coyier&#039;s tagged pens on CodePen]&lt;br /&gt;
** 「前端開發者社群平台，讓使用者以 HTML、CSS、JavaScript 撰寫並即時預覽網頁作品（稱為 Pen）。可依標籤（如 nav-bar）搜尋特定元件的實作範例，是尋找互動效果與版面實作程式碼的實用資源。」Made with Claude 🤖&lt;br /&gt;
* [https://muz.li/ Muzli - Design inspiration hub]&lt;br /&gt;
** 「以瀏覽器擴充功能形式提供的設計靈感彙整工具，自動蒐集來自各大設計網站的最新作品、文章與趨勢，並整合成單一資訊流，方便設計師隨時掌握業界動態與獲取創作靈感。」Made with Claude 🤖&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://mobbin.com/ Mobbin — UI &amp;amp; UX design inspiration for mobile &amp;amp; web apps]: Find design patterns in seconds, such as screens, UI elements, flows, and text within screenshots.&lt;br /&gt;
** 「付費訂閱的 UI/UX 設計模式資料庫，收錄大量真實 App 與網站的畫面截圖，並依畫面類型、元件、使用流程等分類整理，讓設計師能快速查找特定情境（如登入、結帳）的業界實作範例。」Made with Claude 🤖&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.details.so/inspo The details behind the world&#039;s best websites.]&lt;br /&gt;
** 「付費制的網站設計拆解分析平台，深入剖析知名網站在排版、動效、色彩與互動細節上的設計決策，適合想學習頂尖網站背後設計思維、而非僅止於視覺參考的使用者。」Made with Claude 🤖&lt;br /&gt;
&lt;br /&gt;
=== Admin UI Design Showcase ===&lt;br /&gt;
Seeking quality admin dashboard design examples for reference.&lt;br /&gt;
&lt;br /&gt;
* [https://dribbble.com/tags/backend-dashboard Backend Dashboard designs, themes, templates and downloadable graphic elements on Dribbble]&lt;br /&gt;
* [https://elements.envato.com/web-templates/admin-templates/backend Admin Templates Backend Templates - Envato]&lt;br /&gt;
* [https://99designs.com/inspiration/designs/admin-panel Admin Panel Designs - 75+ Admin Design Ideas, Images &amp;amp; Inspiration In 2025 | 99designs]&lt;br /&gt;
* [https://www.figma.com/templates/dashboard-designs/ 50+ Free Dashboard Design Templates &amp;amp; Components | Figma]&lt;br /&gt;
* [https://www.creative-tim.com/templates/admin-dashboard 206+ Admin and Dashboard Template @ Creative Tim]&lt;br /&gt;
&lt;br /&gt;
=== Animation effect ===&lt;br /&gt;
* [https://www.designspells.com/ Design Spells · Design details that feel like magic]&lt;br /&gt;
&lt;br /&gt;
=== Awards ===&lt;br /&gt;
* [http://www.csswinner.com/ CSS Winner - Website Awards - CSS Award Gallery for Web Design Inspiration]&lt;br /&gt;
* [http://www.cssdesignawards.com/ Website Awards | CSS Awards | Best Websites In The World - CSSDA]&lt;br /&gt;
* [http://www.awwwards.com/ Awwwards - Website Awards - Best Web Design Trends] {{access | date = 2016-02-29}}&lt;br /&gt;
* [https://www.cssdesignawards.com/ CSS Design Awards - Website Awards - Best Web Design Inspiration - CSS Awards]&lt;br /&gt;
&lt;br /&gt;
=== Which design is better? ===&lt;br /&gt;
Vote by the users.&lt;br /&gt;
* [http://desinion.com/ Desinion] {{access | date = 2016-02-29}}&lt;br /&gt;
&lt;br /&gt;
=== Landing page ===&lt;br /&gt;
* [https://ryuki-design.jp/ 楽天市場のデザイン制作 リューキデザイン｜東京・大阪・福岡]&lt;br /&gt;
&lt;br /&gt;
=== Presentation ===&lt;br /&gt;
* [https://www.instagram.com/p/C0g2P5hRe4B/?igshid=ODhhZWM5NmIwOQ%3D%3D Deck.Gallery 是一個專門為設計師、創業者和市場行銷人員提供簡報設計靈感的平台。 由產品設計師 Muharrem 創建，這個平台讓你可以欣賞到來自全球的精彩設計，也歡迎你提交自己的作品，與大家分享你的創意。 如果你需要專業的設計服務，Deck.Gallery… | Instagram]&lt;br /&gt;
&lt;br /&gt;
=== Misc. ===&lt;br /&gt;
* [https://www.checklist.design/ Checklist Design - A collection of the best design practices.] 收集了最佳設計實踐 (design practice)，提供全面的收錄。該網站包括了各種設計清單，涵蓋了頁面、元素、流程、主題和品牌等方面，特別聚焦於登入頁面、部落格文章、定價、404錯誤等。 {{access | date = 2023-12-14}}&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
Subscribe the fan pages or community&lt;br /&gt;
* [https://www.facebook.com/designtongue 設計大舌頭]&lt;br /&gt;
* [https://www.facebook.com/fis.workshop/ 空白地區｜Fi（Peng, Hsing Kai）]&lt;br /&gt;
* [https://www.facebook.com/somekidding 聶永真 Aaron Nieh]&lt;br /&gt;
* [https://www.facebook.com/wangzhihongstudio wangzhihong.com] 王志弘&lt;br /&gt;
* [https://www.facebook.com/ogdesign.tw 奧革設計]&lt;br /&gt;
* [https://www.facebook.com/yenpochundesign/ 三頁文]&lt;br /&gt;
* [https://www.facebook.com/loveudfish/ 愛˙通用設計的小魚]&lt;br /&gt;
* [https://www.facebook.com/ConversionLab.co/ Conversion Lab]&lt;br /&gt;
* [https://ello.co/discover Featured | Ello]&lt;br /&gt;
&lt;br /&gt;
== Style guideline &amp;amp; UI patterns ==&lt;br /&gt;
Style guideline, Design guideline , Branding guidelines, Branding design guidelines&lt;br /&gt;
* {{Gd}} &#039;&#039;&#039;Collection&#039;&#039;&#039;: [https://github.com/alexpate/awesome-design-systems alexpate/awesome-design-systems: 💅🏻 ⚒ A collection of awesome design systems]&lt;br /&gt;
* [https://playbook.cio.gov/designstandards/ U.S. Web Design Standards]&lt;br /&gt;
* Apple [https://developer.apple.com/ios/human-interface-guidelines/ iOS Human Interface Guidelines]&lt;br /&gt;
* [https://developers.google.com/web/fundamentals/resources/styleguide/ Visual Style Guide — Web Fundamentals]&lt;br /&gt;
* Google [https://material.google.com/ Material design guidelines]&lt;br /&gt;
* Salesforce [http://www.lightningdesignsystem.com/guidelines/overview/ Lightning Design System]&lt;br /&gt;
* [http://brand.uber.com/ Uber Brand Guide]&lt;br /&gt;
* [https://ant.design/ Ant Design - A UI Design Language] {{access | date =2017-05-23}}&lt;br /&gt;
* [https://atlassian.design/ Atlassian Design] {{access | date =2017-05-23}}&lt;br /&gt;
* [http://design.iing.tw/ 點亮台灣・設計規範 Web Design Guideline] 「點亮台灣 — 蔡英文・陳建仁總統候選人競選官網所制訂的網站設計規範」{{access | date =2017-03-02}} [https://web.archive.org/web/20190718224305/http://design.iing.tw/ 網頁備份]&lt;br /&gt;
* [https://codepen.io/frank890417/pen/YGKVrj Project2-Brand Guideline] {{access | date =2018-06-04}}&lt;br /&gt;
* [https://heydesign.systems/ Hey Design Systems!]&lt;br /&gt;
* [https://tiponet.tipo.gov.tw/TIPO_UIUX/ 設計規範書 Design Guideline · GitBook]&lt;br /&gt;
&lt;br /&gt;
UI patterns&lt;br /&gt;
* [https://pttrns.com/ Mobile Design Patterns - Pttrns] {{access | date = 2017-03-18}}&lt;br /&gt;
* [http://android.inspired-ui.com/ Inspired UI - Mobile Apps Design Patterns [Android]] {{access | date = 2017-03-18}}&lt;br /&gt;
* [https://ui.shadcn.com/ The Foundation for your Design System - shadcn/ui] {{access | date = 2025-10-08}}&lt;br /&gt;
&lt;br /&gt;
Collection of snapshots&lt;br /&gt;
* Follow the interests: [https://www.pinterest.com/ Pinterest: Discover and save creative ideas]&lt;br /&gt;
* [http://emptystat.es/ Empty States] examples {{access | date = 2016-06-06}}&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
* [http://www.inspireux.com/ User Experience articles and quotes to inspire and connect the UX community | inspireUX]&lt;br /&gt;
* [http://littlebigdetails.com/ Little Big Details]&lt;br /&gt;
* [http://www.creativebloq.com/tag/inspiration Latest Inspiration articles | Tags | Creative Bloq]&lt;br /&gt;
* [http://designmodo.com/ Designmodo - Web Design Blog and Shop]&lt;br /&gt;
* [https://www.quora.com/Which-websites-should-a-Front-end-developer-look-up-to-for-inspiration Which websites should a Front-end developer look up to for inspiration? - Quora]&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
* [https://coolors.co/ Coolors - The super fast color schemes generator!] Press {{kbd | key=space}} to generate the new color set&lt;br /&gt;
相關文章: [[CSS_tools#.E6.8C.91.E9.81.B8.E9.A1.8F.E8.89.B2|挑選顏色]]&lt;br /&gt;
* Pantone [https://www.pantone.com/hk/tc/color-of-the-year-2022 彩通亞太區 | Pantone Color of the Year 2022 / 介紹] {{access | date=2022-07-14}}&lt;br /&gt;
&lt;br /&gt;
== Examples of bad design ==&lt;br /&gt;
* Hashtag #badeesign on [https://www.instagram.com/explore/tags/baddesign/ Instagram 上的 #baddesign 主題標籤], [https://twitter.com/hashtag/baddesign #baddesign - Twitter 搜尋]&lt;br /&gt;
* Hashtag #NormanDoor on [https://www.instagram.com/explore/tags/normandoor/ Instagram 上的 #normandoor 主題標籤], [https://twitter.com/hashtag/normandoor #normandoor - Twitter Search]&lt;br /&gt;
* [https://www.theuncomfortable.com/ The Uncomfortable - a collection of deliberately inconvenient objects]&lt;br /&gt;
* [https://userinyerface.com/ User Inyerface - A worst-practice UI experiment]&lt;br /&gt;
* [https://hungryowl.typepad.com/webdesign/ 網站設計大不易]&lt;br /&gt;
&lt;br /&gt;
{{Tips}} [https://99percentinvisible.org/article/norman-doors-dont-know-whether-push-pull-blame-design/ Norman Doors: Don&#039;t Know Whether to Push or Pull? Blame Design. - 99% Invisible]&lt;br /&gt;
&lt;br /&gt;
== off topic ==&lt;br /&gt;
* [http://www.reddit.com/r/GetMotivated/ Get Motivated!] on reddit&lt;br /&gt;
&lt;br /&gt;
reference&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Template:Build a website}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=I_need_inspiration&amp;diff=26415</id>
		<title>I need inspiration</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=I_need_inspiration&amp;diff=26415"/>
		<updated>2026-07-31T03:53:07Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Show cases / UI / APP design */ add details.so&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I need inspiration for design purpose&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Classification ==&lt;br /&gt;
=== Show cases / UI / APP design ===&lt;br /&gt;
* [https://dribbble.com/shots?sort=views Popular show cases on dribbble.com]: &amp;quot;Web designers, graphic designers, illustrators, icon artists, typographers, logo designers, and other creative types share small screenshots (shots) that show their work, process, and current projects.&amp;quot; &amp;lt;ref&amp;gt;[http://dribbble.com/site/about Dribbble - About]&amp;lt;/ref&amp;gt; {{access | date = 2023-01-04}}&lt;br /&gt;
** 「專門為平面設計師和創意專業人士設立。這個網站提供了一個展示和發現創意作品的空間，涵蓋了各種設計類別，如網頁設計、品牌、動畫和插畫等。可以按顏色、標籤和時間篩選內容，方便使用者發現特定的設計風格或趨勢。Dribbble 也為設計師們提供了一個交流想法、分享作品和相互獲得靈感的空間。」Made with GPT-4 🤖 &lt;br /&gt;
* [http://www.webindexgallery.com/index.php CSS Galleries / Web Index Gallery]&lt;br /&gt;
* [https://www.behance.net/ Behance 在线作品集]: [https://www.behance.net/search?field=132&amp;amp;content=projects&amp;amp;sort=appreciations&amp;amp;time=week UI/UX projects on Behance] {{access | date = 2016-06-20}}&lt;br /&gt;
* [http://www.site.uplabs.com/ Web design and development, Daily – SiteUp] {{access | date = 2016-02-29}}&lt;br /&gt;
* [http://www.heyshow.com/gallery/ 設計畫廊 | 黑秀網 HeyShow.com] {{access | date = 2015-12-10}}&lt;br /&gt;
* [http://woofeng.cn/inspiration/web/ 黄蜂网woofeng.cn] {{access | date = 2016-09-02}}&lt;br /&gt;
* tool: [https://chrome.google.com/webstore/detail/panda-5-news-inspiration/haafibkemckmbknhfkiiniobjpgkebko Panda 5 | News &amp;amp; Inspiration Dashboard] on {{Chrome}}&lt;br /&gt;
* CodePen: Explore [https://codepen.io/tag/nav-bar Pens tagged &#039;nav-bar&#039; on CodePen] or browse [https://codepen.io/chriscoyier/pens/tags Chris Coyier&#039;s tagged pens on CodePen]&lt;br /&gt;
* [https://muz.li/ Muzli - Design inspiration hub]&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://mobbin.com/ Mobbin — UI &amp;amp; UX design inspiration for mobile &amp;amp; web apps]: Find design patterns in seconds, such as screens, UI elements, flows, and text within screenshots.&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.details.so/inspo The details behind the world&#039;s best websites.]&lt;br /&gt;
&lt;br /&gt;
=== Admin UI Design Showcase ===&lt;br /&gt;
Seeking quality admin dashboard design examples for reference.&lt;br /&gt;
&lt;br /&gt;
* [https://dribbble.com/tags/backend-dashboard Backend Dashboard designs, themes, templates and downloadable graphic elements on Dribbble]&lt;br /&gt;
* [https://elements.envato.com/web-templates/admin-templates/backend Admin Templates Backend Templates - Envato]&lt;br /&gt;
* [https://99designs.com/inspiration/designs/admin-panel Admin Panel Designs - 75+ Admin Design Ideas, Images &amp;amp; Inspiration In 2025 | 99designs]&lt;br /&gt;
* [https://www.figma.com/templates/dashboard-designs/ 50+ Free Dashboard Design Templates &amp;amp; Components | Figma]&lt;br /&gt;
* [https://www.creative-tim.com/templates/admin-dashboard 206+ Admin and Dashboard Template @ Creative Tim]&lt;br /&gt;
&lt;br /&gt;
=== Animation effect ===&lt;br /&gt;
* [https://www.designspells.com/ Design Spells · Design details that feel like magic]&lt;br /&gt;
&lt;br /&gt;
=== Awards ===&lt;br /&gt;
* [http://www.csswinner.com/ CSS Winner - Website Awards - CSS Award Gallery for Web Design Inspiration]&lt;br /&gt;
* [http://www.cssdesignawards.com/ Website Awards | CSS Awards | Best Websites In The World - CSSDA]&lt;br /&gt;
* [http://www.awwwards.com/ Awwwards - Website Awards - Best Web Design Trends] {{access | date = 2016-02-29}}&lt;br /&gt;
* [https://www.cssdesignawards.com/ CSS Design Awards - Website Awards - Best Web Design Inspiration - CSS Awards]&lt;br /&gt;
&lt;br /&gt;
=== Which design is better? ===&lt;br /&gt;
Vote by the users.&lt;br /&gt;
* [http://desinion.com/ Desinion] {{access | date = 2016-02-29}}&lt;br /&gt;
&lt;br /&gt;
=== Landing page ===&lt;br /&gt;
* [https://ryuki-design.jp/ 楽天市場のデザイン制作 リューキデザイン｜東京・大阪・福岡]&lt;br /&gt;
&lt;br /&gt;
=== Presentation ===&lt;br /&gt;
* [https://www.instagram.com/p/C0g2P5hRe4B/?igshid=ODhhZWM5NmIwOQ%3D%3D Deck.Gallery 是一個專門為設計師、創業者和市場行銷人員提供簡報設計靈感的平台。 由產品設計師 Muharrem 創建，這個平台讓你可以欣賞到來自全球的精彩設計，也歡迎你提交自己的作品，與大家分享你的創意。 如果你需要專業的設計服務，Deck.Gallery… | Instagram]&lt;br /&gt;
&lt;br /&gt;
=== Misc. ===&lt;br /&gt;
* [https://www.checklist.design/ Checklist Design - A collection of the best design practices.] 收集了最佳設計實踐 (design practice)，提供全面的收錄。該網站包括了各種設計清單，涵蓋了頁面、元素、流程、主題和品牌等方面，特別聚焦於登入頁面、部落格文章、定價、404錯誤等。 {{access | date = 2023-12-14}}&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
Subscribe the fan pages or community&lt;br /&gt;
* [https://www.facebook.com/designtongue 設計大舌頭]&lt;br /&gt;
* [https://www.facebook.com/fis.workshop/ 空白地區｜Fi（Peng, Hsing Kai）]&lt;br /&gt;
* [https://www.facebook.com/somekidding 聶永真 Aaron Nieh]&lt;br /&gt;
* [https://www.facebook.com/wangzhihongstudio wangzhihong.com] 王志弘&lt;br /&gt;
* [https://www.facebook.com/ogdesign.tw 奧革設計]&lt;br /&gt;
* [https://www.facebook.com/yenpochundesign/ 三頁文]&lt;br /&gt;
* [https://www.facebook.com/loveudfish/ 愛˙通用設計的小魚]&lt;br /&gt;
* [https://www.facebook.com/ConversionLab.co/ Conversion Lab]&lt;br /&gt;
* [https://ello.co/discover Featured | Ello]&lt;br /&gt;
&lt;br /&gt;
== Style guideline &amp;amp; UI patterns ==&lt;br /&gt;
Style guideline, Design guideline , Branding guidelines, Branding design guidelines&lt;br /&gt;
* {{Gd}} &#039;&#039;&#039;Collection&#039;&#039;&#039;: [https://github.com/alexpate/awesome-design-systems alexpate/awesome-design-systems: 💅🏻 ⚒ A collection of awesome design systems]&lt;br /&gt;
* [https://playbook.cio.gov/designstandards/ U.S. Web Design Standards]&lt;br /&gt;
* Apple [https://developer.apple.com/ios/human-interface-guidelines/ iOS Human Interface Guidelines]&lt;br /&gt;
* [https://developers.google.com/web/fundamentals/resources/styleguide/ Visual Style Guide — Web Fundamentals]&lt;br /&gt;
* Google [https://material.google.com/ Material design guidelines]&lt;br /&gt;
* Salesforce [http://www.lightningdesignsystem.com/guidelines/overview/ Lightning Design System]&lt;br /&gt;
* [http://brand.uber.com/ Uber Brand Guide]&lt;br /&gt;
* [https://ant.design/ Ant Design - A UI Design Language] {{access | date =2017-05-23}}&lt;br /&gt;
* [https://atlassian.design/ Atlassian Design] {{access | date =2017-05-23}}&lt;br /&gt;
* [http://design.iing.tw/ 點亮台灣・設計規範 Web Design Guideline] 「點亮台灣 — 蔡英文・陳建仁總統候選人競選官網所制訂的網站設計規範」{{access | date =2017-03-02}} [https://web.archive.org/web/20190718224305/http://design.iing.tw/ 網頁備份]&lt;br /&gt;
* [https://codepen.io/frank890417/pen/YGKVrj Project2-Brand Guideline] {{access | date =2018-06-04}}&lt;br /&gt;
* [https://heydesign.systems/ Hey Design Systems!]&lt;br /&gt;
* [https://tiponet.tipo.gov.tw/TIPO_UIUX/ 設計規範書 Design Guideline · GitBook]&lt;br /&gt;
&lt;br /&gt;
UI patterns&lt;br /&gt;
* [https://pttrns.com/ Mobile Design Patterns - Pttrns] {{access | date = 2017-03-18}}&lt;br /&gt;
* [http://android.inspired-ui.com/ Inspired UI - Mobile Apps Design Patterns [Android]] {{access | date = 2017-03-18}}&lt;br /&gt;
* [https://ui.shadcn.com/ The Foundation for your Design System - shadcn/ui] {{access | date = 2025-10-08}}&lt;br /&gt;
&lt;br /&gt;
Collection of snapshots&lt;br /&gt;
* Follow the interests: [https://www.pinterest.com/ Pinterest: Discover and save creative ideas]&lt;br /&gt;
* [http://emptystat.es/ Empty States] examples {{access | date = 2016-06-06}}&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
* [http://www.inspireux.com/ User Experience articles and quotes to inspire and connect the UX community | inspireUX]&lt;br /&gt;
* [http://littlebigdetails.com/ Little Big Details]&lt;br /&gt;
* [http://www.creativebloq.com/tag/inspiration Latest Inspiration articles | Tags | Creative Bloq]&lt;br /&gt;
* [http://designmodo.com/ Designmodo - Web Design Blog and Shop]&lt;br /&gt;
* [https://www.quora.com/Which-websites-should-a-Front-end-developer-look-up-to-for-inspiration Which websites should a Front-end developer look up to for inspiration? - Quora]&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
* [https://coolors.co/ Coolors - The super fast color schemes generator!] Press {{kbd | key=space}} to generate the new color set&lt;br /&gt;
相關文章: [[CSS_tools#.E6.8C.91.E9.81.B8.E9.A1.8F.E8.89.B2|挑選顏色]]&lt;br /&gt;
* Pantone [https://www.pantone.com/hk/tc/color-of-the-year-2022 彩通亞太區 | Pantone Color of the Year 2022 / 介紹] {{access | date=2022-07-14}}&lt;br /&gt;
&lt;br /&gt;
== Examples of bad design ==&lt;br /&gt;
* Hashtag #badeesign on [https://www.instagram.com/explore/tags/baddesign/ Instagram 上的 #baddesign 主題標籤], [https://twitter.com/hashtag/baddesign #baddesign - Twitter 搜尋]&lt;br /&gt;
* Hashtag #NormanDoor on [https://www.instagram.com/explore/tags/normandoor/ Instagram 上的 #normandoor 主題標籤], [https://twitter.com/hashtag/normandoor #normandoor - Twitter Search]&lt;br /&gt;
* [https://www.theuncomfortable.com/ The Uncomfortable - a collection of deliberately inconvenient objects]&lt;br /&gt;
* [https://userinyerface.com/ User Inyerface - A worst-practice UI experiment]&lt;br /&gt;
* [https://hungryowl.typepad.com/webdesign/ 網站設計大不易]&lt;br /&gt;
&lt;br /&gt;
{{Tips}} [https://99percentinvisible.org/article/norman-doors-dont-know-whether-push-pull-blame-design/ Norman Doors: Don&#039;t Know Whether to Push or Pull? Blame Design. - 99% Invisible]&lt;br /&gt;
&lt;br /&gt;
== off topic ==&lt;br /&gt;
* [http://www.reddit.com/r/GetMotivated/ Get Motivated!] on reddit&lt;br /&gt;
&lt;br /&gt;
reference&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Template:Build a website}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Capacity_of_Email_Service&amp;diff=26414</id>
		<title>Capacity of Email Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Capacity_of_Email_Service&amp;diff=26414"/>
		<updated>2026-07-31T03:02:23Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Email服務每封郵件的檔案大小上限 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;單封信件 (含夾帶檔案) 的檔案大小上限 (maximum attachment size) 與建議&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Email服務每封郵件的檔案大小上限 ==&lt;br /&gt;
&#039;&#039;&#039;建議&#039;&#039;&#039;:&lt;br /&gt;
* 檔案大小 (file size) 控制在&#039;&#039;&#039;6-10MB&#039;&#039;&#039;: 因為信件夾帶的檔案經過編碼([http://en.wikipedia.org/wiki/MIME MIME] encode)後，會導致檔案大小變大，所以寄信時的信件(含夾帶的檔案)檔案大小建議能控制在上限的三分之二，即6-10MB，以免被退信。&lt;br /&gt;
* 超過10MB的檔案，可以考慮使用將附檔[[File compression|壓縮]] 或放在Web、FTP、[http://en.wikipedia.org/wiki/Comparison_of_one-click_hosters 線上檔案儲存網站]、[[Snapchat of file sharing | 閱後即焚檔案分享服務]] ex: [https://drive.google.com/ Google Drive] 單一檔案限 5TB&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant&amp;amp;vid=1-635756751147519182-13007898089037315163 檔案大小 - 雲端硬碟說明] {{access | date = 2015-08-20}}&amp;lt;/ref&amp;gt;, DropBox 單一檔案限2GB&amp;lt;ref&amp;gt;[https://www.dropbox.com/help/5 Dropbox 是否有檔案大小的限制或上限？ (Dropbox 說明中心)]&amp;lt;/ref&amp;gt;, [http://www.mediafire.com/ MediaFire](非圖檔的單一檔案限200MB), [http://www.yousendit.com/ YouSendIt](單一檔案限100MB) ...。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%; min-height: .01%; overflow-x: auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|| &amp;lt;b&amp;gt;網站名稱&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;單封信件(含夾帶檔案)的檔案上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;建議的夾帶檔案上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;信箱總容量上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;備註(拜訪日期)&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://webmail.aol.com/ AOL Mail](免費)&lt;br /&gt;
|| 16MB&amp;lt;ref&amp;gt;[http://help.aol.com/help/microsites/microsite.do?cmd=displayKCPopup&amp;amp;docType=kc&amp;amp;externalId=221717 Cannot send email attachments or embedded files on AOL WebMail- AOL Help]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 10MB&lt;br /&gt;
|| 超過2GB，輸入檢核碼即可增加空間&amp;lt;ref&amp;gt;[http://help.aol.com/help/microsites/microsite.do?cmd=displayKCPopup&amp;amp;docType=kc&amp;amp;externalId=218743 How do I save my emails in AOL WebMail?- AOL Help] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2010-09-11&lt;br /&gt;
|-&lt;br /&gt;
| {{Gd}}&lt;br /&gt;
|| [https://gmail.google.com/ Google Gmail](免費/付費服務)&lt;br /&gt;
|| 25MB&amp;lt;ref&amp;gt;[https://mail.google.com/support/bin/answer.py?answer=8770&amp;amp;topic=1516 Maximum attachment size - Gmail Help]  &amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt; (超過25MB可上傳至Google Drive，最多到 5TB&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant Google 雲端硬碟可存放的檔案 - 雲端硬碟說明]&amp;lt;/ref&amp;gt; )&lt;br /&gt;
|| 15MB&lt;br /&gt;
|| 15G(免費服務)/ 100GB-30TB(付費服務)&amp;lt;ref&amp;gt;[http://mail.google.com/support/bin/answer.py?hl=en&amp;amp;answer=39567 Google Storage - Gmail Help] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [http://www.mail.lycos.com/ Lycos Mail] (免費)&lt;br /&gt;
|| 35MB&amp;lt;ref&amp;gt;[https://cshelp.lycos.com/ics/support/KBAnswer.asp?questionID=73 Is there a limit to the size of the emails that I can send? - Lycos.com Helpdesk]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 21MB&lt;br /&gt;
|| 3G(free) ~ 5G(paid)&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.mail.com/intl/ Mail.com](免費/付費服務)&lt;br /&gt;
|| 50MB&amp;lt;ref&amp;gt;[http://help.mail.com/index.html Mail.com FAQ] - What is the maximum size for sending and receiving email? &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| &#039;&#039;&#039;未限制&#039;&#039;&#039;&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.mail2000.com.tw/ Mail2000](付費服務)&lt;br /&gt;
|| 40MB&amp;lt;ref&amp;gt;[http://doc.mail2000.com.tw/m2k/faq_about_a1-3.htm 單封信件傳輸量及我的檔案的容量有多少？] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| 500MB~12GB&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://mail.pchome.com.tw/ PChome Online](免費)&lt;br /&gt;
|| 10MB&amp;lt;ref&amp;gt;[http://faq.pchome.com.tw/faq_solution.html?f_id=1&amp;amp;q_id=6&amp;amp;c_nickname=mail PC home E-Mail 是否有容量等限制？] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB&lt;br /&gt;
|| 250MB&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://webmail.seed.net.tw/Login.do Seednet](付費服務)&lt;br /&gt;
|| 10MB&amp;lt;ref&amp;gt;[http://webmail.seed.net.tw/web/rule.htm Seednet Webmail使用規範] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB&lt;br /&gt;
|| 2G&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.url.com.tw/emailstore/index.htm URL智邦生活館](付費服務)&lt;br /&gt;
|| 10MB(付費服務]&amp;lt;ref&amp;gt;[http://vipmail.url.com.tw/vipmail.asp?q=1 URL 智邦生活館 VIP Mail 常見問題集] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB(付費服務)&lt;br /&gt;
|| 2000MB(付費服務)&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [https://outlook.com outlook.com](免費) 前 hotmail&lt;br /&gt;
|| 34MB&amp;lt;ref&amp;gt;[https://support.office.com/en-us/article/Attach-files-in-Outlook-com-8d7c1ea7-4e5f-44ce-bb6e-c5fcc92ba9ab Attach files in Outlook.com - Outlook]&amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt; (超過可上傳至OneDrive，最多到 15GB(免費) ~ 50GB(付費)&amp;lt;ref&amp;gt;[https://support.office.com/en-us/article/storage-limits-in-outlook-com-7ac99134-69e5-4619-ac0b-2d313bba5e9e?ui=en-US&amp;amp;rs=en-US&amp;amp;ad=US Storage limits in Outlook.com - Outlook]&amp;lt;/ref&amp;gt;)&lt;br /&gt;
|| 20MB+&lt;br /&gt;
|| &lt;br /&gt;
|| 2018-08-25&lt;br /&gt;
|-&lt;br /&gt;
| {{Gd}}&lt;br /&gt;
|| [http://mail.yahoo.com.tw/ Yahoo!奇摩電子信箱](免費/付費服務)&lt;br /&gt;
|| 25MB(免費/付費服務)&amp;lt;ref&amp;gt;[https://tw.help.yahoo.com/kb/%E4%BF%A1%E4%BB%B6%E5%A4%A7%E5%B0%8F-%E9%99%90%E5%88%B6-sln5673.html 信件大小限制]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 15MB(免費/付費服務)&lt;br /&gt;
|| 1TB&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [https://protonmail.com/ ProtonMail](免費/付費服務)&lt;br /&gt;
|| 25MB&amp;lt;ref&amp;gt;[https://protonmail.com/support/knowledge-base/attaching-multiple-documents-to-a-message/ Attaching documents to a message and limits - ProtonMail Support]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 15MB&lt;br /&gt;
|| 500MB(免費服務)、5~20GB(免費/付費服務)&amp;lt;ref&amp;gt;[https://protonmail.com/support/knowledge-base/paid-plans/ ProtonMail Plans Explained (Free, Paid, Visionary) - ProtonMail Support]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2016-11-12&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [http://mail.qq.com/ QQ邮箱] 腾讯邮箱服务 (免費服務)&lt;br /&gt;
|| 50MB &amp;lt;br /&amp;gt; 超過限制可上傳至雲端硬碟，最多到 2GB &amp;lt;ref&amp;gt;[http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;id=11&amp;amp;&amp;amp;no=130 一封邮件可以发送多个附件吗？_QQ邮箱帮助中心] &amp;amp; [http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;id=35&amp;amp;&amp;amp;no=206 什么是文件中转站？_QQ邮箱帮助中心] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| &#039;&#039;&#039;未限制&#039;&#039;&#039;&amp;lt;ref&amp;gt;[http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;no=103&amp;amp;&amp;amp;id=22 QQ邮箱的容量和附件有多大？_QQ邮箱帮助中心]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2018-04-29&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
寄信到 hotmail 收到回信「Delivery Status Notification (Failure)」&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
伺服器的回應如下：&lt;br /&gt;
552 Too much mail data.(31457280 bytes bounded)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
訊息中「31457280 bytes」相當於 31 MB。實際信件的附檔檔案大小約 24 MB，因此需要如上表建議調整到 20 MB 或者是直接上傳到雲端硬碟空間。&lt;br /&gt;
&lt;br /&gt;
== 夾檔的檔案類型 ==&lt;br /&gt;
{{exclaim}} 如果夾檔的檔案類型是執行檔 ( .exe )、程式 ( .jar ) 等，可能會因為安全原因，遭到 Gmail 封鎖，而無法下載附檔&amp;lt;ref&amp;gt;[https://support.google.com/mail/answer/6590?hl=zh-Hant 部分檔案類型遭到封鎖 - Gmail說明]&amp;lt;/ref&amp;gt;。可以將檔案壓縮後改放到雲端硬碟 Google 雲端硬碟&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant Google 雲端硬碟可存放的檔案 - 雲端硬碟說明]&amp;lt;/ref&amp;gt;、Dropbox&amp;lt;ref&amp;gt;[https://www.dropbox.com/help/145 為什麼某些檔案無法從一台電腦同步到另一台電腦上？ - Dropbox 說明 - Dropbox]&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 相關頁面 ==&lt;br /&gt;
* {{Gd}} [[Procedure_of_campus_event#email | email 溝通途徑的注意事項]]&lt;br /&gt;
* [[Anti Spam Email|防制廣告信件]]&lt;br /&gt;
* {{Gd}} [https://www.caniemail.com/ Can I email… Support tables for HTML and CSS in emails] {{access | date=2026-04-24}} e.g. [https://www.caniemail.com/features/image-webp/ Can I email… webP image format]&lt;br /&gt;
* [[User_agent#Mail_user_clients_.2F_Mail_user_agents |mail user client]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Comparison_of_webmail_providers Comparison of webmail providers - Wikipedia, the free encyclopedia]&lt;br /&gt;
&lt;br /&gt;
== 相關新聞聯播 ==&lt;br /&gt;
&lt;br /&gt;
{{News feed | title = 電子郵件 OR email OR 團隊溝通 相關新聞聯播 | feed = &amp;lt;rss&amp;gt;https://news.google.com/rss/search?q=%E9%9B%BB%E5%AD%90%E9%83%B5%E4%BB%B6+OR+email+OR+%E5%9C%98%E9%9A%8A%E6%BA%9D%E9%80%9A&amp;amp;hl=zh-TW&amp;amp;gl=TW&amp;amp;ceid=TW:zh-Hant&amp;lt;/rss&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
 &amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Email]] [[Category:Tool]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Capacity_of_Email_Service&amp;diff=26413</id>
		<title>Capacity of Email Service</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Capacity_of_Email_Service&amp;diff=26413"/>
		<updated>2026-07-30T07:57:26Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* 相關頁面 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;單封信件 (含夾帶檔案) 的檔案大小上限 (maximum attachment size) 與建議&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Email服務每封郵件的檔案大小上限 ==&lt;br /&gt;
&#039;&#039;&#039;建議&#039;&#039;&#039;:&lt;br /&gt;
* 檔案大小 (file size) 控制在&#039;&#039;&#039;6-10MB&#039;&#039;&#039;: 因為信件夾帶的檔案經過編碼([http://en.wikipedia.org/wiki/MIME MIME] encode)後，會導致檔案大小變大，所以寄信時的信件(含夾帶的檔案)檔案大小建議能控制在上限的三分之二，即6-10MB，以免被退信。&lt;br /&gt;
* 超過10MB的檔案，可以考慮使用將附檔[[File compression|壓縮]] 或放在Web、FTP、[http://en.wikipedia.org/wiki/Comparison_of_one-click_hosters 線上檔案儲存網站]、[[Snapchat of file sharing | 閱後即焚檔案分享服務]] ex: [https://drive.google.com/ Google Drive] 單一檔案限 5TB&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant&amp;amp;vid=1-635756751147519182-13007898089037315163 檔案大小 - 雲端硬碟說明] {{access | date = 2015-08-20}}&amp;lt;/ref&amp;gt;, DropBox 單一檔案限2GB&amp;lt;ref&amp;gt;[https://www.dropbox.com/help/5 Dropbox 是否有檔案大小的限制或上限？ (Dropbox 說明中心)]&amp;lt;/ref&amp;gt;, [http://www.mediafire.com/ MediaFire](非圖檔的單一檔案限200MB), [http://www.yousendit.com/ YouSendIt](單一檔案限100MB), [http://www.4shared.com/ 4shared.com](單一檔案限50MB)...。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%; min-height: .01%; overflow-x: auto;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|| &amp;lt;b&amp;gt;網站名稱&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;單封信件(含夾帶檔案)的檔案上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;建議的夾帶檔案上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;信箱總容量上限&amp;lt;/b&amp;gt;&lt;br /&gt;
|| &amp;lt;b&amp;gt;備註(拜訪日期)&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://webmail.aol.com/ AOL Mail](免費)&lt;br /&gt;
|| 16MB&amp;lt;ref&amp;gt;[http://help.aol.com/help/microsites/microsite.do?cmd=displayKCPopup&amp;amp;docType=kc&amp;amp;externalId=221717 Cannot send email attachments or embedded files on AOL WebMail- AOL Help]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 10MB&lt;br /&gt;
|| 超過2GB，輸入檢核碼即可增加空間&amp;lt;ref&amp;gt;[http://help.aol.com/help/microsites/microsite.do?cmd=displayKCPopup&amp;amp;docType=kc&amp;amp;externalId=218743 How do I save my emails in AOL WebMail?- AOL Help] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2010-09-11&lt;br /&gt;
|-&lt;br /&gt;
| {{Gd}}&lt;br /&gt;
|| [https://gmail.google.com/ Google Gmail](免費/付費服務)&lt;br /&gt;
|| 25MB&amp;lt;ref&amp;gt;[https://mail.google.com/support/bin/answer.py?answer=8770&amp;amp;topic=1516 Maximum attachment size - Gmail Help]  &amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt; (超過25MB可上傳至Google Drive，最多到 5TB&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant Google 雲端硬碟可存放的檔案 - 雲端硬碟說明]&amp;lt;/ref&amp;gt; )&lt;br /&gt;
|| 15MB&lt;br /&gt;
|| 15G(免費服務)/ 100GB-30TB(付費服務)&amp;lt;ref&amp;gt;[http://mail.google.com/support/bin/answer.py?hl=en&amp;amp;answer=39567 Google Storage - Gmail Help] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [http://www.mail.lycos.com/ Lycos Mail] (免費)&lt;br /&gt;
|| 35MB&amp;lt;ref&amp;gt;[https://cshelp.lycos.com/ics/support/KBAnswer.asp?questionID=73 Is there a limit to the size of the emails that I can send? - Lycos.com Helpdesk]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 21MB&lt;br /&gt;
|| 3G(free) ~ 5G(paid)&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.mail.com/intl/ Mail.com](免費/付費服務)&lt;br /&gt;
|| 50MB&amp;lt;ref&amp;gt;[http://help.mail.com/index.html Mail.com FAQ] - What is the maximum size for sending and receiving email? &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| &#039;&#039;&#039;未限制&#039;&#039;&#039;&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.mail2000.com.tw/ Mail2000](付費服務)&lt;br /&gt;
|| 40MB&amp;lt;ref&amp;gt;[http://doc.mail2000.com.tw/m2k/faq_about_a1-3.htm 單封信件傳輸量及我的檔案的容量有多少？] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| 500MB~12GB&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://mail.pchome.com.tw/ PChome Online](免費)&lt;br /&gt;
|| 10MB&amp;lt;ref&amp;gt;[http://faq.pchome.com.tw/faq_solution.html?f_id=1&amp;amp;q_id=6&amp;amp;c_nickname=mail PC home E-Mail 是否有容量等限制？] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB&lt;br /&gt;
|| 250MB&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://webmail.seed.net.tw/Login.do Seednet](付費服務)&lt;br /&gt;
|| 10MB&amp;lt;ref&amp;gt;[http://webmail.seed.net.tw/web/rule.htm Seednet Webmail使用規範] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB&lt;br /&gt;
|| 2G&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [http://www.url.com.tw/emailstore/index.htm URL智邦生活館](付費服務)&lt;br /&gt;
|| 10MB(付費服務]&amp;lt;ref&amp;gt;[http://vipmail.url.com.tw/vipmail.asp?q=1 URL 智邦生活館 VIP Mail 常見問題集] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 6MB(付費服務)&lt;br /&gt;
|| 2000MB(付費服務)&lt;br /&gt;
|| 2011-11-06&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|| [https://outlook.com outlook.com](免費) 前 hotmail&lt;br /&gt;
|| 34MB&amp;lt;ref&amp;gt;[https://support.office.com/en-us/article/Attach-files-in-Outlook-com-8d7c1ea7-4e5f-44ce-bb6e-c5fcc92ba9ab Attach files in Outlook.com - Outlook]&amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt; (超過可上傳至OneDrive，最多到 15GB(免費) ~ 50GB(付費)&amp;lt;ref&amp;gt;[https://support.office.com/en-us/article/storage-limits-in-outlook-com-7ac99134-69e5-4619-ac0b-2d313bba5e9e?ui=en-US&amp;amp;rs=en-US&amp;amp;ad=US Storage limits in Outlook.com - Outlook]&amp;lt;/ref&amp;gt;)&lt;br /&gt;
|| 20MB+&lt;br /&gt;
|| &lt;br /&gt;
|| 2018-08-25&lt;br /&gt;
|-&lt;br /&gt;
| {{Gd}}&lt;br /&gt;
|| [http://mail.yahoo.com.tw/ Yahoo!奇摩電子信箱](免費/付費服務)&lt;br /&gt;
|| 25MB(免費/付費服務)&amp;lt;ref&amp;gt;[https://tw.help.yahoo.com/kb/%E4%BF%A1%E4%BB%B6%E5%A4%A7%E5%B0%8F-%E9%99%90%E5%88%B6-sln5673.html 信件大小限制]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 15MB(免費/付費服務)&lt;br /&gt;
|| 1TB&lt;br /&gt;
|| 2018-04-21&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [https://protonmail.com/ ProtonMail](免費/付費服務)&lt;br /&gt;
|| 25MB&amp;lt;ref&amp;gt;[https://protonmail.com/support/knowledge-base/attaching-multiple-documents-to-a-message/ Attaching documents to a message and limits - ProtonMail Support]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 15MB&lt;br /&gt;
|| 500MB(免費服務)、5~20GB(免費/付費服務)&amp;lt;ref&amp;gt;[https://protonmail.com/support/knowledge-base/paid-plans/ ProtonMail Plans Explained (Free, Paid, Visionary) - ProtonMail Support]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2016-11-12&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
|| [http://mail.qq.com/ QQ邮箱] 腾讯邮箱服务 (免費服務)&lt;br /&gt;
|| 50MB &amp;lt;br /&amp;gt; 超過限制可上傳至雲端硬碟，最多到 2GB &amp;lt;ref&amp;gt;[http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;id=11&amp;amp;&amp;amp;no=130 一封邮件可以发送多个附件吗？_QQ邮箱帮助中心] &amp;amp; [http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;id=35&amp;amp;&amp;amp;no=206 什么是文件中转站？_QQ邮箱帮助中心] &amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 30MB&lt;br /&gt;
|| &#039;&#039;&#039;未限制&#039;&#039;&#039;&amp;lt;ref&amp;gt;[http://service.mail.qq.com/cgi-bin/help?subtype=1&amp;amp;&amp;amp;no=103&amp;amp;&amp;amp;id=22 QQ邮箱的容量和附件有多大？_QQ邮箱帮助中心]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|| 2018-04-29&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
寄信到 hotmail 收到回信「Delivery Status Notification (Failure)」&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
伺服器的回應如下：&lt;br /&gt;
552 Too much mail data.(31457280 bytes bounded)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
訊息中「31457280 bytes」相當於 31 MB。實際信件的附檔檔案大小約 24 MB，因此需要如上表建議調整到 20 MB 或者是直接上傳到雲端硬碟空間。&lt;br /&gt;
&lt;br /&gt;
== 夾檔的檔案類型 ==&lt;br /&gt;
{{exclaim}} 如果夾檔的檔案類型是執行檔 ( .exe )、程式 ( .jar ) 等，可能會因為安全原因，遭到 Gmail 封鎖，而無法下載附檔&amp;lt;ref&amp;gt;[https://support.google.com/mail/answer/6590?hl=zh-Hant 部分檔案類型遭到封鎖 - Gmail說明]&amp;lt;/ref&amp;gt;。可以將檔案壓縮後改放到雲端硬碟 Google 雲端硬碟&amp;lt;ref&amp;gt;[https://support.google.com/drive/answer/37603?hl=zh-Hant Google 雲端硬碟可存放的檔案 - 雲端硬碟說明]&amp;lt;/ref&amp;gt;、Dropbox&amp;lt;ref&amp;gt;[https://www.dropbox.com/help/145 為什麼某些檔案無法從一台電腦同步到另一台電腦上？ - Dropbox 說明 - Dropbox]&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 相關頁面 ==&lt;br /&gt;
* {{Gd}} [[Procedure_of_campus_event#email | email 溝通途徑的注意事項]]&lt;br /&gt;
* [[Anti Spam Email|防制廣告信件]]&lt;br /&gt;
* {{Gd}} [https://www.caniemail.com/ Can I email… Support tables for HTML and CSS in emails] {{access | date=2026-04-24}} e.g. [https://www.caniemail.com/features/image-webp/ Can I email… webP image format]&lt;br /&gt;
* [[User_agent#Mail_user_clients_.2F_Mail_user_agents |mail user client]]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Comparison_of_webmail_providers Comparison of webmail providers - Wikipedia, the free encyclopedia]&lt;br /&gt;
&lt;br /&gt;
== 相關新聞聯播 ==&lt;br /&gt;
&lt;br /&gt;
{{News feed | title = 電子郵件 OR email OR 團隊溝通 相關新聞聯播 | feed = &amp;lt;rss&amp;gt;https://news.google.com/rss/search?q=%E9%9B%BB%E5%AD%90%E9%83%B5%E4%BB%B6+OR+email+OR+%E5%9C%98%E9%9A%8A%E6%BA%9D%E9%80%9A&amp;amp;hl=zh-TW&amp;amp;gl=TW&amp;amp;ceid=TW:zh-Hant&amp;lt;/rss&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
 &amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Email]] [[Category:Tool]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Document_converter&amp;diff=26412</id>
		<title>Document converter</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Document_converter&amp;diff=26412"/>
		<updated>2026-07-23T07:53:55Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* 文件(Word, PPT...)轉換成Flash */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:File conversion}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;[[{{SERVER}}{{localurl:{{NAMESPACE}}:Document converter|action=edit}} 編輯]]&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenDocument 格式 (.ODT) 轉換... ===&lt;br /&gt;
OpenDocument (.odt)轉 Word (.doc)&lt;br /&gt;
* [https://errerrors.blogspot.com/2019/06/batch-convert-opendocument-odt-to-txt-or-word-docx.html 如何批次轉換 OpenDocument 格式 (.odt) 檔案為純文字 (.txt) 或 Word 格式 (.docx)]&lt;br /&gt;
* [http://download.ithome.com.tw/article/index/id/2120 用Word開啟ODT格式的檔案]: [http://sun-odf-plugin-for-microsoft-office.softpedia.com/ Sun ODF Plugin for Microsoft Office]&lt;br /&gt;
* [http://www.zamzar.com/ Zamzar - Free online file conversion]&lt;br /&gt;
* [https://drive.google.com/ Google Drive] 檔案大小上限: 20 MB&lt;br /&gt;
&lt;br /&gt;
=== Word 轉換成文字檔 (txt) ===&lt;br /&gt;
* [https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/textutil.1.html textutil(1) Mac OS X Manual Page]: [http://osxdaily.com/2014/02/20/batch-convert-docx-to-txt-mac/ How to Batch Convert DOCX Files to TXT Format with textutil in Mac OS X] on {{Mac}} 可批次 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
## 如果是 docx 轉換成 txt&lt;br /&gt;
textutil -convert txt /path/to/*.docx&lt;br /&gt;
&lt;br /&gt;
## 如果是 doc 轉換成 txt&lt;br /&gt;
textutil -convert txt /path/to/*.doc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/drive/my-drive Google 雲端硬碟]&lt;br /&gt;
* [http://www.zamzar.com/ Zamzar - Free online file conversion]([http://www.zamzar.com/conversionTypes.php Conversion Types]): 單一檔案上限為 50 MB&amp;lt;ref&amp;gt;[http://www.zamzar.com/faq.php#Q12 What&#039;s the maximum size of files that I can upload ?]&amp;lt;/ref&amp;gt;、同時間可以執行10個檔案的轉檔。需輸入Email資料。{{access | date=2017-12-19}}&lt;br /&gt;
* [http://www.recoverytools.com/docx/migrator/ DOCX Migrator] v. 2.0 on {{Win}} trial 版本一次可批次5個檔案&lt;br /&gt;
* [https://github.com/PHPOffice/PHPWord PHPOffice/PHPWord: A pure PHP library for reading and writing word processing documents] ([http://phpword.readthedocs.io/en/latest/installing.html Installing/configuring — PHPWord 0.14.0 documentation]) {{exclaim}}  實際使用時遇到解析錯誤 {{access | date=2017-11-18}}&lt;br /&gt;
* [https://tika.apache.org/ Apache Tika - a content analysis toolkit] &amp;lt;pre&amp;gt;java -jar /path/to/tika-app-1.24.1.jar --text --encoding=UTF-8 ./input.docx &amp;gt; ./output.txt&amp;lt;/pre&amp;gt; 將 DOCX 檔案轉成 UTF-8 編碼的 TXT 檔&lt;br /&gt;
* [[Comparison of docx to txt converter]]: Pandoc, LibreOffice and Apache Tika&lt;br /&gt;
&lt;br /&gt;
=== Word 轉換成 Markdown檔 (md) ===&lt;br /&gt;
[https://word-to-markdown.herokuapp.com/ Word to Markdown Converter] {{access | date=2018-03-15}}&lt;br /&gt;
&lt;br /&gt;
=== Word 轉換成其他檔案類型...  ===&lt;br /&gt;
&lt;br /&gt;
Word(.doc)轉換成  OpenDocument(.odt): &lt;br /&gt;
* [http://sourceforge.net/projects/odf-converter OpenXML/ODF Translator Add-in for Office]&lt;br /&gt;
&lt;br /&gt;
Word(.doc)轉換成  PDF 或 OpenDocument(.odt): &lt;br /&gt;
* [http://govforge.e-land.gov.tw/modules/ossiimsconv/ 政府機關 OSS 交流網 - 文件格式轉檔服務] (需註冊成會員, 詳細[http://140.111.66.34/modules/news/article.php?storyid=88 說明])&lt;br /&gt;
* [http://www.openoffice.org/ OpenOffice.org]&lt;br /&gt;
* {{Gd}} [http://docs.google.com/ Google Docs &amp;amp; Spreadsheets]或[http://www.zamzar.com/ Zamzar]&lt;br /&gt;
&lt;br /&gt;
Word(.doc)轉換成 HTML: &lt;br /&gt;
* [http://www.google.com.tw/search?q=DOC2HTML DOC2HTML - Google 搜尋]&lt;br /&gt;
&lt;br /&gt;
批次把Word轉成PDF: &lt;br /&gt;
&lt;br /&gt;
* [http://www.microsoft.com/downloads/details.aspx?FamilyId=4D951911-3E7E-4AE6-B059-A2E79ED87041&amp;amp;displaylang=zh-tw 2007 Microsoft Office 增益集：Microsoft 另存 PDF 或 XPS 檔]&lt;br /&gt;
* [http://www.topdf.de/InfoGB.htm WordToPDF Pro] ([http://blog.xuite.net/emisjerry/tech/7223699  emisjerry的中文介紹])&lt;br /&gt;
* [https://support.microsoft.com/zh-tw/help/826174/how-to-convert-many-documents-to-word-format-automatically-in-word-200 HOW TO：在 Word 2003 中將多份文件自動轉換為 Microsoft Word 格式]&lt;br /&gt;
&lt;br /&gt;
Word(.doc)轉換成 Word 2007 (.docx)檔&lt;br /&gt;
* Word 2007 (.docx)轉成Word 2003(.doc) 或 .doc轉成.docx: [http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&amp;amp;FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466 Microsoft Office Word、Excel 及 PowerPoint 2007 檔案格式相容性套件] {{exclaim}}有時候安裝了相容性套件，仍無法順利轉檔。可以試試上傳到[https://drive.google.com/ Google Drive]線上預覽文件內容。&lt;br /&gt;
* [http://www.doc.investintech.com/ Convert DOCX to DOC Online Free] 教學: [http://www.freegroup.org/2011/02/free-convert-docx-to-doc-online/ 線上 DOCX 轉 DOC 工具，免填信箱、免下載立即用]&lt;br /&gt;
* [https://softwarerecs.stackexchange.com/questions/11687/library-for-converting-microsoft-doc-to-docx-in-python Library for converting Microsoft .doc to .docx in Python - Software Recommendations Stack Exchange] &#039;&#039;un-tested&#039;&#039; 可批次&lt;br /&gt;
* [https://pypi.org/project/python-docx/ python-docx · PyPI] &amp;quot;python-docx is a Python library for creating and updating Microsoft Word (.docx) files.&amp;quot; &#039;&#039;un-tested&#039;&#039; 可批次&lt;br /&gt;
&lt;br /&gt;
=== Apple Pages 文件檔案 (.pages) 轉換成其他檔案類型...  ===&lt;br /&gt;
* [https://beta.icloud.com/#pages iCloud - Pages] 可以轉換成 PDF (文字可以選取複製), Word, ePub。操作方式: (1) 上傳 .pages 檔案 (2) 點選扳手 &amp;amp;#128295; 圖示 (此處圖示用來示意，並非 iCloud 圖示)：檢視 Pages 工具 (3) 下載拷貝 (4) 選擇檔案類型&lt;br /&gt;
* [https://www.apple.com/tw/pages/ Pages] on {{Mac}} 可以轉換成 PDF (文字可以選取複製), Word, TXT, RTF, ePub&lt;br /&gt;
* [https://cloudconvert.com/pages-to-docx pages to docx - CloudConvert] 可以轉換成 PDF (文字可以選取複製), Word, 圖檔等&amp;lt;ref&amp;gt;[https://cloudconvert.com/formats/document/pages pages - Pages Document - CloudConvert]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* {{exclaim}} 「預覽程式.app」版本 10.0（944.5） on {{Mac}} 可以轉成 PDF ，但是遇到內容被截掉一半的問題，而且 PDF 文字不可以選取複製。&lt;br /&gt;
&lt;br /&gt;
=== Apple Keynote 簡報檔案 (.key) 轉換成其他檔案類型...  ===&lt;br /&gt;
Mac Keynote 簡報檔 (key) 轉成 PDF&lt;br /&gt;
* &#039;&#039;$&#039;&#039; 將 key 檔案上傳到 [https://www.icloud.com/ iCloud] --&amp;gt; 列印輸出成 PDF 檔。 (跟 Mac 版 Keynote 軟體輸出的 PDF 檔案大小比較大) {{access | date = 2020-07-17}}&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.apple.com/tw/mac/keynote/ Apple - Mac 版 Keynote]&lt;br /&gt;
* {{exclaim}} Mac 本身的「預覽程式 版本 7」可以將 key 輸出成 PDF 檔，但是版面可能會跑掉，導致頁面下方內容被截掉。{{access | date = 2014-08-11}}&lt;br /&gt;
* {{exclaim}} Google Drive 可線上預覽 Keynote 簡報檔內容。{{access | date = 2020-07-17}}&lt;br /&gt;
* {{exclaim}} [http://www.slideshare.net/upload  SlideShare] 還不支援線上預覽 Keynote 簡報檔 (key)。{{access | date = 2014-08-11}}&lt;br /&gt;
&lt;br /&gt;
Mac Keynote 簡報檔 (key) 轉成 微軟 PowerPoint (pptx)&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.apple.com/tw/mac/keynote/ Apple - Mac 版 Keynote]&lt;br /&gt;
&lt;br /&gt;
=== 文字 (TXT) 轉換成PDF ===&lt;br /&gt;
文字轉成 PDF&lt;br /&gt;
* {{Gd}} 將文字檔拖曳到瀏覽器，在另存成 PDF&lt;br /&gt;
* {{exclaim}} [https://pdfcandy.com/tw/ PDF轉換器 +46個線上PDF工具–PDF Candy] 中文變成亂碼&lt;br /&gt;
* &#039;&#039;$&#039;&#039; Microsoft Word&lt;br /&gt;
&lt;br /&gt;
=== 文件 (Word, Excel, PPT, ePub ...) 轉換成PDF ===&lt;br /&gt;
文件轉換成PDF 桌面軟體: &lt;br /&gt;
* Windows 10 內建的 Microsoft Print to PDF 虛擬印表機&lt;br /&gt;
* {{Gd}} [http://www.bullzip.com/products/pdf/info.php Bullzip PDF Printer] 教學: [http://briian.com/?p=7242 Bullzip PDF Printer v9.0 支援任意文件格式的 PDF 轉檔工具（繁體中文版）]&lt;br /&gt;
* [http://www.pdfpdf.com/batch.html Batch Convert] (trial)&lt;br /&gt;
* [http://www.primopdf.com/ Free PDF Converter - create high-quality PDF from any printable file type]&lt;br /&gt;
* [http://sourceforge.net/projects/pdfcreator/ PDFCreator] 教學: [http://attila01.blogspot.com/2008/09/pdf-pdfcreator.html 人間研究所: 轉 PDF 檔的效率高手 － PDFCreator] (可批次轉檔: 拖曳檔案至轉換清單) {{exclaim}} 有時候會遇到產生空白 PDF 的問題 &lt;br /&gt;
&lt;br /&gt;
ePub 轉成 PDF&lt;br /&gt;
* [http://www.epubconverter.com/epub-to-pdf-converter/ Free EPUB to PDF Converter, Convert EPUB to PDF, EPUB to PDF] 線上轉換服務 {{access | date = 2015-06-17}}&lt;br /&gt;
&lt;br /&gt;
Excel 轉換成PDF&lt;br /&gt;
# 安裝 [http://www.pdfforge.org/pdfcreator PDF Creator] 等虛擬印表機&lt;br /&gt;
# 列印 Excel 檔案到 PDF 虛擬印表機即可產生 PDF 檔案。&lt;br /&gt;
&lt;br /&gt;
文件轉換成PDF 線上轉換服務: &lt;br /&gt;
* [https://skydrive.live.com/ Microsoft SkyDrive]   列印文件(Word, PPT, PPTX 不包含Excel)轉換成PDF&lt;br /&gt;
* [http://www.pdfonline.com/ Doc2PDF Online] from documents or images (檔案大小限制: 2MB) 教學: [http://www.freegroup.org/2010/11/doc2pdf-online/ Doc2PDF Online 將檔案轉成PDF格式，無須下載安裝軟體]&lt;br /&gt;
* [http://www.convertfiles.com/ Convert Files - free and simple online file converter] &lt;br /&gt;
** 中文Word轉成PDF有問題[[Image:Icon exclaim.gif| ]] last visited: 2009-05-02&lt;br /&gt;
** 中文epub電子書檔案轉成PDF OK {{access | date = 2012-11-04}}&lt;br /&gt;
* [http://www.freepdfconvert.com/ PDF Converter, Create PDF Online Free, Document to PDF Conversion Service - Convert Office, Word, Excel, PowerPoint, Images, Web Pages to PDF]...&lt;br /&gt;
* [http://pdfaid.com/doc2pdf.aspx Doc, Excel, Ppt to Pdf Online] 檔案大小限制: 200 KB; 教學: [http://briian.com/?p=7362 (免費) PDFaid 7合1線上PDF轉檔工具（支援中文）] &lt;br /&gt;
* [http://www.youconvertit.com/convertfiles.aspx Free online media file conversion (Document, Images, Audio, Video &amp;amp; Archives)] 中文Word轉成PDF有問題[[Image:Icon exclaim.gif| ]] last visited: 2009-05-19&lt;br /&gt;
* [http://docs.google.com/viewer Google 文件 - 檢視器] 將網路上的Word檔轉成PDF {{access | date = 2011-04-23}} 教學: [http://www.labnol.org/internet/convert-web-docs-to-pdf/19219/ Convert Web Documents to PDF with Google Docs Viewer]&lt;br /&gt;
* [https://www.wordtopdf.com/ Word to PDF Converter]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip | tip= 簡報(PPT)轉檔成 PDF 注意事項:&lt;br /&gt;
: 如果簡報本身有設置動作，產生的 PDF 檔只會顯示原本轉檔前簡報檔最上一層的動作畫面}}&lt;br /&gt;
[[Category:Tips]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 文件(TXT, CSV...)轉換成Excel ===&lt;br /&gt;
[[Microsoft_Excel#Batch_convert_TXT.2FCSV_to_EXCEL | Batch convert TXT/CSV to EXCEL]] &#039;&#039;&#039;可批次&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 文件轉換成圖片 ===&lt;br /&gt;
文件檔案轉換成圖片檔案&lt;br /&gt;
* 使用 [http://www.azofreeware.com/2009/09/virtual-imageprinter-155.html Virtual ImagePrinter 2.1 - 把任何檔案列印成圖片 - 阿榮福利味 - 免費軟體下載]&lt;br /&gt;
* 使用 [http://www.rarefind.com/paperlessprinter/ Paperless Printer] for {{Win}} v. 6.0.0.1，將檔案列印成圖片或 PDF。&lt;br /&gt;
* 將文件轉成 PDF ，再轉成圖片&lt;br /&gt;
* 使用 [[Screen Capture | 截圖軟體]]，將所選區域另存成圖片&lt;br /&gt;
&lt;br /&gt;
=== 文字轉換成圖片 ===&lt;br /&gt;
* {{Gd}} [http://www.irfanview.com/ IrfanView] v.4.10 選取文字複製後，直接貼到IrfanView。&lt;br /&gt;
* [http://www.getpaint.net/ Paint.NET] 選取文字複製後，直接貼到Paint.NET。 {{exclaim}} 缺點: 文字會變大&lt;br /&gt;
* MS Word: 選取文字複製後，選擇「選擇性貼上」，再選「圖片 (增強型中繼檔)」。貼到另一個 MS Word 新檔案，再另存圖檔 (背景已去背) {{exclaim}} 缺點: 如果只是要將單字轉成圖片，產生的圖形過長，多了多餘的空白。 (也可以選擇貼到小畫家，但是產生的圖片比較小&amp;lt;ref&amp;gt;[https://briian.com/7186/ 把 Word 轉成 JPG 圖檔，放到網路上！ – 【重灌狂人】]&amp;lt;/ref&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Excel 轉成圖片 ====&lt;br /&gt;
* 選取 Excel 的儲存格區域，複製貼上到小畫家，另存圖檔 (png, jpg) 即可。教學: [https://dotblogs.com.tw/knightzone/2013/10/29/126115 將Excel試算表文件轉圖片]&lt;br /&gt;
&lt;br /&gt;
==== PPT轉換成圖片 ====&lt;br /&gt;
* {{Gd}} 選取該頁簡報的全部物件，貼到小畫家上&lt;br /&gt;
* 使用[[Screen Capture | 擷圖軟體]]手動擷取簡報畫面為圖檔&lt;br /&gt;
* MS PowerPoint 2002: 選單 -&amp;gt; 另存檔案 -&amp;gt; 檔案類型選擇圖檔。 {{exclaim}} 微軟正黑體的文字，轉換後會糊掉。&lt;br /&gt;
&lt;br /&gt;
=== 網頁 轉成 PDF ===&lt;br /&gt;
[[%E7%B6%B2%E9%A0%81%E6%AD%B8%E6%AA%94#.E7.B7.9A.E4.B8.8A.E7.B6.B2.E9.A0.81.E8.BD.89.E6.AA.94.E6.88.90PDF.E6.9C.8D.E5.8B.99|網頁 轉成 PDF]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 網頁表格 轉成 CSV/Excel ===&lt;br /&gt;
[[Convert HTML Table To CSV/Excel]]&lt;br /&gt;
&lt;br /&gt;
=== Markdown ===&lt;br /&gt;
* 網頁轉 Markdown: [[Convert webpage to markdown]]&lt;br /&gt;
* Markdown 轉表格：[https://tableconvert.com/markdown-to-excel Convert Markdown Table to Excel Online - Table Convert Online]&lt;br /&gt;
* [https://gist.github.com/mkweskin/5414303 Convert markdown to mediawiki with pandoc]&lt;br /&gt;
*# [https://pandoc.org/installing.html Pandoc - Installing pandoc]&lt;br /&gt;
*# Key in the command: {{kbd | key=&amp;lt;nowiki&amp;gt;pandoc -f markdown -t mediawiki test.md -o test.txt&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* [https://tools.planetoid.info/markdown-to-mediawiki/ Markdown 轉 MediaWiki]&lt;br /&gt;
&lt;br /&gt;
=== 文字 (CSV, TSV) 轉成 網頁表格 ===&lt;br /&gt;
[https://www.mattsbits.co.uk/webtools/text_to_html/index.php Text To HTML Converter] {{access | date=2020-08-18}}&lt;br /&gt;
&lt;br /&gt;
=== Excel ===&lt;br /&gt;
==== Excel 轉成 ODS (OpenDocument 試算表) ====&lt;br /&gt;
* {{Gd}} [https://github.com/dagwieers/unoconv dagwieers/unoconv: Universal Office Converter - Convert between any document format supported by LibreOffice/OpenOffice.][http://dag.wiee.rs/home-made/unoconv/] 使用 command 轉換。在 {{Win}} 使用 wildcards 會遇到問題&amp;lt;ref&amp;gt;[https://ask.libreoffice.org/en/question/4152/batch-conversion-with-unoconv-in-windows/ batch conversion with unoconv in Windows [closed] - Ask LibreOffice]&amp;lt;/ref&amp;gt;，但是因為使用 command 可以自行組合多行命令，達到批次轉換檔案格式的目的。&lt;br /&gt;
* zamzar: [http://www.zamzar.com/convert/xls-to-ods/ Convert your XLS file to ODS now - Free, Simple and Online] 一次可以選 10 個檔案進行批次轉換 {{exclaim}} 遇到部分 ODS 檔案無法開啟的狀況 {{access | date = 2019-07-10}}&lt;br /&gt;
* [https://onlineconvertfree.com/convert-format/xlsx-to-ods/ Convert XLSX to ODS online, free .xlsx to .ods changing] 免費版一次同時可以 2 個檔案進行批次轉換&lt;br /&gt;
* [https://www.aconvert.com/document/xlsx-to-ods/ XLSX to ODS - Convert document online] (中文介面: [https://www.aconvert.com/tw/document/xlsx-to-ods/ XLSX轉ODS - 在線轉換文檔文件]) 一次只能選擇一個檔案上傳 {{access | date = 2019-07-10}}&lt;br /&gt;
* [http://www.convertfiles.com/converter.php Convert Files - free online file converter and flash video downloader.Convert videos, audio files, documents and ebooks.Flash video to MP3] {{exclaim}} 遇到部分 Excel 檔案無法轉換的狀況，錯誤訊息 &amp;quot;An error occurred during conversion of your file. &amp;quot; {{access | date = 2019-07-10}}&lt;br /&gt;
* [https://support.office.com/zh-hk/article/%E4%BD%BF%E7%94%A8-Excel-%E9%96%8B%E5%95%9F%E6%88%96%E5%84%B2%E5%AD%98-OpenDocument-%E8%A9%A6%E7%AE%97%E8%A1%A8-ods-%E6%A0%BC%E5%BC%8F%E7%9A%84%E5%B7%A5%E4%BD%9C%E8%A1%A8-60eb7a91-dc21-44a5-b4ac-c269565c59bf 使用 Excel 開啟或儲存 OpenDocument 試算表 (.ods) 格式的工作表 - Excel]&lt;br /&gt;
* [https://www.coolutils.com/TotalExcelConverter Excel Converter That Supports All Types Of Spreadsheets] v. 5.1.0.241 {{exclaim}} 遇到部分 ODS 檔案損壞的狀況&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Excel 轉成 PowerPoint (簡報) ====&lt;br /&gt;
[[Convert excel to powerpoint]]&lt;br /&gt;
&lt;br /&gt;
==== Excel 轉成 CSV 檔案 ====&lt;br /&gt;
&lt;br /&gt;
1. 1. Obtain and install [https://zh-tw.libreoffice.org/download/download-libreoffice/ LibreOffice]&lt;br /&gt;
&lt;br /&gt;
2. Open your terminal and execute the following command &amp;lt;ref&amp;gt;[https://stackoverflow.com/questions/5256733/convert-xlsx-file-to-csv-using-batch excel - Convert xlsx file to csv using batch - Stack Overflow]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
soffice --headless --convert-to csv *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For Mac users, use the full path to soffice:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 電子書 (epub) 轉成網頁檔 (html) ===&lt;br /&gt;
[[Convert epub to html]]&lt;br /&gt;
&lt;br /&gt;
=== 圖片 轉成 PDF ===&lt;br /&gt;
* {{Win}}  [http://web.newsguy.com/lmgava/i2pdf/index.php i2pdf] 教學: [http://briian.com/?p=6546 i2pdf 將大量圖檔轉成PDF文件檔] &#039;&#039;&#039;可批次處理&#039;&#039;&#039;{{Gd}}&lt;br /&gt;
* {{Mac}} [[Convert many images to one PDF on Mac | Convert many images to one PDF]] 使用預覽程式 &#039;&#039;&#039;可批次處理&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== PDF 轉換 ===&lt;br /&gt;
[[PDF conversion]]&lt;br /&gt;
&lt;br /&gt;
=== 其他 ===&lt;br /&gt;
&lt;br /&gt;
電子書&lt;br /&gt;
* 將[http://www.microsoft.com/reader/default.mspx Microsoft Reader]的電子書.LIT格式轉換成[http://www.idpf.org/ 開放格式](擷取出網頁與圖檔): [http://www.convertlit.com/ ConvertLIT] 1.8&lt;br /&gt;
&lt;br /&gt;
[[Document online viewer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Excel 檔案 &amp;lt;-&amp;gt; CSV 檔案&lt;br /&gt;
* [http://bytescout.com/?q=/products/enduser/spreadsheettools/spreadsheettools.html Batch convert XLS, XLSX, CSV into HTML, PDF, XLSX, XLS and CSV formats with Bytescout Spreadsheet Tools]&lt;br /&gt;
&lt;br /&gt;
Youtube&lt;br /&gt;
* 將 Youtube 影片底下的留言轉成圖片的工具 https://kolpower.cc/cmt/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
references&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Accessibility&amp;diff=26411</id>
		<title>Accessibility</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Accessibility&amp;diff=26411"/>
		<updated>2026-07-21T10:18:49Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* 相關資源 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;網路無障礙與網頁親和力&lt;br /&gt;
&lt;br /&gt;
{{Tips}} 「他們需要的不是同情與憐憫，而是實質的機會！」語出自[http://www.apad.org.tw 中華民國身心障礙者藝文推廣協會網站]。&lt;br /&gt;
&lt;br /&gt;
該技術目的使得有殘疾的人也可以使用科技的好處。例如一個無障礙的網站(accessible Websites)可以讓視覺、聽覺、行動能力與認知能力有障礙的人可以無礙的進行瀏覽網站內容。無障礙的設計也有利於那些使用較為老舊、運算速度較慢的電腦使用者。&lt;br /&gt;
&lt;br /&gt;
美國1998年復健法（Rehabilitation Act）五○八條款(Section 508)通過，要求公共組織2001/6/25以後，確保所有的電子及資訊科技能讓受雇於政府或一般公立機構的身心障礙者使用，受到影響的科技硬體包含了影印機、傳真機、電話以及其他電子裝置，而同樣地在軟體部分則包含了網站及套裝軟體等等。詳情請看 [https://www.section508.gov/ Section508.gov] 或 [http://www.access-board.gov/508.htm Access Board] (Eva Kaplan-Leiserson)&lt;br /&gt;
&lt;br /&gt;
== 網站/網頁親和力 ==&lt;br /&gt;
=== 文章 ===&lt;br /&gt;
* Jedi (2003). [http://jedi.org/blog/archives/002537.html 網路無障礙與網頁親和力 | Jedi&#039;s BLOG]&lt;br /&gt;
* Jedi (2016). [http://jedi.org/blog/archives/006177.html 網站設計技術與無障礙要求 | Jedi&#039;s BLOG]&lt;br /&gt;
* hlb (2003). [http://ccca.nctu.edu.tw/~hlb/articles/archives/000065.php 障礙重重的無障礙網路空間服務網] 原始連結失連，請點選[http://wayback.archive.org/web/20030501132235/http://ccca.nctu.edu.tw/~hlb/articles/archives/000065.php 備份網頁] &lt;br /&gt;
* 洪朝貴 (2002). [https://www.cyut.edu.tw/~ckhung/a/c021.php 文書處理第零課: 放下對外觀的執著]&lt;br /&gt;
* Musings: [http://golem.ph.utexas.edu/~distler/blog/accessibility.html Accessibility Statement]&lt;br /&gt;
* Dominique Hazaël-Massieux: [http://www.w3.org/2002/03/csslayout-howto Tableless layout HOWTO] 2002/11/19&lt;br /&gt;
* idplay: [http://blog.elixus.org/acer/archives/000381.html web accessibility &amp;amp; userability] December 31, 2002&lt;br /&gt;
* Wei-Hsun Chen (2019). [https://medium.com/uxeastmeetswest/%E5%8F%AF%E9%81%94%E6%80%A7%E8%A8%AD%E8%A8%88-design-for-accessibility-%E5%9F%BA%E6%96%BC%E4%BB%8B%E9%9D%A2%E4%B9%8B%E4%B8%8A-98617b6ae819 可達性設計(Design for Accessibility) — 基於介面之上 – UXeastmeetswest – Medium]&lt;br /&gt;
&lt;br /&gt;
=== 機構網站 ===&lt;br /&gt;
* [https://accessibility.moda.gov.tw/ 無障礙網路空間服務網] (Formely [http://www.gov.tw/activity/enable/index.htm 電子化政府無障礙網路服務])&lt;br /&gt;
&lt;br /&gt;
== 遵循標準、認證 ==&lt;br /&gt;
* [http://bobby.watchfire.com/bobby/html/en/index.jsp Bobby AAA 認證]&lt;br /&gt;
* World Wide Web Consortium (W3C) [http://www.w3.org/WAI/ Web Accessibility Initiative] (簡稱 WAI, 資訊網親和/可及性推動組織)，發佈的[http://www.w3.org/TR/WAI-WEBCONTENT/ Web Content Accessibility Guidelines] 1.0(簡稱WCAG 1.0）[http://www2.csj.ks.edu.tw/~tch023/accessibility/overint.htm WCAG中文翻譯]&lt;br /&gt;
* [http://www.section508.gov/ Section 508 認證]&lt;br /&gt;
* [http://validator.w3.org/ HTML/XHTML 1.0 Strict 認證(Validator)]: MarkUp Validation Service&lt;br /&gt;
&lt;br /&gt;
== 親和性書籍 ==&lt;br /&gt;
* [http://www.diveintoaccessibility.org/ Dive Into Accessibility] [http://dia.z6i.org/ 在 30 天內打造更具親和力的網站] ([https://web.archive.org/web/20210122061559/http://dia.z6i.org/ Wayback 上的網頁備份]) (GNU Free Documentation License)&lt;br /&gt;
* [http://joeclark.org/book/sashay/serialization/ Building Accessible Websites] by Joe Clark ISBN: 073571150X&lt;br /&gt;
&lt;br /&gt;
== 親和力參考文獻 ==&lt;br /&gt;
* [http://www.w3.org/TR/WCAG10/ W3 親和力指導原則]解釋了每一個指導原則背後的理由。&lt;br /&gt;
* [http://www.w3.org/TR/WCAG10-TECHS/ W3 親和力技術]解釋了如何採行每一個指導原則。&lt;br /&gt;
* [http://www.w3.org/TR/WCAG10/full-checklist.html W3 親和力核對表]可以作為忙碌開發者的親和力指引。&lt;br /&gt;
* 美國聯邦政府 [http://www.access-board.gov/sec508/guide/1194.22.htmSection 508 親和力指導原則]。&lt;br /&gt;
&lt;br /&gt;
== 親和力軟體 ==&lt;br /&gt;
* [http://www.freedomscientific.com/fs_downloads/jaws.asp JAWS] 是 Windows 上的螢幕朗讀軟體(Screen Reader)，這裡提供了可以下載的限時展示版。&lt;br /&gt;
* [http://www-3.ibm.com/able/hpr.html Home Page Reader] 是 Windows 上的螢幕朗讀軟體，這裡提供了可以下載的展示版。&lt;br /&gt;
* [http://lynx.browser.org/ Lynx] 是一個免費的純文字瀏覽器，搭配可覆新的布拉耶點字顯示器後就可以給盲人使用。&lt;br /&gt;
* [http://links.sourceforge.net/ Links] 是一個給頻寬不足的視覺性使用者用的純文字瀏覽器。&lt;br /&gt;
* [http://www.opera.com/ Opera] 是一個配備許多親和力功能的視覺性瀏覽器，包括有文字縮放、自訂樣式表、圖片標定等多樣功能。有提供免費下載的版本。與 Windows 、 Macintosh 、 Linux 和許多其他的作業系統相容。&lt;br /&gt;
* [http://ais.z6i.org/web/resources/toolbar/ 網站親和力工具列]: 由澳洲國家資訊暨圖書部門 ([http://www.nils.org.au/ NILS]) 的親和資訊解決方案 ([http://www.nils.org.au/ais/ Accessible Information Solutions], AIS) 團隊所提供，由[http://jedi.org/blog/ Jedi]中文化。功能包含&lt;br /&gt;
** 指認網頁上的元件&lt;br /&gt;
** 改善第三方線上應用程式的使用&lt;br /&gt;
** 模擬使用者經驗&lt;br /&gt;
** 提供參考資料及額外資源的鏈結&lt;br /&gt;
* [https://chrome.google.com/webstore/detail/spectrum/ofclemegkcmilinpcimpjkfhjfgmhieb/related Spectrum]: {{chrome}} 瀏覽器上的擴充套件，模擬不同眼疾觀看網頁的效果。例如紅色盲 (protanopia)、紅色弱視 (protanomaly)、綠色盲 (deuteranopia)、綠色弱視 (deuteranomaly)等。&lt;br /&gt;
* [https://www.figma.com/community/plugin/733343906244951586/Color-Blind Color Blind | Figma Community] {{access | date=2023-06-21}}&lt;br /&gt;
&lt;br /&gt;
== 親和力服務 ==&lt;br /&gt;
* [http://wave.webaim.org/ WAVE Web Accessibility Tool] {{access | date = 2021-03-07}}&lt;br /&gt;
* [http://validator.w3.org/ HTML Validator] 是一個用來檢查網頁是否吻合已公開的 HTML 標準的免費服務。&lt;br /&gt;
* [http://www.delorie.com/web/wpbcv.html Web Page Backward Compatibility Viewer] 這個工具可以用來檢視當妳的網頁，看看若沒有各種流行的瀏覽器功能時，它會變成怎樣。&lt;br /&gt;
* [http://www.delorie.com/web/lynxview.html Lynx Viewer] 是一個讓妳檢視網頁在 Lynx 裡看起來會像甚麼的免費服務。&lt;br /&gt;
* [https://www.handicap-free.nat.gov.tw/ 國家通訊傳播委員會 無障礙網路空間服務網]&lt;br /&gt;
* [[Check Browser Compatibility]] 檢視網頁在不同瀏覽器裡看起來會像甚麼。&lt;br /&gt;
* &#039;&#039;停止服務&#039;&#039;&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Bobby_(software) Bobby (software) - Wikipedia]&amp;lt;/ref&amp;gt; [http://www.cast.org/bobby/ Bobby] 是一個分析網頁是否遵照親和力指導原則的免費服務。也提供全功能的商業版本。&lt;br /&gt;
&lt;br /&gt;
文字顏色與背景顏色對比&lt;br /&gt;
&lt;br /&gt;
* [https://webaim.org/resources/contrastchecker/ WebAIM: Color Contrast Checker] 檢視文字前景與背景顏色的對比率 (Contrast Ratio) ，是否符合「無障礙網頁內容指引」(WCAG) 2.0規範建議。{{access | date = 2016-09-13}}&lt;br /&gt;
* [http://www.had2know.com/technology/color-contrast-calculator-web-design.html How to Calculate Color Contrast from RGB Values]([http://web.archive.org/web/20161210010555/http://www.had2know.com/technology/color-contrast-calculator-web-design.html 網頁備份]) {{access | date = 2016-11-07}}&lt;br /&gt;
* [https://colorable.jxnblk.com/ Colorable] 介紹: [https://free.com.tw/colorable/ Colorable 網頁色彩線上產生器，可產生符合 WCAG 規範配色組合] {{access | date = 2017-01-02}}&lt;br /&gt;
* [https://www.toptal.com/designers/colorfilter Toptal Color Blind Filter] 「適合在網頁版面設計完畢之後，確認目前的顏色配置，是否會造成色盲、色弱者辨識困難的小工具。」出處：[https://www.facebook.com/loveudfish/photos/a.10151967822379750.1073741826.199162759749/10156644242119750/?type=3&amp;amp;theater 愛˙通用設計的小魚]&lt;br /&gt;
* [https://color.a11y.com/ Color Contrast Accessibility Validator] {{access | date = 2021-03-07}}&lt;br /&gt;
* {{Chrome}} [https://developers.google.com/web/updates/2018/01/devtools#a11y What&#039;s New In DevTools (Chrome 65)  |  Web  |  Google Developers] [https://remysharp.com/2017/08/17/contrast-ratio-in-devtools Contrast ratio in devtools] 開發者工具的調色盤增加 Contrast Ratio 面板，可以方便知道背景文字顏色的對比&lt;br /&gt;
&lt;br /&gt;
其他服務工具清單&lt;br /&gt;
&lt;br /&gt;
* [https://www.w3.org/WAI/ER/tools/ Web Accessibility Evaluation Tools List]&lt;br /&gt;
&lt;br /&gt;
== 相關資源 ==&lt;br /&gt;
* [http://www.webaim.org/ WebAIM] 是一個投注於改善線上學習材料親和力的非營利組織。&lt;br /&gt;
* [http://trace.wisc.edu/world/web/ Designing More Usable Web Sites] 列出了大量額外的資源。&lt;br /&gt;
* [http://www.anybrowser.org/campaign/index.html Viewable with Any Browser: Campaign]&lt;br /&gt;
* [http://www.batol.net/index.asp 無障礙全球資訊網]&lt;br /&gt;
* [https://twitter.com/bernardtyers/status/791673687707713537?s=06 Bernard Tyers on Twitter: Our @HODigital Access Needs posters have been translated into Chinese for Taiwan! Thank you @VioletVivirand on Github! #a11y #accessibility] {{access | date = 2016-12-20}}&lt;br /&gt;
* [https://coseeing.org/ Coseeing 嶼我共視] 「透過多元形式（工具開發、部落格、推廣活動）讓大眾理解障礙者的真實需求與生活情況。目標是讓所有人都能「共同看見」世界，促進共融與理解。」 {{access | date = 2026-07-21}}&lt;br /&gt;
&lt;br /&gt;
== 多國語言（Multilingual Support） ==&lt;br /&gt;
* [http://blog.elixus.org/jedi/archives/000785.html Jedi&#039;s BLOG: 網誌國際化]&lt;br /&gt;
&lt;br /&gt;
* [http://glossary.pank.org/ 中文化辭彙搜尋]：輸入中文或英文搜尋，結果顯示兩岸不同的電腦用語。 {{access | date = 2016-09-13}}&lt;br /&gt;
&lt;br /&gt;
* [http://www.alanwood.net/unicode/ Unicode and Multilingual Support in HTML, Fonts, Web Browsers and Other Applications]&lt;br /&gt;
&lt;br /&gt;
* [http://www.csie.ntu.edu.tw/~b88062/i18n/utf8term.html big5 轉換成 utf8]、[http://freebsd.sinica.edu.tw/hanzi/ 漢字處理]&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;B&amp;gt;相關概念：&amp;lt;/B&amp;gt;翻譯([http://directory.google.com/Top/Kids_and_Teens/School_Time/Foreign_Languages/Multilingual_Translators/?tc=1 Multilingual Translators])、國際化([http://directory.google.com/Top/Computers/Software/Globalization/?tc=1 Globalization])&lt;br /&gt;
&lt;br /&gt;
== 未分類 ==&lt;br /&gt;
* [http://home.kimo.com.tw/citybjc/ 阿彭的個人網站]&lt;br /&gt;
&lt;br /&gt;
* [http://ilyagram.org/archives/000848.html 導一齣瀏覽器的史詩戰役] by [http://ilyagram.org/ ilya]&lt;br /&gt;
&lt;br /&gt;
* [http://140.128.164.2/~j8805/dowba/archives/2003/08/000006.php 聾啞] by Dowba&lt;br /&gt;
: 我認識一位聾啞人士，他是我姨丈的大哥，也就是我表哥的大伯，自出生下來便啞了，一直到我小學不知幾年級的時候因病去世了，我忘記那是什麼時候了。因為生活不方便的關係，一直和我姨丈他們一家住在一起，生活圈沒有很大，也是因為言語不方便的關係，印象中每次去他們家的時候，我都稱他為「啞巴大伯」，和我表哥一樣也稱他為大伯，這樣子才顯親切，而他也不避諱被人稱作啞巴，總是很親切的招招手打聲招呼。……&lt;br /&gt;
&lt;br /&gt;
* [http://shds.med.ntcn.edu.tw/blog/ 聽語障礙科學研究所]&lt;br /&gt;
* [http://www.microsoft.com/enable/ Microsoft Accessibility]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
建議關鍵字: Web Interoperability, Best Viewed With Any Browser, universal access (普及近用)&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/WAI/UA/ User Agent Accessibility Guidelines Working Group (UAWG)]&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/TR/UAAG10/ User Agent Accessibility Guidelines 1.0]&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/Promotion/WIP/ WIP -- Web Interoperability Pledge] &#039;&#039;expired data&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.anybrowser.org/campaign/ Viewable with Any Browser: Campaign]&lt;br /&gt;
&lt;br /&gt;
* [http://www.browserlist.browser.org/ The Browser List Project (web browsers in June 2000)]&lt;br /&gt;
&lt;br /&gt;
* [http://developer.gnome.org/projects/gap/access-def.html The GNOME Accessibility Project]&lt;br /&gt;
&lt;br /&gt;
* [http://toget.pchome.com.tw/intro/network_www/network_www_plugin/4244.html BrowserSizer]:BrowserSizer 可以提供網頁的設計人員以不同的「視窗大小」來觀看網頁的內容展示及版面的配置狀況，再也不用自行去變更螢幕解析度了，在網頁的設計上更能得心應手。&lt;br /&gt;
&lt;br /&gt;
* 通用設計(universal design)&lt;br /&gt;
&lt;br /&gt;
其他網頁設計概念&lt;br /&gt;
* 易用性([[Usability]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
資料來源：[http://dia.z6i.org/ 在 30 天內打造更具親和力的網站] ([https://web.archive.org/web/20210122061559/http://dia.z6i.org/ Wayback 上的網頁備份]) (GNU Free Documentation License v. 1.1)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]] [[Category:Translation]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Boot_up_Tasks&amp;diff=26410</id>
		<title>Boot up Tasks</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Boot_up_Tasks&amp;diff=26410"/>
		<updated>2026-07-20T02:55:53Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* 快捷文字與自動替換文字 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;增進電腦或網站的使用效率，或將例行性工作任務簡化，增加工作效率&lt;br /&gt;
: 如果是要改善電腦效能，請看 [[System Check]]&lt;br /&gt;
&lt;br /&gt;
== 自動檢查、追蹤 ==&lt;br /&gt;
自動檢查信件(POP3)&lt;br /&gt;
* Gmail&lt;br /&gt;
** [https://chrome.google.com/webstore/detail/checker-plus-for-gmail/oeopbcgkkoapgobdbedcemjljbihmemj Checker Plus for Gmail] for {{Chrome}}{{access| date=2012-10-29}}  similar: [https://chrome.google.com/extensions/detail/mihcahmgecmbnbcchbopgniflfhgnkff Google mail checker] &lt;br /&gt;
** [http://mail.google.com/support/bin/answer.py?hl=zh-Hant&amp;amp;answer=9429 Gmail 通知程式]&lt;br /&gt;
* [http://toget.pchome.com.tw/intro/network_email/network_email_check/9779.html Jet-Mailmonitor](舊版還不錯用) or [http://www.jetaudio.com/products/jetmailmonitor/index.html JetMailmonitor] (email checker)&lt;br /&gt;
&lt;br /&gt;
訂閱自訂關鍵字的新聞/網頁/群組討論等訊息 &lt;br /&gt;
* [http://www.google.com/alerts?hl=zh-tw Google 快訊] (last visited: April 12, 2006)&lt;br /&gt;
** [http://planetoid.info/weblog/2006/01/03/000530.html 使用Google快訊(Google alert)訂閱國外訊息]&lt;br /&gt;
* [https://www.recordedfuture.com/ Recorded Future - Unlock The Predictive Power Of The Web]&lt;br /&gt;
&lt;br /&gt;
訂閱網頁更新的通知 (針對沒有提供[[RSS]]的網站)&lt;br /&gt;
* * {{Gd}} [https://chromewebstore.google.com/detail/distill-web-monitor/inlikjemeeknofckkjolnjbpehgadgge Distill Web Monitor] for {{Chrome}} or {{Edge}}&lt;br /&gt;
* [http://libraryviews.blogsome.com/2006/03/12/280/ Library Views 圖書館觀點 :: 替網頁建立 RSS feed :: March :: 2006] 2006-03 (last visited: April 28, 2006)&lt;br /&gt;
&lt;br /&gt;
More on [[Monitor webpage content update]]&lt;br /&gt;
&lt;br /&gt;
== 自動執行程式 ==&lt;br /&gt;
開機時執行程式&lt;br /&gt;
* {{Win}} [https://dotblogs.com.tw/may05005/2016/01/21/110533 Win 10 &amp;quot;啟動&amp;quot;資料夾的位置在那裏? | 郭爸爸園地 - 點部落]&lt;br /&gt;
* {{Win}} [https://support.microsoft.com/zh-tw/kb/2806079 Windows 8 怎麼找不到啟動資料夾？（一點通系列）] &lt;br /&gt;
* {{Linux}} [https://www.digitalocean.com/community/tutorials/how-to-configure-a-linux-service-to-start-automatically-after-a-crash-or-reboot-part-1-practical-examples How To Configure a Linux Service to Start Automatically After a Crash or Reboot – Part 1: Practical Examples | DigitalOcean] {{access | date=2018-02-17}}&lt;br /&gt;
&lt;br /&gt;
排程指定時間執行程式&lt;br /&gt;
* {{Win}} 使用[http://www.splinterware.com/products/wincron.htm System Scheduler] 軟體、或 Windows 內建 [https://technet.microsoft.com/zh-tw/library/cc721931.aspx 啟動工作排程器](task scheduler)&lt;br /&gt;
* {{Linux}} [http://linux.vbird.org/linux_basic/0430cron.php 鳥哥的 Linux 私房菜 -- 第十五章、例行性工作排程(crontab)]&lt;br /&gt;
&lt;br /&gt;
== 電腦操作行為重構(refactoring)、巨集與批次處理 ==&lt;br /&gt;
=== 批次處理/巨集(macro) ===&lt;br /&gt;
* [[Batch Process]] - 批次處理相同的工作任務&lt;br /&gt;
* [https://www.alfredapp.com/ Alfred - Productivity App for Mac OS X]: [https://www.alfredforum.com/forum/3-share-your-workflows/ Share your Workflows - Alfred App Community Forum], [http://alfredworkflow.com/ Alfred 2 Workflow List | Search, Install and Share]&lt;br /&gt;
&lt;br /&gt;
=== 快捷文字與自動替換文字 === &lt;br /&gt;
* MS Word(商業軟體)的[http://office.microsoft.com/zh-tw/assistance/CH060831701028.aspx 自動圖文集][http://office.microsoft.com/en-us/assistance/HP051860281033.aspx]: Word 會在鍵入四個字元(或三個中文字)之後開始顯示插入項目提示。&lt;br /&gt;
* [http://www.openoffice.org/ OpenOffice.org] Writer的[http://blog.yam.com/emisjerry/archives/322572.html 自動圖文集(AutoText)與自動校正(AutoCorrect)]&lt;br /&gt;
* [http://www.iq-t.com/PRODUCTS/going_01.asp 自然輸入法](商業軟體)片語輸入(快捷文字與自動替換文字, quick texts and text replacements)功能: 前導字元[`](與符號 ~ 相同鍵盤按鍵)加上片語代號輸入，輸入英文出現中文片語（略語）；例如先定義「台北市」片語為[TPE]，只要輸入[`TPE]即自動變成「台北市」&lt;br /&gt;
* [http://www.microsoft.com/taiwan/windowsxp/ime/windowsxp.htm 微軟新注音輸入法 2003]詞語快速輸入: 輸入` (前導字元)及使用者造詞中所定義的捷徑和ENTER鍵即可。 &lt;br /&gt;
* [[Auto-completion in Notepad plus]]([[Win32OSS|freeware]]): 按下自訂的快速鍵，啟用常用字詞的下拉式清單。&lt;br /&gt;
* 快速輸入文字的秘訣: 預期輸入「程式碼」，但是輸入法提供的自動選字不是「程式碼」，可以改成輸入「程式號碼」再刪除「號」字，減少選字的時間。&lt;br /&gt;
* {{Mac}} [https://support.apple.com/zh-tw/guide/mac-help/mh35735/mac 在 Mac 上取代文件中的文字和標點符號 - Apple 支援 (台灣)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;使用 macOS 「文字替代」&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
目的節省輸入「continue」的時間，操作步驟：&lt;br /&gt;
&lt;br /&gt;
# 點選左上角的蘋果選單（），選擇「系統設定」。&lt;br /&gt;
# 在左邊的側邊欄中選擇「鍵盤」。&lt;br /&gt;
# 點選「文字替代」。&lt;br /&gt;
# 點擊「新增」按鈕（+），在「輸入碼」欄位輸入快捷文字（例如 ctn），在「取代內容」欄位輸入完整文字（例如 continue）。&lt;br /&gt;
# 點選「完成」儲存設定。&lt;br /&gt;
&lt;br /&gt;
=== 自動填表 (網站註冊填表時，自動填寫基本個人資訊) ===&lt;br /&gt;
* [http://www.roboform.com/ RoboForm: Password Manager, Form Filler, Password Generator, Fill &amp;amp; Save Forms] for IE &amp;amp; [[MozillaFirefox|Fx]]&lt;br /&gt;
** Richy的評論: [http://www.richyli.com/blog/2006/09/roboform.html Richy&#039;s Blog: 減少大腦負擔的 RoboForm]&lt;br /&gt;
* [http://keepass.info/ KeePass Password Safe]&lt;br /&gt;
** [http://playpcesor.blogspot.com/2008/02/keepass-password-safe.html 電腦玩物: 個人帳號密碼的安全保險箱：KeePass Password Safe （附自動化填表技巧補完）]&lt;br /&gt;
* Google toolbar - [http://toolbar.google.com/T5/intl/en/features.html#autofill AutoFill] for IE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 選取文字後，自動複製至剪貼簿(Clipboard Tool) ===&lt;br /&gt;
&lt;br /&gt;
* [https://espanso.org/ Espanso - A Privacy-first, Cross-platform Text Expander] for {{Win}}, {{Linux}} &amp;amp; {{Mac}}&lt;br /&gt;
* [https://www.3dclipboard.com/download 3D Clipboard] for {{Win}} 教學: [https://www.playpcesor.com/2013/05/3d-clipboard-windows.html 3D Clipboard 免費 Windows 剪貼簿軟體輕鬆複製貼上] {{access | date=2018-10-17}}&lt;br /&gt;
* [http://www.joejoesoft.com/cms/showpage.php?cid=97 ArsClip] 教學: [http://www.techbang.com/posts/1231-arsclip-super-photo-scrapbook ArsClip：超強圖文剪貼簿 | T客邦 - 我只推薦好東西]&lt;br /&gt;
* [http://autocopy.mozdev.org/ AutoCopy] for {{Fx}} - &amp;quot;Select text on any web page and it will be automatically copied to the clipboard. It works in much the same way as does Trillian or mIrc.&amp;quot; quoted from official website.&lt;br /&gt;
* 其他剪貼簿增強工具: [https://www.google.com.tw/search?num=100&amp;amp;q=site:www.slime.com.tw+%22%E5%89%AA%E8%B2%BC%E7%B0%BF%E5%A2%9E%E5%BC%B7%22 史萊姆的第一個家] | [http://reg.softking.com.tw/freeware/review.asp?fid1=1&amp;amp;fid2=247 軟體王] 軟體目錄&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.alfredapp.com/extras/snippets/ Snippets - Alfred] for {{Mac}}&lt;br /&gt;
&lt;br /&gt;
=== 節省滑鼠滑曳的「里程數」 ===&lt;br /&gt;
* Windows XP控制台: 滑鼠內容 -&amp;gt; 指標設定: 啟用「在對話方塊中自動將滑鼠指標移到預設按鈕」&lt;br /&gt;
: Logitech 滑鼠新版驅動程式(MouseWare)則稱之為「智慧型移動」&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 讓程式啟動更快速 / 一次執行多個程式 ===&lt;br /&gt;
讓程式啟動更快速&lt;br /&gt;
* {{Gd}} [[Launchy]][http://www.launchy.net/] for {{Win}}, {{Mac}} &amp;amp; {{Linux}}&lt;br /&gt;
*  Press {{kbd | key=⌘ ctrl}} + {{kbd | key=SPACE}} to launch [https://support.apple.com/en-us/HT204014 spotlight search] for {{Mac}}&lt;br /&gt;
* &#039;&#039;$&#039;&#039; [https://www.alfredapp.com/ Alfred - Productivity App] for {{Mac}}&lt;br /&gt;
&lt;br /&gt;
一次執行多個程式&lt;br /&gt;
* [http://www.outertech.com/en/create-batch-file Batchrun (Create Batch File)] 教學: [http://www.techbang.com/posts/1280 BatchRun：批次作業一點就通 - T客邦] 產生 .brs 需要安裝Batchrun執行&lt;br /&gt;
* [http://www.thewindowsclub.com/start-my-day-utility-automates-daily-windows-tasks Automate daily Windows tasks with Start My Day Utility]  教學: [http://playpcesor.blogspot.com/2010/08/start-my-day.html Start My Day 2.0 排程每日電腦工作，單鍵自動打點作業環境 | 電腦玩物]&lt;br /&gt;
* [http://www.computerhope.com/starthlp.htm MS-DOS start command help]&lt;br /&gt;
* 執行多行 Linux [[Linux commands |  BASH commands]] 或 Windows DOS commands 增加額外一行的換行符號，複製貼上後即可執行多行 command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
單行命令 1&lt;br /&gt;
單行命令 2&lt;br /&gt;
換行符號&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
建立常用執行程式的別名 alias&lt;br /&gt;
* [http://www.techradar.com/how-to/computing/apple/terminal-101-creating-aliases-for-commands-1305638 Terminal 101: Creating Aliases for Commands | TechRadar] for {{Mac}} &amp;amp; {{Linux}}&lt;br /&gt;
&lt;br /&gt;
=== 網頁瀏覽 ===&lt;br /&gt;
* [[MozillaFirefox|Mozilla firefox]]的關鍵字快速搜尋: 應用在[[Online dictionary|單字查詢]]或書籤捷徑。&lt;br /&gt;
* IE: 書籤可設定快速鍵&lt;br /&gt;
&lt;br /&gt;
=== 自動化軟體工具 ===&lt;br /&gt;
* [http://ahkscript.org/ AutoHotkey] 教學: [http://jdev.tw/blog/734/autohotkey-introduction-chinese 輕鬆學會彈指神功－揭露AutoHotkey絕技 | 簡睿隨筆 | 學習過程的紀錄與備忘]&lt;br /&gt;
&lt;br /&gt;
== 縮短經常輸入的文字或資料的取用時間 ==&lt;br /&gt;
將經常輸入的文字，變成範本&lt;br /&gt;
Email&lt;br /&gt;
* {{Gd}} 使用收信軟體(outlook express)的簽名檔，將經常輸入的文字，變成範本。在需要不同文字時，切換不同簽名檔 / 範本。 (Thanks! chiachi)&lt;br /&gt;
* Gmail 的 [http://gmailblog.blogspot.com/2008/10/new-in-labs-canned-responses.html  Canned Responses]{{access | date = 2011-11-14}} 缺點會覆蓋原始信件內文&lt;br /&gt;
&lt;br /&gt;
將經常取用的檔案或資料，加上強調的標記或者額外集中放在同一個資料夾&lt;br /&gt;
* 經常取用的資料跟其他一般資料混在一起時，加上強調的標記或網底顏色，方便快速取用。如果是 Gmail 可以加上星號或標籤。&lt;br /&gt;
* 如果檔案散落在不同信件的附檔，但需要快速取用。可以額外集中放在同一個資料夾，方便快速取用。&lt;br /&gt;
&lt;br /&gt;
將經常使用的電話或分機號碼，另外做成單張紙張的常用通訊錄&lt;br /&gt;
* 省去額外查找通訊錄的時間花費。&lt;br /&gt;
&lt;br /&gt;
== MS Word 文件校閱 ==&lt;br /&gt;
* [https://support.office.com/zh-tw/article/%E5%9C%A8-word-%E4%B8%AD%E4%BD%BF%E7%94%A8%E8%BF%BD%E8%B9%A4%E4%BF%AE%E8%A8%82-197ba630-0f5f-4a8e-9a77-3712475e806a 在 Word 中使用追蹤修訂 - Word]&lt;br /&gt;
* 如果需要將文件列印出來，因為使用追蹤修訂的文章不好閱讀，可以到文具店購買「箭頭便利貼」標示修改處&lt;br /&gt;
* 選擇性製作文件修改的目錄清單，列出上次討論時的修改意見，與對應修改的頁碼&lt;br /&gt;
&lt;br /&gt;
== 程式開發者 ==&lt;br /&gt;
=== 終端機命令列參數自動完成 ===&lt;br /&gt;
* [https://fig.io/ Fig] ([https://github.com/withfig/autocomplete github], [https://www.ycombinator.com/companies/fig ycombinator])&lt;br /&gt;
&lt;br /&gt;
=== 終端機命令列操作 ===&lt;br /&gt;
&lt;br /&gt;
將終端機命令列指令文字中需要經常修改的部分，放到後面&lt;br /&gt;
* 例如 {{kbd | key=&amp;lt;nowiki&amp;gt;grep $KEYWORD file_name&amp;lt;/nowiki&amp;gt;}} 其中 {{kbd | key=&amp;lt;nowiki&amp;gt;$KEYWORD&amp;lt;/nowiki&amp;gt;}} 變數需要經常修改，建議改成句子後面 {{kbd | key=&amp;lt;nowiki&amp;gt;cat file_name | grep $KEYWORD&amp;lt;/nowiki&amp;gt;}}。下次輸入命令列文字時，就可以減少滑鼠游標移動的次數。&lt;br /&gt;
&lt;br /&gt;
{{Linux}} 作業系統指令輸入符號 {{kbd | key=&amp;lt;nowiki&amp;gt;!$&amp;lt;/nowiki&amp;gt;}} 取代上一指令的最後參數&lt;br /&gt;
* 說明：[https://unix.stackexchange.com/questions/88642/what-does-mean bash - What does !$ mean? - Unix &amp;amp; Linux Stack Exchange]&lt;br /&gt;
&lt;br /&gt;
=== 終端機命令列縮寫指令 + GUI 視窗操作 ===&lt;br /&gt;
Example 1: Opening a Text File with [https://en.wikipedia.org/wiki/Gedit Gedit] on Linux via Terminal&lt;br /&gt;
&lt;br /&gt;
1. First, ensure gedit is installed on your system &lt;br /&gt;
* If needed, install gedit using your distribution&#039;s package manager. On Debian&lt;br /&gt;
* Type the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&lt;br /&gt;
sudo apt install gedit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Launch your terminal&lt;br /&gt;
&lt;br /&gt;
3. Type the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gedit /path/to/text-file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example 2: To open the text file with Sublime for {{Mac}} from console&lt;br /&gt;
&lt;br /&gt;
設定終端機命令列縮寫指令: key-in {{kbd | key=&amp;lt;nowiki&amp;gt;subl &amp;lt;filename&amp;gt;&amp;lt;/nowiki&amp;gt;}} to open the file with Sublime&lt;br /&gt;
# Key-in {{kbd | key=&amp;lt;nowiki&amp;gt;vi ~/.zshrc&amp;lt;/nowiki&amp;gt;}} &lt;br /&gt;
# Press {{kbd | key=&amp;lt;nowiki&amp;gt;i&amp;lt;/nowiki&amp;gt;}} to switch the insert mode &lt;br /&gt;
# Add the following line  {{kbd | key=&amp;lt;nowiki&amp;gt;alias subl=&#039;open -a &amp;quot;Sublime Text&amp;quot;&#039;&amp;lt;/nowiki&amp;gt;}} &lt;br /&gt;
# Press {{kbd | key=&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;}} &lt;br /&gt;
# Press {{kbd | key=&amp;lt;nowiki&amp;gt;wq&amp;lt;/nowiki&amp;gt;}} to save the {{kbd | key=&amp;lt;nowiki&amp;gt;~/.zshrc&amp;lt;/nowiki&amp;gt;}}  file and quite the vi window&lt;br /&gt;
&lt;br /&gt;
返回終端機命令列&lt;br /&gt;
# Key-in {{kbd | key=&amp;lt;nowiki&amp;gt;subl /path/to/file&amp;lt;/nowiki&amp;gt;}} 就可以使用 Sublime 編輯檔案&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example 3: To open the text file with Notepad++ for {{Win}} from console&lt;br /&gt;
# Install [https://notepad-plus-plus.org/downloads/ Notepad++] &lt;br /&gt;
# Key-in {{kbd | key=&amp;lt;nowiki&amp;gt;start notepad++ &amp;lt;filename&amp;gt;&amp;lt;/nowiki&amp;gt;}} to open the file with Notepad++&lt;br /&gt;
&lt;br /&gt;
=== 離線版的軟體開發說明文件 ===&lt;br /&gt;
* [https://zealdocs.org/ Zeal - Offline Documentation Browser] for {{Win}} &amp;amp; {{Linux}}&lt;br /&gt;
* [https://kapeli.com/dash Dash for macOS - API Documentation Browser, Snippet Manager - Kapeli] for {{Mac}}&lt;br /&gt;
&lt;br /&gt;
=== 從當下瀏覽的檔案視窗的資料夾路徑，快速開啟命令列視窗 ===&lt;br /&gt;
* [[Open command window here]]&lt;br /&gt;
&lt;br /&gt;
* [https://conemu.github.io/ ConEmu] On {{Win}}&lt;br /&gt;
*# Setup [https://conemu.github.io/en/Tasks.html Tasks] &lt;br /&gt;
*# Define the command e.g. Input {{kbd | key=&amp;lt;nowiki&amp;gt;-new_console:d:C:\path\to\beach cmd.exe&amp;lt;/nowiki&amp;gt;}} to open the folder {{kbd | key=&amp;lt;nowiki&amp;gt;C:\path\to\beach&amp;lt;/nowiki&amp;gt;}} quickly.&lt;br /&gt;
&lt;br /&gt;
* [https://www.cygwin.com/ Cygwin] On {{Win}} 檔案總管選定某個資料夾，點選 「傳送到」 -&amp;gt; 「Cygwin」，就可以開啟 Cygwin 視窗，並且自動切換到選定的資料夾&amp;lt;ref&amp;gt;[https://superuser.com/questions/115587/how-do-i-create-a-shortcut-that-opens-cygwin-bash-shell-on-a-directory-of-my-cho How do I create a shortcut that opens Cygwin bash shell on a directory of my choosing (UNC especially)? - Super User]&amp;lt;/ref&amp;gt;&lt;br /&gt;
*# Open the explorer on {{Win}} and enter the {{kbd | key=&amp;lt;nowiki&amp;gt;shell:sento&amp;lt;/nowiki&amp;gt;}} to open the folder of shortcuts&lt;br /&gt;
*# Add a new shortcut {{kbd | key=&amp;lt;nowiki&amp;gt;C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico  C:\cygwin64\bin\bash.exe  -l -c &amp;quot;cd \&amp;quot;$0\&amp;quot; ; exec bash&amp;quot;&amp;lt;/nowiki&amp;gt;}} it the Cygwin was installed on C drive&lt;br /&gt;
&lt;br /&gt;
* [https://www.cygwin.com/ Cygwin] 在 {{Win}} 中，於檔案總管中選取某個資料夾後，點選「傳送到」-&amp;gt;「Cygwin」，即可開啟 Cygwin 視窗，並自動切換至選定的資料夾。&amp;lt;ref&amp;gt;[https://superuser.com/questions/115587/how-do-i-create-a-shortcut-that-opens-cygwin-bash-shell-on-a-directory-of-my-cho How do I create a shortcut that opens Cygwin bash shell on a directory of my choosing (UNC especially)? - Super User]&amp;lt;/ref&amp;gt; &lt;br /&gt;
*# 在 {{Win}} 中開啟檔案總管，輸入 {{kbd | key=&amp;lt;nowiki&amp;gt;shell:sento&amp;lt;/nowiki&amp;gt;}} 以打開捷徑資料夾 &lt;br /&gt;
*# 新增一個捷徑 {{kbd | key=&amp;lt;nowiki&amp;gt;C:\cygwin64\bin\mintty.exe -o Locale=UTF-8 -i /Cygwin-Terminal.ico C:\cygwin64\bin\bash.exe -l -c &amp;quot;cd &amp;quot;$0&amp;quot; ; exec bash&amp;quot;&amp;lt;/nowiki&amp;gt;}} （假設 Cygwin 安裝在 C 槽）&lt;br /&gt;
&lt;br /&gt;
已知問題：&lt;br /&gt;
* 捷徑需要包含「-o Locale=UTF-8」選項，否則顯示的中文檔案內容 (e.g. cat filename.csv)，會變成亂碼。&lt;br /&gt;
* 若資料夾名稱包含中文字，捷徑可能無法正常運作。&lt;br /&gt;
&lt;br /&gt;
* [https://iterm2.com/ iTerm2] On {{Mac}} [https://stackoverflow.com/questions/50370854/is-it-possibile-to-open-iterm-in-current-finder-position macos - is it possibile to open iTerm in current Finder position - Stack Overflow]&lt;br /&gt;
&lt;br /&gt;
=== Launch the editor from terminal ===&lt;br /&gt;
* Launch [https://support.apple.com/zh-tw/guide/textedit/welcome/mac TextEdit] from the Mac OSX Terminal: e.g. Input {{kbd | key=&amp;lt;nowiki&amp;gt;open -a TextEdit README.md&amp;lt;/nowiki&amp;gt;}} to open the file README.md&lt;br /&gt;
* [https://ashleynolan.co.uk/blog/launching-sublime-from-the-terminal Launch Sublime Text 2 or 3 from the Mac OSX Terminal - AshleyNolan.co.uk - Blog and Portfolio for Ashley Nolan] &#039;&#039;un-verified&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== 檔案操作/資料夾 ===&lt;br /&gt;
* 「傳送到」[https://www.howtogeek.com/howto/windows-vista/customize-the-windows-vista-send-to-menu/ Customize the Send To Menu in Windows 10, 8, 7, or Vista]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 自動偵測 PHP 最新版本路徑 ===&lt;br /&gt;
[[Integration of CodeRunner with MAMP]]&lt;br /&gt;
&lt;br /&gt;
=== 快捷文字與自動替換文字 === &lt;br /&gt;
* [https://www.sublimetext.com/ Sublime Text] &#039;&#039;$&#039;&#039;: [https://github.com/sergeche/emmet-sublime sergeche/emmet-sublime: Emmet for Sublime Text]&lt;br /&gt;
* Sublime Text &#039;&#039;$&#039;&#039;: [http://docs.sublimetext.info/en/latest/extensibility/snippets.html Snippets]、[http://docs.sublimetext.info/en/latest/reference/completions.html Completions Files] + [https://www.granneman.com/webdev/editors/sublime-text/top-features-of-sublime-text/auto-completion-in-sublime-text Auto-Completion in Sublime Text | Scott Granneman]。教學: [https://www.minwt.com/webdesign-dev/html/17946.html Sublime Text教學 – 自訂常用的程式片段，只需輸入短碼立即產生完整原始碼 | 梅問題．教學網]&lt;br /&gt;
* [https://www.jetbrains.com/phpstorm/ PhpStorm] &#039;&#039;$&#039;&#039;: [https://www.jetbrains.com/help/phpstorm/tutorial-creating-live-templates.html Tutorial: Creating Live templates - Help | PhpStorm] 輸入縮寫 (abbreviation) 立即產生完整程式碼 (template text)&lt;br /&gt;
* [https://blog.planetoid.info/2021/04/use-gpt3-generate-css-syntax.html GPT-3 文本產生模型，快速產生 CSS 語法]&lt;br /&gt;
&lt;br /&gt;
== 快速鍵(AccessKey, keyboard shortcuts, 快捷鍵) ==&lt;br /&gt;
[[Windows keyboard equivalents on Mac]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 一般 ===&lt;br /&gt;
MS Windows 檔案總管 / 桌面&lt;br /&gt;
* 回到目錄上一層: {{Kbd | key = Backspace}}&lt;br /&gt;
* 更改檔名: {{Kbd | key = F2}}&lt;br /&gt;
* 檔案或資料夾的詳細資訊: 選取檔案或資料夾，再按 {{Kbd plus | key1 = Alt | key2 = Enter}} 快速鍵，可以快速查看檔案或資料夾的檔案大小等資訊&lt;br /&gt;
* {{Kbd | key = Tab}} 下一區塊; {{Kbd plus | key1 = Shift | key2 = Tab}} 上一區塊&lt;br /&gt;
* 選擇單筆: {{Kbd | key = Ctrl}}&lt;br /&gt;
* 選擇連續的多筆: {{Kbd | key = shift}}&lt;br /&gt;
&lt;br /&gt;
文字處理&lt;br /&gt;
* {{Kbd plus | key1 = Ctrl | key2 = 右箭頭}}: 跳至下一個字&lt;br /&gt;
* {{Kbd plus | key1 = Ctrl | key2 = 左箭頭}}: 跳至前一個字&lt;br /&gt;
* 刪除滑鼠游標所在的那一行內容&lt;br /&gt;
** {{Kbd plus | key1 = Ctrl | key2 = k}} for GNU Nano Text Editor in {{Linux}} &amp;lt;ref&amp;gt;[http://mintaka.sdsu.edu/reu/nano.html The Nano Text Editor]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
相關資料: [http://publib.boulder.ibm.com/infocenter/eserver/v1r2/index.jsp?topic=%2Fdiricinfo%2Ffqm0_r_keyboard_shortcuts_for_text_fields.html Keyboard shortcuts for text components]&lt;br /&gt;
&lt;br /&gt;
=== MS Office ===&lt;br /&gt;
* {{Kbd plus | key1 = Ctrl | key2 = U}} -&amp;gt; 文字加上底線(underly)&lt;br /&gt;
* {{Kbd plus | key1 = Ctrl | key2 = I}}  -&amp;gt; 文字斜體(italic)&lt;br /&gt;
&lt;br /&gt;
==== MS Word ====&lt;br /&gt;
* 將同一個表格切而為二 或者 在兩個表格間插入空白行: (1)在第一個表格末， {{Kbd plus | key1 = Ctrl | key2 = Enter}} 插入分頁符號 (2)在第一個表格末，輸入{{kbd | key = Enter}} 插入換行符號&lt;br /&gt;
* [[Specify the accesskey in MS Word|自訂Word快速鍵]]&lt;br /&gt;
* [http://www.microsoft.com/taiwan/smallbusiness/themes/marketing/article4.mspx 在工作上使用 Word 的五大秘訣與技巧]&lt;br /&gt;
&lt;br /&gt;
==== MS Excel ====&lt;br /&gt;
* {{Kbd plus | key1 = Ctrl | key2 = 滑鼠左鍵}} 點選儲存格右下角，往下一個儲存格移動，數值自動加1&lt;br /&gt;
** 如果儲存格格式是「G/通用格式」的數字，則須{{kbd | key = Ctrl}}按鍵&lt;br /&gt;
** 如果儲存格格式是「文字」，則不須{{kbd | key = Ctrl}}按鍵&lt;br /&gt;
* 從純文字檔例如「aaa, bbb, ccc」將逗號取代成{{kbd | key = Tab}}按鍵空白，再貼到Excel則自動分欄。也可從Excel複製資料，貼到[[Google Docs and Spreadsheets]]&lt;br /&gt;
&lt;br /&gt;
==== MS PowerPoint ====&lt;br /&gt;
滑鼠左鍵選取圖案或文字方塊後&lt;br /&gt;
* {{Kbd plus | key1 = 滑鼠左鍵 | key2 = Ctrl}} +  拖曳圖案 = 複製圖案&lt;br /&gt;
* {{Kbd plus | key1 = 滑鼠左鍵 | key2 = Ctrl}} + {{kbd | key = Shift}} + 拖曳圖案 = 複製圖案 並 自動對齊原本的圖案&lt;br /&gt;
&lt;br /&gt;
線條&lt;br /&gt;
*  {{Kbd plus | key1 = 滑鼠左鍵 | key2 = Ctrl}} + 拖曳線條端點 = 以線條中心，等距離拉長。例如拖曳右方端點伸長5cm, 右方端點自動伸長5cm&lt;br /&gt;
*  {{Kbd plus | key1 = 滑鼠左鍵 | key2 = Shift}} + 拖曳線條端點 = 維持線條所在高度，水平地拉長線條的長度，而不會有彎曲。&lt;br /&gt;
&lt;br /&gt;
=== browser ===&lt;br /&gt;
* [[Mouse Shortcuts]]&amp;amp; [[Keyboard Shortcuts]] for {{IE}}/{{Fx}}/Opera&lt;br /&gt;
* [http://forum.moztw.org/viewtopic.php?t=13082 Mozilla Taiwan 討論區: 善用 keyconfig 增加自訂的快速鍵] {{Fx}}&lt;br /&gt;
* [http://forum.moztw.org/viewtopic.php?t=16261&amp;amp;highlight= Mozilla Taiwan 討論區: Firefox 2.0 中無法使用 〔Alt+S〕 快速鍵送出頁面的解決方法] {{Fx}}&lt;br /&gt;
* [http://www.google.com/chrome Google chrome]: [http://www.google.com/support/chrome/bin/answer.py?answer=95743 Getting started: Windows keyboard and mouse shortcuts] / [http://www.google.com/support/chrome/bin/answer.py?hl=zh_TW&amp;amp;answer=95743 開始使用: 鍵盤快速鍵] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
=== 其他 ===&lt;br /&gt;
==== by software ==== &lt;br /&gt;
* MS Excel:: &lt;br /&gt;
*# 編輯資料: {{kbd | key = F2}}&lt;br /&gt;
*# 強制換行: {{Kbd plus | key1 = Alt | key2 = Enter}}&lt;br /&gt;
&lt;br /&gt;
* Gmail: Help Center: [https://mail.google.com/support/bin/answer.py?answer=6594 What are the keyboard shortcuts?]&lt;br /&gt;
&lt;br /&gt;
* [http://meta.wikimedia.org/wiki/Shortcuts Help:Keyboard shortcuts - Meta]&lt;br /&gt;
* Notepad++: [http://www.keyxl.com/aaacd5a/43/Notepad-Plus-text-editor-software-keyboard-shortcuts.htm Notepad++ Keyboard Shortcuts], [http://sourceforge.net/apps/mediawiki/notepad-plus/?title=Keyboard_And_Mouse_Shortcuts SourceForge.net: Keyboard And Mouse Shortcuts - notepad-plus]&lt;br /&gt;
* [https://gist.github.com/eteanga/1736542 Sublime Text 2 - Useful Shortcuts][https://gist.github.com/nuxlli/1207014]&lt;br /&gt;
* [http://delicious.com/popular/hotkey Popular hotkey Bookmarks on Delicious]&lt;br /&gt;
* web page: [http://www.w3schools.com/tags/att_global_accesskey.asp HTML Global accesskey Attribute] defined by web developer&lt;br /&gt;
* [https://www.jetbrains.com/help/phpstorm/2016.2/keyboard-shortcuts-and-mouse-reference.html PhpStorm 2016.2 Help :: Keyboard Shortcuts and Mouse Reference]&lt;br /&gt;
&lt;br /&gt;
====  by function ==== &lt;br /&gt;
* Duplicate current line&lt;br /&gt;
** Notepad++: {{Kbd plus | key1 = Ctrl | key2 = d}}&lt;br /&gt;
** Sublime: {{kbd | key = Ctrl}} + {{kbd | key = Shift}} + {{kbd | key = d}}&lt;br /&gt;
&lt;br /&gt;
Modify the shortcut: Using {{Kbd plus | key1 = Ctrl | key2 = d}} to Duplicate current line on Sublime. &lt;br /&gt;
* Sublime Menu -&amp;gt; Preferences -&amp;gt; Key Bindings - User&lt;br /&gt;
* {{exclaim}} It will override the existing shortcuts: select word&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
	{ &amp;quot;keys&amp;quot;: [&amp;quot;ctrl+d&amp;quot;], &amp;quot;command&amp;quot;: &amp;quot;duplicate_line&amp;quot; },&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 檔案管理 ==&lt;br /&gt;
檔名命名規則&lt;br /&gt;
* 利用符號、數字、英文字母、中文字的先後順序排列的規則，將符號或數字作為常用或特殊檔案或資料夾名稱，方便存取。&lt;br /&gt;
* 將時常變動的部分放在檔名後面，例如 file name 160324 需要時常更改最後的數字 160324，則將數字放在檔名後面，方便日後修改。&lt;br /&gt;
&lt;br /&gt;
=== Email 附檔管理 ===&lt;br /&gt;
當多封 Email 附檔導致版本過多，要找最新版本檔案很花時間時，可以考慮使用雲端硬碟，放置最新版本的檔案。&lt;br /&gt;
&lt;br /&gt;
=== 常用的資料夾 ===&lt;br /&gt;
* [http://www.ghisler.com/ Total Commander] (last visited: March 9, 2006) 雙視窗檔案總管，可設定常用資料夾書籤(directory menu)。&lt;br /&gt;
* 設好常用的資料夾位置，使日後能快速指定開啟/儲存對話方塊中的目錄。ex: [http://dm2.sourceforge.net/ DM2]([http://goston.blogspot.com/2006/04/dm2.html Goston的介紹]), [http://www.hyperionics.com/files/index.asp FileBox eXtender]([http://www.goston.net/2007/03/09/762/ 介紹]), [http://www.nesoft.org/foldercache.shtml Folder Cache], [http://www.protonfx.com/dirkey/ Dirkey NTXP]&lt;br /&gt;
&lt;br /&gt;
=== 一次建立多個資料夾 ===&lt;br /&gt;
* [https://errerrors.blogspot.com/2023/01/how-to-create-a-folder-structure-for-project-management.html 專案管理：快速建立專案的多個資料夾] on {{Win}}, {{Mac}} or {{Linux}}&lt;br /&gt;
&lt;br /&gt;
=== 右鍵選單 ===&lt;br /&gt;
* 「傳送到」 (捷徑位於 %HOMEPATH%\SendTo)，傳送檔案至你指定的資料夾。&lt;br /&gt;
&lt;br /&gt;
* IE 右鍵選單自訂(regedit)&lt;br /&gt;
&lt;br /&gt;
 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt&lt;br /&gt;
&lt;br /&gt;
=== 網頁表單上傳檔案，可以快速選取檔案 ===&lt;br /&gt;
* 如果該網站網頁表單不允許拖曳檔案的上傳檔案的方式，將要上傳網站表單的檔案，固定放在同一個資料夾。節省切換目錄的時間。&lt;br /&gt;
&lt;br /&gt;
=== 檔案開啟 ===&lt;br /&gt;
* [http://www.baxbex.com/openexpert.html OpenExpert - open-with for explorer&#039;s context menu - freeware] (last visited: March 9, 2006) 指定檔案類型開啟的軟體 ([http://blog.soft.idv.tw/?p=142 教學])&lt;br /&gt;
&lt;br /&gt;
其他&lt;br /&gt;
* [http://foldersize.sourceforge.net/ Folder Size for Windows Explorer]&lt;br /&gt;
* 自行指定檔案總管的開啟目錄位置&lt;br /&gt;
: 在「捷徑」的分頁標籤，將「目標」改成(C:\Data 改成想要的目錄位置) (詳細說明請看[[MS Windows Explorer]])&lt;br /&gt;
&lt;br /&gt;
 %SystemRoot%\explorer.exe/n,/e,C:\Data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 多個文件同時開啟 ===&lt;br /&gt;
* [http://notepad-plus-plus.org/ Notepad++ Home] v.6.2&amp;lt;ref&amp;gt;[http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Sessions_And_Projects SourceForge.net: Sessions And Projects - notepad-plus]&amp;lt;/ref&amp;gt;: &lt;br /&gt;
** 先逐一打開日後要同時開啟的多個文件。&lt;br /&gt;
** 選單: 自訂 -&amp;gt; 使用者自訂 -&amp;gt; 切換到「其他」標籤，組群檔副檔名，手動輸入 session (或者其他你自訂的副檔名)&lt;br /&gt;
** 選單: 檔案 -&amp;gt; 儲存本次檔案組群。檔名可設置為 group.session&lt;br /&gt;
** 關閉所有檔案，Notepad++ 開啟 group.session 檔案，即可開啟同時多個文件。&lt;br /&gt;
&lt;br /&gt;
=== 同步瀏覽 ===&lt;br /&gt;
* [[Total Commander]]: enable synchronous directory change in both windows&lt;br /&gt;
* FIleZilla 上方工具列選單位置: 檢視 --&amp;gt; 同步瀏覽&lt;br /&gt;
&lt;br /&gt;
=== 複製路徑 ===&lt;br /&gt;
* {{Linux}} {{kbd | key=pwd}} to show present working directory. See details on [https://www.computerhope.com/unix/upwd.htm Linux pwd command help and examples]&lt;br /&gt;
* {{Mac}} [https://ephrain.net/mac-%E5%9C%A8-finder-%E4%B8%AD%E5%BF%AB%E9%80%9F%E8%A4%87%E8%A3%BD%E8%B7%AF%E5%BE%91%E3%80%81%E9%96%8B%E5%95%9F%E6%8C%87%E5%AE%9A%E8%B3%87%E6%96%99%E5%A4%BE/ [Mac] 在 Finder 中快速複製路徑、開啟指定資料夾 | EPH 的程式日記]&lt;br /&gt;
&lt;br /&gt;
== 虛擬硬碟/虛擬磁碟工具 ==&lt;br /&gt;
* &amp;lt;I&amp;gt;把原本在硬碟上的暫存檔案放到記憶體中，讓Windows能更迅速地存取，進而達到加速的功能&amp;lt;/I&amp;gt;(資料來源：Toget關於[http://toget.pchome.com.tw/intro/utility_system/utility_system_memory/198.html vRamDir (vRAM)]的介紹)，須注意此類程式於電腦關閉時有沒有將記憶體的檔案回存到硬碟中，避免暫存檔案消失。&lt;br /&gt;
** [http://www.cenatek.com/ Cenatek] RamDiskXP [http://www.softking.com.tw/soft/click_share.asp?fid3=1177]、 [http://www.superspeed.com/ SuperSpeed Software, Inc.] [http://www.cenatek.com/product_ramdisk.cfm RamDisk] XP Professional [http://www.softking.com.tw/soft/clickcount.asp?fid3=13757](shareware)、[http://www.jetico.com/ Jetico, Inc.] BestCrypt [http://www.softking.com.tw/soft/clickcount.asp?fid3=13500] (軟體分類： SoftKing/檔案工具/[http://www.softking.com.tw/soft/review.asp?fid1=2&amp;amp;fid2=53 磁碟工具][http://www.softking.com.tw/soft/sharefile.asp?fid1=2&amp;amp;fid2=53&amp;amp;language=all&amp;amp;ftype=all&amp;amp;av=0&amp;amp;system=]、Toget/系統工具/[http://toget.pchome.com.tw/index/utility_system/utility_system_memory/index_t1.html 記憶體管理])&lt;br /&gt;
* [http://wiki.planetoid.info/index.php/WikiJournal_2004-11#2004-11-08 改變Mozilla Firefox 暫存檔(cache, temporary internet files)的路徑位置]&lt;br /&gt;
&lt;br /&gt;
== 軟體懶人包 ==&lt;br /&gt;
* [https://ninite.com/ Ninite - Install or Update Multiple Apps at Once] on {{Win}} 教學: [https://free.com.tw/ninite-installer/ Ninite 自製重灌懶人包，一鍵快速安裝所有常用軟體]&lt;br /&gt;
* [http://www.pegtop.net/start/ PStart] on {{Win}} 教學: [http://blog.edumeme.org/2009/12/blog-post_15.html PStart 軟體隨身包使用教學 - Meme -- 教學與反省]&lt;br /&gt;
&lt;br /&gt;
== 工作任務管理 ==&lt;br /&gt;
* [https://asana.com/guide/help/api/csv-importer CSV Importer · Asana] {{access | date = 2018-11-08}}&lt;br /&gt;
&lt;br /&gt;
== 相關文章 ==&lt;br /&gt;
&lt;br /&gt;
* c9s (2015). [https://medium.com/@c9s/%E4%B8%80%E4%BA%9B%E5%BF%AB%E9%80%9F%E9%80%B2%E5%85%A5%E5%B7%A5%E4%BD%9C%E7%8B%80%E6%B3%81%E7%9A%84%E6%96%B9%E6%B3%95-b66813ce3561#.7byq8154h 快速進入工作狀況的十個要點 — Medium] {{access | date = 2015-12-27}}&lt;br /&gt;
* Gugod. (2006) [http://svn.kwiki.org/gugod/talks/Sporx/SharpKnife.xul 利器善事](請用Firefox開啟). [http://osdc.tw/english Open Source Developers&#039; Conference in Taiwan]. 網頁備份: http://wayback.archive.org/web/20071001000000*/http://svn.kwiki.org/gugod/talks/Sporx/SharpKnife.xul&lt;br /&gt;
* [http://www.playpcesor.com/2015/03/mac-spotlight-12.html 必學Mac專家工作捷徑！ Spotlight 12招加速完成任務 -電腦玩物] {{access | date = 2015-03-31}}&lt;br /&gt;
* [http://unix.stackexchange.com/questions/9123/is-there-a-one-liner-that-allows-me-to-create-a-directory-and-move-into-it-at-th bash - Is there a one-liner that allows me to create a directory and move into it at the same time? - Unix &amp;amp; Linux Stack Exchange]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Software]] &lt;br /&gt;
[[Category: PKM]] &lt;br /&gt;
[[Category: Mac]]&lt;br /&gt;
[[Category: Developer environment]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Integration_of_CodeRunner_with_MAMP&amp;diff=26409</id>
		<title>Integration of CodeRunner with MAMP</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Integration_of_CodeRunner_with_MAMP&amp;diff=26409"/>
		<updated>2026-07-15T02:21:11Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CodeRunner PHP Run Command: Auto-Detecting the Version =&lt;br /&gt;
&lt;br /&gt;
# [https://coderunnerapp.com/ CodeRunner – Programming Editor for macOS]&lt;br /&gt;
# [https://www.mamp.info/en/mac/ MAMP]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Settings → Languages → PHP → Run Command, the default configuration usually looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/path/to/php $filename&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php $filename&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The problem is that every time MAMP upgrades its PHP version, you have to come back and manually update this path. Changing it to the line below lets CodeRunner automatically detect the &amp;quot;currently installed newest version&amp;quot; every time it runs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/bin/sh -c &#039;php=$(ls -d /Applications/MAMP/bin/php/php*/bin/php | sort -V | tail -1); &amp;quot;$php&amp;quot; &amp;quot;&#039;&amp;quot;$filename&amp;quot;&#039;&amp;quot;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overall Structure ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sh -c &#039;  command string  &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; to treat the following text as a shell command to execute. Everything inside the single quotes &amp;lt;code&amp;gt;&#039;...&#039;&amp;lt;/code&amp;gt; is the actual script being run, just packed onto one line.&lt;br /&gt;
&lt;br /&gt;
== Step 1: Finding the newest php executable ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php=$(ls -d /Applications/MAMP/bin/php/php*/bin/php | sort -V | tail -1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Segment &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; What it does &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;ls -d /Applications/MAMP/bin/php/php*/bin/php&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Lists all files matching this path pattern &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;sort -V&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Sorts by &#039;&#039;&#039;version number&#039;&#039;&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;tail -1&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Takes the last line of the sorted output — the newest version &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;php=$(...)&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Stores the result into the variable &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What &amp;lt;code&amp;gt;ls -d&amp;lt;/code&amp;gt; does&#039;&#039;&#039;: Normally, &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; on a directory lists its contents, but &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; makes it list the matching path itself without descending into it. &amp;lt;code&amp;gt;php*&amp;lt;/code&amp;gt; is a wildcard matching every folder under &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; that starts with &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt;, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.1.33/bin/php&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php&lt;br /&gt;
/Applications/MAMP/bin/php/php8.3.14/bin/php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What &amp;lt;code&amp;gt;sort -V&amp;lt;/code&amp;gt; does&#039;&#039;&#039;: Regular &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; sorts as plain strings, which causes problems — &amp;lt;code&amp;gt;php8.10.0&amp;lt;/code&amp;gt; would sort &#039;&#039;before&#039;&#039; &amp;lt;code&amp;gt;php8.2.0&amp;lt;/code&amp;gt; (since character &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; is less than &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;-V&amp;lt;/code&amp;gt; (version sort) understands version-number semantics and correctly places &amp;lt;code&amp;gt;8.10.0&amp;lt;/code&amp;gt; after &amp;lt;code&amp;gt;8.2.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;tail -1&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Takes the last line of the sorted result — the entry with the highest version number. So the whole &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt; expression captures the full path to the newest installed MAMP php version.&lt;br /&gt;
&lt;br /&gt;
After this line runs, the &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; variable holds something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 2: Actually running php ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;$php&amp;quot; &amp;quot;$filename&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;$php&amp;quot;&amp;lt;/code&amp;gt;: retrieves the path stored earlier, wrapped in double quotes so it won&#039;t break into multiple arguments if the path contains spaces.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;$filename&amp;quot;&amp;lt;/code&amp;gt;: a built-in CodeRunner variable, automatically replaced with the path of the currently open file.&lt;br /&gt;
&lt;br /&gt;
This is equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php &amp;quot;/path/to/php_code_runner.php&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why there&#039;s a &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; in between ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php=$(...); &amp;quot;$php&amp;quot; &amp;quot;$filename&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; is the command separator, meaning &amp;quot;finish this command, then do the next one&amp;quot; — same as typing two separate lines:&lt;br /&gt;
&lt;br /&gt;
# First, find the php path and store it.&lt;br /&gt;
# Then, use that path to run the file.&lt;br /&gt;
&lt;br /&gt;
== Why &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; uses that odd quoting pattern ==&lt;br /&gt;
&lt;br /&gt;
CodeRunner handles &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; by directly replacing the text &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; in the Run Command field with the actual file path string — it&#039;s not spawning a shell first and passing in a variable. In other words, CodeRunner does &#039;&#039;&#039;text substitution&#039;&#039;&#039;, not shell variable expansion.&lt;br /&gt;
&lt;br /&gt;
Since the whole command is wrapped in single quotes &amp;lt;code&amp;gt;&#039;...&#039;&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;sh -c&amp;lt;/code&amp;gt;, the shell won&#039;t expand anything inside those single quotes at all. If &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; were left inside the single quotes, it would be treated as the &#039;&#039;&#039;literal text&#039;&#039;&#039; &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt;, not the actual path CodeRunner substitutes in.&lt;br /&gt;
&lt;br /&gt;
The fix is to &amp;quot;step out&amp;quot; of the single-quoted string right where &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; needs to go, let CodeRunner substitute it outside the quotes, then step back into the single-quoted string:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;&#039;&amp;quot;$filename&amp;quot;&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Broken down:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;&#039;   →  closing double quote + closing single quote (temporarily exits the string)&lt;br /&gt;
&amp;quot;$filename&amp;quot;  →  outside the single quotes, so CodeRunner replaces it with the actual file path&lt;br /&gt;
&#039;&amp;quot;   →  opening single quote + opening double quote (re-enters the string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a common shell trick: &#039;&#039;&#039;inserting content that needs to be expanded in the middle of a single-quoted string&#039;&#039;&#039;. Since single quotes never expand anything inside them, the only way to splice in something that needs expanding is to end the single-quoted string, insert the piece, then start a new single-quoted string right after.&lt;br /&gt;
&lt;br /&gt;
== Summary of the Flow ==&lt;br /&gt;
&lt;br /&gt;
# CodeRunner first replaces &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; with the actual file path as plain text (a pure string substitution that happens before the command reaches the shell).&lt;br /&gt;
# The resulting full string is passed to &amp;lt;code&amp;gt;/bin/sh -c&amp;lt;/code&amp;gt; for execution.&lt;br /&gt;
# The shell runs &amp;lt;code&amp;gt;ls | sort -V | tail -1&amp;lt;/code&amp;gt; to dynamically scan for the newest installed MAMP php executable path, storing it in the &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
# That path is used to run your php file, with the file path passed as an argument.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The advantage&#039;&#039;&#039;: it doesn&#039;t depend on &amp;lt;code&amp;gt;which&amp;lt;/code&amp;gt;, aliases, or &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt; at all — because CodeRunner&#039;s execution environment doesn&#039;t load shell config files like &amp;lt;code&amp;gt;.zshrc&amp;lt;/code&amp;gt; (where aliases are defined), scanning the filesystem directly for the path is the most reliable approach. And future MAMP php version upgrades won&#039;t require manually updating this setting again.&lt;br /&gt;
&lt;br /&gt;
[[Category: Programming]]&lt;br /&gt;
[[Category: PHP]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Integration_of_CodeRunner_with_MAMP&amp;diff=26408</id>
		<title>Integration of CodeRunner with MAMP</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Integration_of_CodeRunner_with_MAMP&amp;diff=26408"/>
		<updated>2026-07-15T02:20:41Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Summary of the Flow */ fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CodeRunner PHP Run Command: Auto-Detecting the Version =&lt;br /&gt;
&lt;br /&gt;
# [https://coderunnerapp.com/ CodeRunner – Programming Editor for macOS]&lt;br /&gt;
# [https://www.mamp.info/en/mac/ MAMP]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Settings → Languages → PHP → Run Command, the default configuration usually looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/path/to/php $filename&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php $filename&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The problem is that every time MAMP upgrades its PHP version, you have to come back and manually update this path. Changing it to the line below lets CodeRunner automatically detect the &amp;quot;currently installed newest version&amp;quot; every time it runs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/bin/sh -c &#039;php=$(ls -d /Applications/MAMP/bin/php/php*/bin/php | sort -V | tail -1); &amp;quot;$php&amp;quot; &amp;quot;&#039;&amp;quot;$filename&amp;quot;&#039;&amp;quot;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overall Structure ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sh -c &#039;  command string  &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; to treat the following text as a shell command to execute. Everything inside the single quotes &amp;lt;code&amp;gt;&#039;...&#039;&amp;lt;/code&amp;gt; is the actual script being run, just packed onto one line.&lt;br /&gt;
&lt;br /&gt;
== Step 1: Finding the newest php executable ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php=$(ls -d /Applications/MAMP/bin/php/php*/bin/php | sort -V | tail -1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Segment &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; What it does &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;ls -d /Applications/MAMP/bin/php/php*/bin/php&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Lists all files matching this path pattern &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;sort -V&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Sorts by &#039;&#039;&#039;version number&#039;&#039;&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;tail -1&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Takes the last line of the sorted output — the newest version &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;php=$(...)&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Stores the result into the variable &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What &amp;lt;code&amp;gt;ls -d&amp;lt;/code&amp;gt; does&#039;&#039;&#039;: Normally, &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; on a directory lists its contents, but &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; makes it list the matching path itself without descending into it. &amp;lt;code&amp;gt;php*&amp;lt;/code&amp;gt; is a wildcard matching every folder under &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; that starts with &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt;, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.1.33/bin/php&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php&lt;br /&gt;
/Applications/MAMP/bin/php/php8.3.14/bin/php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What &amp;lt;code&amp;gt;sort -V&amp;lt;/code&amp;gt; does&#039;&#039;&#039;: Regular &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; sorts as plain strings, which causes problems — &amp;lt;code&amp;gt;php8.10.0&amp;lt;/code&amp;gt; would sort &#039;&#039;before&#039;&#039; &amp;lt;code&amp;gt;php8.2.0&amp;lt;/code&amp;gt; (since character &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; is less than &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;-V&amp;lt;/code&amp;gt; (version sort) understands version-number semantics and correctly places &amp;lt;code&amp;gt;8.10.0&amp;lt;/code&amp;gt; after &amp;lt;code&amp;gt;8.2.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;tail -1&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Takes the last line of the sorted result — the entry with the highest version number. So the whole &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt; expression captures the full path to the newest installed MAMP php version.&lt;br /&gt;
&lt;br /&gt;
After this line runs, the &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; variable holds something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 2: Actually running php ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;$php&amp;quot; &amp;quot;$filename&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;$php&amp;quot;&amp;lt;/code&amp;gt;: retrieves the path stored earlier, wrapped in double quotes so it won&#039;t break into multiple arguments if the path contains spaces.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;$filename&amp;quot;&amp;lt;/code&amp;gt;: a built-in CodeRunner variable, automatically replaced with the path of the currently open file.&lt;br /&gt;
&lt;br /&gt;
This is equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php &amp;quot;/path/to/php_code_runner.php&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why there&#039;s a &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; in between ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php=$(...); &amp;quot;$php&amp;quot; &amp;quot;$filename&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; is the command separator, meaning &amp;quot;finish this command, then do the next one&amp;quot; — same as typing two separate lines:&lt;br /&gt;
&lt;br /&gt;
# First, find the php path and store it.&lt;br /&gt;
# Then, use that path to run the file.&lt;br /&gt;
&lt;br /&gt;
== Why &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; uses that odd quoting pattern ==&lt;br /&gt;
&lt;br /&gt;
CodeRunner handles &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; by directly replacing the text &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; in the Run Command field with the actual file path string — it&#039;s not spawning a shell first and passing in a variable. In other words, CodeRunner does &#039;&#039;&#039;text substitution&#039;&#039;&#039;, not shell variable expansion.&lt;br /&gt;
&lt;br /&gt;
Since the whole command is wrapped in single quotes &amp;lt;code&amp;gt;&#039;...&#039;&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;sh -c&amp;lt;/code&amp;gt;, the shell won&#039;t expand anything inside those single quotes at all. If &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; were left inside the single quotes, it would be treated as the &#039;&#039;&#039;literal text&#039;&#039;&#039; &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt;, not the actual path CodeRunner substitutes in.&lt;br /&gt;
&lt;br /&gt;
The fix is to &amp;quot;step out&amp;quot; of the single-quoted string right where &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; needs to go, let CodeRunner substitute it outside the quotes, then step back into the single-quoted string:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;&#039;&amp;quot;$filename&amp;quot;&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Broken down:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;&#039;   →  closing double quote + closing single quote (temporarily exits the string)&lt;br /&gt;
&amp;quot;$filename&amp;quot;  →  outside the single quotes, so CodeRunner replaces it with the actual file path&lt;br /&gt;
&#039;&amp;quot;   →  opening single quote + opening double quote (re-enters the string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a common shell trick: &#039;&#039;&#039;inserting content that needs to be expanded in the middle of a single-quoted string&#039;&#039;&#039;. Since single quotes never expand anything inside them, the only way to splice in something that needs expanding is to end the single-quoted string, insert the piece, then start a new single-quoted string right after.&lt;br /&gt;
&lt;br /&gt;
== Summary of the Flow ==&lt;br /&gt;
&lt;br /&gt;
# CodeRunner first replaces &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; with the actual file path as plain text (a pure string substitution that happens before the command reaches the shell).&lt;br /&gt;
# The resulting full string is passed to &amp;lt;code&amp;gt;/bin/sh -c&amp;lt;/code&amp;gt; for execution.&lt;br /&gt;
# The shell runs &amp;lt;code&amp;gt;ls | sort -V | tail -1&amp;lt;/code&amp;gt; to dynamically scan for the newest installed MAMP php executable path, storing it in the &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
# That path is used to run your php file, with the file path passed as an argument.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The advantage&#039;&#039;&#039;: it doesn&#039;t depend on &amp;lt;code&amp;gt;which&amp;lt;/code&amp;gt;, aliases, or &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt; at all — because CodeRunner&#039;s execution environment doesn&#039;t load shell config files like &amp;lt;code&amp;gt;.zshrc&amp;lt;/code&amp;gt; (where aliases are defined), scanning the filesystem directly for the path is the most reliable approach. And future MAMP php version upgrades won&#039;t require manually updating this setting again.&lt;br /&gt;
&lt;br /&gt;
[[Category: Programming]]&lt;br /&gt;
[[Category: PHP]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Integration_of_CodeRunner_with_MAMP&amp;diff=26407</id>
		<title>Integration of CodeRunner with MAMP</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Integration_of_CodeRunner_with_MAMP&amp;diff=26407"/>
		<updated>2026-07-15T02:18:52Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CodeRunner PHP Run Command: Auto-Detecting the Version =&lt;br /&gt;
&lt;br /&gt;
# [https://coderunnerapp.com/ CodeRunner – Programming Editor for macOS]&lt;br /&gt;
# [https://www.mamp.info/en/mac/ MAMP]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Settings → Languages → PHP → Run Command, the default configuration usually looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/path/to/php $filename&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php $filename&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The problem is that every time MAMP upgrades its PHP version, you have to come back and manually update this path. Changing it to the line below lets CodeRunner automatically detect the &amp;quot;currently installed newest version&amp;quot; every time it runs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/bin/sh -c &#039;php=$(ls -d /Applications/MAMP/bin/php/php*/bin/php | sort -V | tail -1); &amp;quot;$php&amp;quot; &amp;quot;&#039;&amp;quot;$filename&amp;quot;&#039;&amp;quot;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overall Structure ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sh -c &#039;  command string  &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; to treat the following text as a shell command to execute. Everything inside the single quotes &amp;lt;code&amp;gt;&#039;...&#039;&amp;lt;/code&amp;gt; is the actual script being run, just packed onto one line.&lt;br /&gt;
&lt;br /&gt;
== Step 1: Finding the newest php executable ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php=$(ls -d /Applications/MAMP/bin/php/php*/bin/php | sort -V | tail -1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Segment &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; What it does &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;ls -d /Applications/MAMP/bin/php/php*/bin/php&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Lists all files matching this path pattern &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;sort -V&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Sorts by &#039;&#039;&#039;version number&#039;&#039;&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;tail -1&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Takes the last line of the sorted output — the newest version &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;php=$(...)&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Stores the result into the variable &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What &amp;lt;code&amp;gt;ls -d&amp;lt;/code&amp;gt; does&#039;&#039;&#039;: Normally, &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; on a directory lists its contents, but &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; makes it list the matching path itself without descending into it. &amp;lt;code&amp;gt;php*&amp;lt;/code&amp;gt; is a wildcard matching every folder under &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; that starts with &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt;, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.1.33/bin/php&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php&lt;br /&gt;
/Applications/MAMP/bin/php/php8.3.14/bin/php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What &amp;lt;code&amp;gt;sort -V&amp;lt;/code&amp;gt; does&#039;&#039;&#039;: Regular &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; sorts as plain strings, which causes problems — &amp;lt;code&amp;gt;php8.10.0&amp;lt;/code&amp;gt; would sort &#039;&#039;before&#039;&#039; &amp;lt;code&amp;gt;php8.2.0&amp;lt;/code&amp;gt; (since character &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; is less than &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;-V&amp;lt;/code&amp;gt; (version sort) understands version-number semantics and correctly places &amp;lt;code&amp;gt;8.10.0&amp;lt;/code&amp;gt; after &amp;lt;code&amp;gt;8.2.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;tail -1&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Takes the last line of the sorted result — the entry with the highest version number. So the whole &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt; expression captures the full path to the newest installed MAMP php version.&lt;br /&gt;
&lt;br /&gt;
After this line runs, the &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; variable holds something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 2: Actually running php ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;$php&amp;quot; &amp;quot;$filename&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;$php&amp;quot;&amp;lt;/code&amp;gt;: retrieves the path stored earlier, wrapped in double quotes so it won&#039;t break into multiple arguments if the path contains spaces.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;$filename&amp;quot;&amp;lt;/code&amp;gt;: a built-in CodeRunner variable, automatically replaced with the path of the currently open file.&lt;br /&gt;
&lt;br /&gt;
This is equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php &amp;quot;/path/to/php_code_runner.php&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why there&#039;s a &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; in between ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php=$(...); &amp;quot;$php&amp;quot; &amp;quot;$filename&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; is the command separator, meaning &amp;quot;finish this command, then do the next one&amp;quot; — same as typing two separate lines:&lt;br /&gt;
&lt;br /&gt;
# First, find the php path and store it.&lt;br /&gt;
# Then, use that path to run the file.&lt;br /&gt;
&lt;br /&gt;
== Why &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; uses that odd quoting pattern ==&lt;br /&gt;
&lt;br /&gt;
CodeRunner handles &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; by directly replacing the text &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; in the Run Command field with the actual file path string — it&#039;s not spawning a shell first and passing in a variable. In other words, CodeRunner does &#039;&#039;&#039;text substitution&#039;&#039;&#039;, not shell variable expansion.&lt;br /&gt;
&lt;br /&gt;
Since the whole command is wrapped in single quotes &amp;lt;code&amp;gt;&#039;...&#039;&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;sh -c&amp;lt;/code&amp;gt;, the shell won&#039;t expand anything inside those single quotes at all. If &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; were left inside the single quotes, it would be treated as the &#039;&#039;&#039;literal text&#039;&#039;&#039; &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt;, not the actual path CodeRunner substitutes in.&lt;br /&gt;
&lt;br /&gt;
The fix is to &amp;quot;step out&amp;quot; of the single-quoted string right where &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; needs to go, let CodeRunner substitute it outside the quotes, then step back into the single-quoted string:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;&#039;&amp;quot;$filename&amp;quot;&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Broken down:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;&#039;   →  closing double quote + closing single quote (temporarily exits the string)&lt;br /&gt;
&amp;quot;$filename&amp;quot;  →  outside the single quotes, so CodeRunner replaces it with the actual file path&lt;br /&gt;
&#039;&amp;quot;   →  opening single quote + opening double quote (re-enters the string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a common shell trick: &#039;&#039;&#039;inserting content that needs to be expanded in the middle of a single-quoted string&#039;&#039;&#039;. Since single quotes never expand anything inside them, the only way to splice in something that needs expanding is to end the single-quoted string, insert the piece, then start a new single-quoted string right after.&lt;br /&gt;
&lt;br /&gt;
== Summary of the Flow ==&lt;br /&gt;
&lt;br /&gt;
# CodeRunner first replaces &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; with the actual file path as plain text (a pure string substitution that happens before the command reaches the shell).&lt;br /&gt;
# The resulting full string is passed to &amp;lt;code&amp;gt;/bin/sh -c&amp;lt;/code&amp;gt; for execution.&lt;br /&gt;
# The shell runs &amp;lt;code&amp;gt;ls | sort -V | tail -1&amp;lt;/code&amp;gt; to dynamically scan for the newest installed MAMP php executable path, storing it in the &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
# That path is used to run your php file, with the file path passed as an argument.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The advantage&#039;&#039;&#039;: it doesn&#039;t depend on &amp;lt;code&amp;gt;which&amp;lt;/code&amp;gt;, aliases, or &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt; at all — because CodeRunner&#039;s execution environment doesn&#039;t load shell config files like &amp;lt;code&amp;gt;.zshrc&amp;lt;/code&amp;gt; (where aliases are defined), scanning the filesystem directly for the path is the most reliable approach. And future MAMP php version upgrades won&#039;t require manually updating this setting again.&lt;br /&gt;
&lt;br /&gt;
[[Catergory: Programming]]&lt;br /&gt;
[[Catergory: PHP]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Integration_of_CodeRunner_with_MAMP&amp;diff=26406</id>
		<title>Integration of CodeRunner with MAMP</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Integration_of_CodeRunner_with_MAMP&amp;diff=26406"/>
		<updated>2026-07-15T02:14:29Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: Created page with &amp;quot;= CodeRunner PHP Run Command: Auto-Detecting the Version =  In Settings → Languages → PHP → Run Command, the default configuration usually looks like this:  &amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt; /path/to/php $filename &amp;lt;/pre&amp;gt;  For example:  &amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt; /Applications/MAMP/bin/php/php8.2.29/bin/php $filename &amp;lt;/pre&amp;gt;  The problem is that every time MAMP upgrades its PHP version, you have to come back and manually update this path. Changing it to the line below lets CodeRunner automat...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CodeRunner PHP Run Command: Auto-Detecting the Version =&lt;br /&gt;
&lt;br /&gt;
In Settings → Languages → PHP → Run Command, the default configuration usually looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/path/to/php $filename&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php $filename&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The problem is that every time MAMP upgrades its PHP version, you have to come back and manually update this path. Changing it to the line below lets CodeRunner automatically detect the &amp;quot;currently installed newest version&amp;quot; every time it runs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/bin/sh -c &#039;php=$(ls -d /Applications/MAMP/bin/php/php*/bin/php | sort -V | tail -1); &amp;quot;$php&amp;quot; &amp;quot;&#039;&amp;quot;$filename&amp;quot;&#039;&amp;quot;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Overall Structure ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/bin/sh -c &#039;  command string  &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt; tells &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; to treat the following text as a shell command to execute. Everything inside the single quotes &amp;lt;code&amp;gt;&#039;...&#039;&amp;lt;/code&amp;gt; is the actual script being run, just packed onto one line.&lt;br /&gt;
&lt;br /&gt;
== Step 1: Finding the newest php executable ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php=$(ls -d /Applications/MAMP/bin/php/php*/bin/php | sort -V | tail -1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Segment &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; What it does &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;ls -d /Applications/MAMP/bin/php/php*/bin/php&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Lists all files matching this path pattern &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;sort -V&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Sorts by &#039;&#039;&#039;version number&#039;&#039;&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;tail -1&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Takes the last line of the sorted output — the newest version &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &amp;lt;code&amp;gt;php=$(...)&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Stores the result into the variable &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What &amp;lt;code&amp;gt;ls -d&amp;lt;/code&amp;gt; does&#039;&#039;&#039;: Normally, &amp;lt;code&amp;gt;ls&amp;lt;/code&amp;gt; on a directory lists its contents, but &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; makes it list the matching path itself without descending into it. &amp;lt;code&amp;gt;php*&amp;lt;/code&amp;gt; is a wildcard matching every folder under &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; that starts with &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt;, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.1.33/bin/php&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php&lt;br /&gt;
/Applications/MAMP/bin/php/php8.3.14/bin/php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What &amp;lt;code&amp;gt;sort -V&amp;lt;/code&amp;gt; does&#039;&#039;&#039;: Regular &amp;lt;code&amp;gt;sort&amp;lt;/code&amp;gt; sorts as plain strings, which causes problems — &amp;lt;code&amp;gt;php8.10.0&amp;lt;/code&amp;gt; would sort &#039;&#039;before&#039;&#039; &amp;lt;code&amp;gt;php8.2.0&amp;lt;/code&amp;gt; (since character &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; is less than &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;-V&amp;lt;/code&amp;gt; (version sort) understands version-number semantics and correctly places &amp;lt;code&amp;gt;8.10.0&amp;lt;/code&amp;gt; after &amp;lt;code&amp;gt;8.2.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;tail -1&amp;lt;/code&amp;gt;&#039;&#039;&#039;: Takes the last line of the sorted result — the entry with the highest version number. So the whole &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt; expression captures the full path to the newest installed MAMP php version.&lt;br /&gt;
&lt;br /&gt;
After this line runs, the &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; variable holds something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 2: Actually running php ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;$php&amp;quot; &amp;quot;$filename&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;$php&amp;quot;&amp;lt;/code&amp;gt;: retrieves the path stored earlier, wrapped in double quotes so it won&#039;t break into multiple arguments if the path contains spaces.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;$filename&amp;quot;&amp;lt;/code&amp;gt;: a built-in CodeRunner variable, automatically replaced with the path of the currently open file.&lt;br /&gt;
&lt;br /&gt;
This is equivalent to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/Applications/MAMP/bin/php/php8.2.29/bin/php &amp;quot;/path/to/php_code_runner.php&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Why there&#039;s a &amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; in between ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
php=$(...); &amp;quot;$php&amp;quot; &amp;quot;$filename&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt; is the command separator, meaning &amp;quot;finish this command, then do the next one&amp;quot; — same as typing two separate lines:&lt;br /&gt;
&lt;br /&gt;
# First, find the php path and store it.&lt;br /&gt;
# Then, use that path to run the file.&lt;br /&gt;
&lt;br /&gt;
== Why &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; uses that odd quoting pattern ==&lt;br /&gt;
&lt;br /&gt;
CodeRunner handles &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; by directly replacing the text &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; in the Run Command field with the actual file path string — it&#039;s not spawning a shell first and passing in a variable. In other words, CodeRunner does &#039;&#039;&#039;text substitution&#039;&#039;&#039;, not shell variable expansion.&lt;br /&gt;
&lt;br /&gt;
Since the whole command is wrapped in single quotes &amp;lt;code&amp;gt;&#039;...&#039;&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;sh -c&amp;lt;/code&amp;gt;, the shell won&#039;t expand anything inside those single quotes at all. If &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; were left inside the single quotes, it would be treated as the &#039;&#039;&#039;literal text&#039;&#039;&#039; &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt;, not the actual path CodeRunner substitutes in.&lt;br /&gt;
&lt;br /&gt;
The fix is to &amp;quot;step out&amp;quot; of the single-quoted string right where &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; needs to go, let CodeRunner substitute it outside the quotes, then step back into the single-quoted string:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;&#039;&amp;quot;$filename&amp;quot;&#039;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Broken down:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;&#039;   →  closing double quote + closing single quote (temporarily exits the string)&lt;br /&gt;
&amp;quot;$filename&amp;quot;  →  outside the single quotes, so CodeRunner replaces it with the actual file path&lt;br /&gt;
&#039;&amp;quot;   →  opening single quote + opening double quote (re-enters the string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a common shell trick: &#039;&#039;&#039;inserting content that needs to be expanded in the middle of a single-quoted string&#039;&#039;&#039;. Since single quotes never expand anything inside them, the only way to splice in something that needs expanding is to end the single-quoted string, insert the piece, then start a new single-quoted string right after.&lt;br /&gt;
&lt;br /&gt;
== Summary of the Flow ==&lt;br /&gt;
&lt;br /&gt;
# CodeRunner first replaces &amp;lt;code&amp;gt;$filename&amp;lt;/code&amp;gt; with the actual file path as plain text (a pure string substitution that happens before the command reaches the shell).&lt;br /&gt;
# The resulting full string is passed to &amp;lt;code&amp;gt;/bin/sh -c&amp;lt;/code&amp;gt; for execution.&lt;br /&gt;
# The shell runs &amp;lt;code&amp;gt;ls | sort -V | tail -1&amp;lt;/code&amp;gt; to dynamically scan for the newest installed MAMP php executable path, storing it in the &amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
# That path is used to run your php file, with the file path passed as an argument.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The advantage&#039;&#039;&#039;: it doesn&#039;t depend on &amp;lt;code&amp;gt;which&amp;lt;/code&amp;gt;, aliases, or &amp;lt;code&amp;gt;$PATH&amp;lt;/code&amp;gt; at all — because CodeRunner&#039;s execution environment doesn&#039;t load shell config files like &amp;lt;code&amp;gt;.zshrc&amp;lt;/code&amp;gt; (where aliases are defined), scanning the filesystem directly for the path is the most reliable approach. And future MAMP php version upgrades won&#039;t require manually updating this setting again.&lt;br /&gt;
&lt;br /&gt;
[[Catergory: Programming]]&lt;br /&gt;
[[Catergory: PHP]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26405</id>
		<title>Troubleshooting of GIT</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26405"/>
		<updated>2026-07-13T06:54:42Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Git Shows Files as Modified After chmod — File Mode Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Troubleshooting of GIT ==&lt;br /&gt;
&lt;br /&gt;
=== Restoring deleted files in Git ===&lt;br /&gt;
[[Restoring deleted files in Git]]&lt;br /&gt;
&lt;br /&gt;
=== SSH Authentication Failed: Permission denied (publickey) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After running the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
you may see the following error:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cloning into &#039;/opt/your-app&#039;...&lt;br /&gt;
git@github.com: Permission denied (publickey).&lt;br /&gt;
fatal: Could not read from remote repository.&lt;br /&gt;
&lt;br /&gt;
Please make sure you have the correct access rights and the repository exists.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A similar error may also occur when running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This error occurs when Git cannot authenticate with GitHub over SSH.&lt;br /&gt;
&lt;br /&gt;
Common causes include:&lt;br /&gt;
&lt;br /&gt;
* The SSH key does not exist on the server.&lt;br /&gt;
* The SSH key has not been added to GitHub.&lt;br /&gt;
* The SSH key is added to the wrong GitHub account or the wrong repository.&lt;br /&gt;
* The repository is private and the key does not have access.&lt;br /&gt;
* The server has multiple SSH keys, but Git is using the wrong one.&lt;br /&gt;
* The key is a GitHub Deploy Key that belongs to another repository.&lt;br /&gt;
* `sudo git clone` or `sudo git pull` is being used, causing Git to use the `root` user&#039;s SSH key instead of the deploy user&#039;s SSH key.&lt;br /&gt;
&lt;br /&gt;
For example, if you run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current SSH key is valid, but it is linked to another repository&#039;s Deploy Key. In that case, GitHub may return:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERROR: Repository not found.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
even if the target repository URL is correct.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended Solution — Use a dedicated SSH alias for the project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the safest approach when the server has multiple GitHub Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
Assume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Deploy user: your-user&lt;br /&gt;
App path: /opt/your-app&lt;br /&gt;
Private key: /home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
Public key: /home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
Repository: git@github.com:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1 — Check the key exists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -l ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the key does not exist, create one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t ed25519 -C &amp;quot;your-app-deploy-key&amp;quot; -f ~/.ssh/id_ed25519_your_app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2 — Add the public key to GitHub&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Print the public key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add it to the target repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub Repository&lt;br /&gt;
→ Settings&lt;br /&gt;
→ Deploy keys&lt;br /&gt;
→ Add deploy key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the server only needs to clone or pull the repository, do not enable write access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3 — Configure SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Edit the SSH config file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host github-your-app&lt;br /&gt;
  HostName github.com&lt;br /&gt;
  User git&lt;br /&gt;
  IdentityFile ~/.ssh/id_ed25519_your_app&lt;br /&gt;
  IdentitiesOnly yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fix SSH file permissions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod 700 ~/.ssh&lt;br /&gt;
chmod 600 ~/.ssh/config ~/.ssh/id_ed25519_your_app&lt;br /&gt;
chmod 644 ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh&amp;lt;/code&amp;gt; should be accessible only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/config/&amp;lt;/code&amp;gt; should be readable/writable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app&amp;lt;/code&amp;gt; private key should be readable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app.pub&amp;lt;/code&amp;gt; public key can be readable by others&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4 — Test the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is expected. It means SSH authentication works, but GitHub does not allow interactive shell login.&lt;br /&gt;
&lt;br /&gt;
If the result shows another repository, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the alias is not using the intended key, or the key was added to the wrong repository.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 5 — Clone using the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Instead of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If `/opt/your-app` requires root permission to create, prefer creating the directory first and assigning ownership to the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /opt/your-app&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This avoids using `sudo git clone`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 6 — If the repository already exists, update the remote URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check the current remote:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it uses the default GitHub host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
change it to use the SSH alias:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Avoid using sudo with Git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Avoid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because `sudo` runs Git as `root`, Git may use root&#039;s SSH keys instead of the deploy user&#039;s SSH keys.&lt;br /&gt;
&lt;br /&gt;
If the app directory is owned by `root`, fix ownership instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run Git commands as the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Issue: dubious ownership&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If Git shows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fatal: detected dubious ownership in repository at &#039;/opt/your-app&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current user and the repository owner do not match.&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -ld /opt/your-app&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the app should be maintained by the deploy user, fix ownership:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, mark the directory as safe:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global --add safe.directory /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For deployment directories, fixing ownership is usually cleaner if the deploy user is expected to run `git pull`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternative Solution — Pass the SSH key inline&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can also override the SSH command directly.&lt;br /&gt;
&lt;br /&gt;
First, test the key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to run this with `sudo`, preserve the environment explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, this is usually less clean than using an SSH alias, especially for long-term maintenance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-o IdentitiesOnly=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
forces SSH to use only the specified key and prevents SSH from trying other keys loaded in the agent. This is important on servers with multiple Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Recommended long-term setup:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 1. Create or confirm a dedicated deploy key&lt;br /&gt;
ls ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&lt;br /&gt;
# 2. Add the public key to the target GitHub repository Deploy Keys&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&lt;br /&gt;
# 3. Configure SSH alias&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&lt;br /&gt;
# 4. Test alias&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&lt;br /&gt;
# 5. Clone or update remote using alias&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&lt;br /&gt;
# or, for an existing repo&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The key lesson is: when multiple Deploy Keys exist on the same server, avoid relying on `git@github.com`. Use a project-specific SSH alias such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so Git always uses the correct SSH key.&lt;br /&gt;
&lt;br /&gt;
=== Git Shows Files as Modified After chmod — File Mode Changes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After running &amp;lt;code&amp;gt;chmod +x&amp;lt;/code&amp;gt; or copying the repository between different operating systems or file systems, Git may report files as modified even though their contents have not changed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&lt;br /&gt;
modified: scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; may show only a file mode change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/scripts/deploy.sh b/scripts/deploy.sh&lt;br /&gt;
old mode 100644&lt;br /&gt;
new mode 100755&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Git file modes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;100644&amp;lt;/code&amp;gt; means a regular non-executable file.&lt;br /&gt;
* &amp;lt;code&amp;gt;100755&amp;lt;/code&amp;gt; means a regular executable file.&lt;br /&gt;
&lt;br /&gt;
Git records the executable bit as part of the tracked file metadata. Therefore, adding or removing executable permission can appear as a modification even when the file contents are identical. Git’s diff format explicitly reports these changes as &amp;lt;code&amp;gt;old mode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;new mode&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diagnosis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the following command to check whether the reported changes are file mode changes only:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff --summary&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode change 100644 =&amp;gt; 100755 scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also inspect the full diff:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the output contains only &amp;lt;code&amp;gt;old mode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;new mode&amp;lt;/code&amp;gt;, without added or removed content lines, the change is caused by the executable bit rather than file contents.&lt;br /&gt;
&lt;br /&gt;
Check the current repository setting with: &amp;lt;ref&amp;gt;[https://git-scm.com/docs/git-config?utm_source=chatgpt.com Git - git-config Documentation]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see which configuration file defines the value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --show-origin --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The behavior is controlled by Git’s &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; setting.&lt;br /&gt;
&lt;br /&gt;
When it is set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, Git checks whether the executable bit in the working tree differs from the mode stored in the Git index. This can create unexpected changes when:&lt;br /&gt;
&lt;br /&gt;
* A file was modified using &amp;lt;code&amp;gt;chmod +x&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;chmod -x&amp;lt;/code&amp;gt;.&lt;br /&gt;
* A repository was copied between Linux, macOS, Windows, a network drive, or another file system with different permission behavior.&lt;br /&gt;
* An archive, synchronization tool, or shared folder changed executable permissions.&lt;br /&gt;
* A container or deployment process rewrote file modes.&lt;br /&gt;
&lt;br /&gt;
Git’s documentation notes that some file systems may not reliably preserve executable-bit information, which is why &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; can be disabled when those mode differences should not be trusted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To ignore executable-permission changes in the current repository, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config core.fileMode false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the recommended scope when the issue affects only one repository. The setting is saved in that repository’s &amp;lt;code&amp;gt;.git/config&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
To apply the setting to all repositories for the current user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global core.fileMode false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global setting is stored in the user-level Git configuration and acts as a fallback unless a repository overrides it.&lt;br /&gt;
&lt;br /&gt;
Verify the effective value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The expected output is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check the repository again:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
git diff --summary&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Permission-only changes should no longer appear as unstaged modifications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Restore File Mode Tracking&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To restore executable-bit tracking for the current repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config core.fileMode true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remove the repository-specific override and return to the global or system default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --unset core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To restore tracking globally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global core.fileMode true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When the Executable Bit Should Be Committed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do not disable &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; merely to hide a legitimate permission change.&lt;br /&gt;
&lt;br /&gt;
For shell scripts, deployment scripts, Git hooks, command-line tools, and other files that must be executable after checkout, record the executable bit in Git intentionally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x scripts/deploy.sh&lt;br /&gt;
git add scripts/deploy.sh&lt;br /&gt;
git commit -m &amp;quot;Mark deploy script as executable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The committed mode change will appear as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode change 100644 =&amp;gt; 100755 scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the local file system cannot apply &amp;lt;code&amp;gt;chmod&amp;lt;/code&amp;gt; correctly, update the Git index directly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git update-index --chmod=+x scripts/deploy.sh&lt;br /&gt;
git commit -m &amp;quot;Mark deploy script as executable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remove executable status from the Git index:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git update-index --chmod=-x scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git provides index-level support for explicitly overriding a tracked file’s executable bit.&lt;br /&gt;
&lt;br /&gt;
{{exclaim}} Notice: Setting &amp;lt;code&amp;gt;core.fileMode=false&amp;lt;/code&amp;gt; does not change the actual operating-system permissions and does not rewrite previously committed file modes. It only tells Git not to treat executable-bit differences in the working tree as modifications. Use a repository-level setting unless the same problem consistently affects all repositories on the machine.&lt;br /&gt;
&lt;br /&gt;
=== Git Submodule Pull Failed: unable to create file — File exists ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After pulling in GitHub Desktop, met the error message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fetching submodule lib&lt;br /&gt;
error: unable to create file feeds/example.php: File exists&lt;br /&gt;
Updating xxxxxxxx..xxxxxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When Git tries to update the submodule to a newer commit, it finds a local untracked file with the same name, blocking the checkout. A mid-pull failure leaves the submodule in an inconsistent state and causes a large number of unexpected unstaged changes to appear in GitHub Desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run the following command in the project root directory to force re-sync the submodule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git submodule update --init --recursive --force&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it still fails, manually remove the conflicting file and retry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm lib/feeds/example.php&lt;br /&gt;
git submodule update --init --recursive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter the submodule directory and verify the status is clean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd lib&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The expected output should be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HEAD detached from xxxxxxxx&lt;br /&gt;
nothing to commit, working tree clean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
`nothing to commit, working tree clean` confirms the submodule has been successfully synced — return to GitHub Desktop and continue as normal. `HEAD detached` is the expected state for a submodule and does not require any action.&lt;br /&gt;
&lt;br /&gt;
{{exclaim}} Notice: The large number of unstaged changes appearing in GitHub Desktop after a failed Pull will typically return to normal once the submodule is fixed. If unexpected changes still remain, run &amp;lt;code&amp;gt;git submodule foreach git checkout .&amp;lt;/code&amp;gt; to revert all modifications inside every submodule.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent Generating a new SSH key and adding it to the ssh-agent - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account Adding a new SSH key to your GitHub account - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection Testing your SSH connection - GitHub Docs]&lt;br /&gt;
* [https://linux.die.net/man/5/ssh_config ssh_config(5): OpenSSH SSH client config files - Linux man page]&lt;br /&gt;
* [https://docs.github.com/en/authentication/troubleshooting-ssh Troubleshooting SSH - GitHub Docs]&lt;br /&gt;
&lt;br /&gt;
[[Category: Git]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26404</id>
		<title>Troubleshooting of GIT</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26404"/>
		<updated>2026-07-13T06:52:54Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Git Submodule Pull Failed: unable to create file — File exists */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Troubleshooting of GIT ==&lt;br /&gt;
&lt;br /&gt;
=== Restoring deleted files in Git ===&lt;br /&gt;
[[Restoring deleted files in Git]]&lt;br /&gt;
&lt;br /&gt;
=== SSH Authentication Failed: Permission denied (publickey) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After running the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
you may see the following error:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cloning into &#039;/opt/your-app&#039;...&lt;br /&gt;
git@github.com: Permission denied (publickey).&lt;br /&gt;
fatal: Could not read from remote repository.&lt;br /&gt;
&lt;br /&gt;
Please make sure you have the correct access rights and the repository exists.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A similar error may also occur when running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This error occurs when Git cannot authenticate with GitHub over SSH.&lt;br /&gt;
&lt;br /&gt;
Common causes include:&lt;br /&gt;
&lt;br /&gt;
* The SSH key does not exist on the server.&lt;br /&gt;
* The SSH key has not been added to GitHub.&lt;br /&gt;
* The SSH key is added to the wrong GitHub account or the wrong repository.&lt;br /&gt;
* The repository is private and the key does not have access.&lt;br /&gt;
* The server has multiple SSH keys, but Git is using the wrong one.&lt;br /&gt;
* The key is a GitHub Deploy Key that belongs to another repository.&lt;br /&gt;
* `sudo git clone` or `sudo git pull` is being used, causing Git to use the `root` user&#039;s SSH key instead of the deploy user&#039;s SSH key.&lt;br /&gt;
&lt;br /&gt;
For example, if you run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current SSH key is valid, but it is linked to another repository&#039;s Deploy Key. In that case, GitHub may return:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERROR: Repository not found.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
even if the target repository URL is correct.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended Solution — Use a dedicated SSH alias for the project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the safest approach when the server has multiple GitHub Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
Assume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Deploy user: your-user&lt;br /&gt;
App path: /opt/your-app&lt;br /&gt;
Private key: /home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
Public key: /home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
Repository: git@github.com:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1 — Check the key exists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -l ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the key does not exist, create one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t ed25519 -C &amp;quot;your-app-deploy-key&amp;quot; -f ~/.ssh/id_ed25519_your_app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2 — Add the public key to GitHub&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Print the public key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add it to the target repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub Repository&lt;br /&gt;
→ Settings&lt;br /&gt;
→ Deploy keys&lt;br /&gt;
→ Add deploy key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the server only needs to clone or pull the repository, do not enable write access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3 — Configure SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Edit the SSH config file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host github-your-app&lt;br /&gt;
  HostName github.com&lt;br /&gt;
  User git&lt;br /&gt;
  IdentityFile ~/.ssh/id_ed25519_your_app&lt;br /&gt;
  IdentitiesOnly yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fix SSH file permissions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod 700 ~/.ssh&lt;br /&gt;
chmod 600 ~/.ssh/config ~/.ssh/id_ed25519_your_app&lt;br /&gt;
chmod 644 ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh&amp;lt;/code&amp;gt; should be accessible only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/config/&amp;lt;/code&amp;gt; should be readable/writable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app&amp;lt;/code&amp;gt; private key should be readable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app.pub&amp;lt;/code&amp;gt; public key can be readable by others&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4 — Test the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is expected. It means SSH authentication works, but GitHub does not allow interactive shell login.&lt;br /&gt;
&lt;br /&gt;
If the result shows another repository, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the alias is not using the intended key, or the key was added to the wrong repository.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 5 — Clone using the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Instead of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If `/opt/your-app` requires root permission to create, prefer creating the directory first and assigning ownership to the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /opt/your-app&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This avoids using `sudo git clone`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 6 — If the repository already exists, update the remote URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check the current remote:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it uses the default GitHub host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
change it to use the SSH alias:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Avoid using sudo with Git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Avoid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because `sudo` runs Git as `root`, Git may use root&#039;s SSH keys instead of the deploy user&#039;s SSH keys.&lt;br /&gt;
&lt;br /&gt;
If the app directory is owned by `root`, fix ownership instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run Git commands as the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Issue: dubious ownership&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If Git shows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fatal: detected dubious ownership in repository at &#039;/opt/your-app&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current user and the repository owner do not match.&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -ld /opt/your-app&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the app should be maintained by the deploy user, fix ownership:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, mark the directory as safe:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global --add safe.directory /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For deployment directories, fixing ownership is usually cleaner if the deploy user is expected to run `git pull`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternative Solution — Pass the SSH key inline&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can also override the SSH command directly.&lt;br /&gt;
&lt;br /&gt;
First, test the key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to run this with `sudo`, preserve the environment explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, this is usually less clean than using an SSH alias, especially for long-term maintenance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-o IdentitiesOnly=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
forces SSH to use only the specified key and prevents SSH from trying other keys loaded in the agent. This is important on servers with multiple Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Recommended long-term setup:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 1. Create or confirm a dedicated deploy key&lt;br /&gt;
ls ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&lt;br /&gt;
# 2. Add the public key to the target GitHub repository Deploy Keys&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&lt;br /&gt;
# 3. Configure SSH alias&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&lt;br /&gt;
# 4. Test alias&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&lt;br /&gt;
# 5. Clone or update remote using alias&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&lt;br /&gt;
# or, for an existing repo&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The key lesson is: when multiple Deploy Keys exist on the same server, avoid relying on `git@github.com`. Use a project-specific SSH alias such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so Git always uses the correct SSH key.&lt;br /&gt;
&lt;br /&gt;
=== Git Shows Files as Modified After chmod — File Mode Changes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After running &amp;lt;code&amp;gt;chmod +x&amp;lt;/code&amp;gt; or copying the repository between different operating systems or file systems, Git may report files as modified even though their contents have not changed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&lt;br /&gt;
modified: scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;git diff&amp;lt;/code&amp;gt; may show only a file mode change:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/scripts/deploy.sh b/scripts/deploy.sh&lt;br /&gt;
old mode 100644&lt;br /&gt;
new mode 100755&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Git file modes:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;100644&amp;lt;/code&amp;gt; means a regular non-executable file.&lt;br /&gt;
* &amp;lt;code&amp;gt;100755&amp;lt;/code&amp;gt; means a regular executable file.&lt;br /&gt;
&lt;br /&gt;
Git records the executable bit as part of the tracked file metadata. Therefore, adding or removing executable permission can appear as a modification even when the file contents are identical. Git’s diff format explicitly reports these changes as &amp;lt;code&amp;gt;old mode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;new mode&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Diagnosis&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the following command to check whether the reported changes are file mode changes only:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff --summary&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode change 100644 =&amp;gt; 100755 scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also inspect the full diff:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the output contains only &amp;lt;code&amp;gt;old mode&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;new mode&amp;lt;/code&amp;gt;, without added or removed content lines, the change is caused by the executable bit rather than file contents.&lt;br /&gt;
&lt;br /&gt;
Check the current repository setting with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To see which configuration file defines the value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --show-origin --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The behavior is controlled by Git’s &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; setting.&lt;br /&gt;
&lt;br /&gt;
When it is set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, Git checks whether the executable bit in the working tree differs from the mode stored in the Git index. This can create unexpected changes when:&lt;br /&gt;
&lt;br /&gt;
* A file was modified using &amp;lt;code&amp;gt;chmod +x&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;chmod -x&amp;lt;/code&amp;gt;.&lt;br /&gt;
* A repository was copied between Linux, macOS, Windows, a network drive, or another file system with different permission behavior.&lt;br /&gt;
* An archive, synchronization tool, or shared folder changed executable permissions.&lt;br /&gt;
* A container or deployment process rewrote file modes.&lt;br /&gt;
&lt;br /&gt;
Git’s documentation notes that some file systems may not reliably preserve executable-bit information, which is why &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; can be disabled when those mode differences should not be trusted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To ignore executable-permission changes in the current repository, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config core.fileMode false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the recommended scope when the issue affects only one repository. The setting is saved in that repository’s &amp;lt;code&amp;gt;.git/config&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
To apply the setting to all repositories for the current user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global core.fileMode false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The global setting is stored in the user-level Git configuration and acts as a fallback unless a repository overrides it.&lt;br /&gt;
&lt;br /&gt;
Verify the effective value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --get core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The expected output is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then check the repository again:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
git diff --summary&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Permission-only changes should no longer appear as unstaged modifications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Restore File Mode Tracking&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To restore executable-bit tracking for the current repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config core.fileMode true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remove the repository-specific override and return to the global or system default:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --unset core.fileMode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To restore tracking globally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global core.fileMode true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When the Executable Bit Should Be Committed&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Do not disable &amp;lt;code&amp;gt;core.fileMode&amp;lt;/code&amp;gt; merely to hide a legitimate permission change.&lt;br /&gt;
&lt;br /&gt;
For shell scripts, deployment scripts, Git hooks, command-line tools, and other files that must be executable after checkout, record the executable bit in Git intentionally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x scripts/deploy.sh&lt;br /&gt;
git add scripts/deploy.sh&lt;br /&gt;
git commit -m &amp;quot;Mark deploy script as executable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The committed mode change will appear as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mode change 100644 =&amp;gt; 100755 scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the local file system cannot apply &amp;lt;code&amp;gt;chmod&amp;lt;/code&amp;gt; correctly, update the Git index directly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git update-index --chmod=+x scripts/deploy.sh&lt;br /&gt;
git commit -m &amp;quot;Mark deploy script as executable&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To remove executable status from the Git index:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git update-index --chmod=-x scripts/deploy.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git provides index-level support for explicitly overriding a tracked file’s executable bit.&lt;br /&gt;
&lt;br /&gt;
{{exclaim}} Notice: Setting &amp;lt;code&amp;gt;core.fileMode=false&amp;lt;/code&amp;gt; does not change the actual operating-system permissions and does not rewrite previously committed file modes. It only tells Git not to treat executable-bit differences in the working tree as modifications. Use a repository-level setting unless the same problem consistently affects all repositories on the machine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Git Submodule Pull Failed: unable to create file — File exists ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After pulling in GitHub Desktop, met the error message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fetching submodule lib&lt;br /&gt;
error: unable to create file feeds/example.php: File exists&lt;br /&gt;
Updating xxxxxxxx..xxxxxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When Git tries to update the submodule to a newer commit, it finds a local untracked file with the same name, blocking the checkout. A mid-pull failure leaves the submodule in an inconsistent state and causes a large number of unexpected unstaged changes to appear in GitHub Desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run the following command in the project root directory to force re-sync the submodule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git submodule update --init --recursive --force&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it still fails, manually remove the conflicting file and retry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm lib/feeds/example.php&lt;br /&gt;
git submodule update --init --recursive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter the submodule directory and verify the status is clean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd lib&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The expected output should be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HEAD detached from xxxxxxxx&lt;br /&gt;
nothing to commit, working tree clean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
`nothing to commit, working tree clean` confirms the submodule has been successfully synced — return to GitHub Desktop and continue as normal. `HEAD detached` is the expected state for a submodule and does not require any action.&lt;br /&gt;
&lt;br /&gt;
{{exclaim}} Notice: The large number of unstaged changes appearing in GitHub Desktop after a failed Pull will typically return to normal once the submodule is fixed. If unexpected changes still remain, run &amp;lt;code&amp;gt;git submodule foreach git checkout .&amp;lt;/code&amp;gt; to revert all modifications inside every submodule.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent Generating a new SSH key and adding it to the ssh-agent - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account Adding a new SSH key to your GitHub account - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection Testing your SSH connection - GitHub Docs]&lt;br /&gt;
* [https://linux.die.net/man/5/ssh_config ssh_config(5): OpenSSH SSH client config files - Linux man page]&lt;br /&gt;
* [https://docs.github.com/en/authentication/troubleshooting-ssh Troubleshooting SSH - GitHub Docs]&lt;br /&gt;
&lt;br /&gt;
[[Category: Git]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Guiding_principles_on_generative_artificial_intelligence_in_Mandarin&amp;diff=26403</id>
		<title>Guiding principles on generative artificial intelligence in Mandarin</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Guiding_principles_on_generative_artificial_intelligence_in_Mandarin&amp;diff=26403"/>
		<updated>2026-07-08T06:03:02Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* 使用指引 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;生成式 AI 的校園、公司或政府機關的使用指引與法規&lt;br /&gt;
&lt;br /&gt;
{{Template:Generative AI Tool in Mandarin}}&lt;br /&gt;
&lt;br /&gt;
{{LanguageSwitcher | content = [[Guiding principles on generative artificial intelligence | English]], [[Guiding principles on generative artificial intelligence in Mandarin | 漢字]] }}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 使用指引 ==&lt;br /&gt;
學校&lt;br /&gt;
* Harvard University Information Technology (n.d.). [https://huit.harvard.edu/ai/guidelines Generative Artificial Intelligence (AI) Guidelines]&lt;br /&gt;
* 臺灣師範大學 (n.d.). [https://ctld.ntnu.edu.tw/generative_ai 國立臺灣師範大學 – 生成式 AI 之學習應用及參考指引 – 國立臺灣師範大學教學發展中心] ([https://web.archive.org/web/20251206170602/https://ctld.ntnu.edu.tw/generative_ai 網頁備份])&lt;br /&gt;
* 臺灣大學 (n.d.). [https://www.dlc.ntu.edu.tw/ai-tools/ 臺大針對生成式 AI 工具之教學因應措施] by 教務處教學發展中心 x 數位學習中心 ([https://web.archive.org/web/20260117130949/https://www.dlc.ntu.edu.tw/ai-tools/ 網頁備份])&lt;br /&gt;
* 臺灣大學 (2023). [http://tul.blog.ntu.edu.tw/archives/32789 如何引用ChatGPT生成內容？ – 國立臺灣大學圖書館參考服務部落格]&lt;br /&gt;
* 清華大學 (2023). [https://curricul.site.nthu.edu.tw/p/404-1208-248357.php?Lang=zh-tw 生成式人工智慧倫理聲明]&lt;br /&gt;
* 臺北科大 (2023). [https://oaa.ntut.edu.tw/p/406-1008-129455,r11.php?Lang=zh-tw 因應生成式 AI 工具之教學參考指引]&lt;br /&gt;
* 政大圖書館 (n.d.). [https://sites.google.com/view/ncculibgenai/basics?authuser=0 政大圖書館生成式AI使用指引]&lt;br /&gt;
&lt;br /&gt;
企業&lt;br /&gt;
* 資策會 (2023). [https://www.iii.org.tw/Publish/DownloadPages_download.aspx?dp_sqno=26 2023企業應具備的AI素養-生成式AI導入指引]&lt;br /&gt;
* 資策會軟體院 (2024). [https://www.iii.org.tw/Publish/DownloadPages_download.aspx?dp_sqno=35 生成式AI企業大腦開發指引]&lt;br /&gt;
* [https://www.itri.org.tw/ListStyle.aspx?DisplayStyle=18_content&amp;amp;SiteID=1&amp;amp;MmmID=1036452026061075714&amp;amp;MGID=1220020611016273662 生成式AI的機會與挑戰-工業技術與資訊月刊-出版品-新聞中心-工業技術研究院] 提到「生成式人工智慧（GAI）使用指引的部分內容&lt;br /&gt;
&lt;br /&gt;
非營利組織 (NGO, NPO)&lt;br /&gt;
* [https://netivism.com.tw/guideline 網絡行動科技 AI 使用指引 | 網絡行動科技]&lt;br /&gt;
&lt;br /&gt;
政府機關、政府機構&lt;br /&gt;
* 行政院 (2023). [https://www.nstc.gov.tw/folksonomy/list/c79bf57b-dc94-4aff-8d14-3262b5559cfc?l=ch 行政院及所屬機關（構）使用生成式AI參考指引-國家科學及技術委員會]&amp;lt;ref&amp;gt;[https://www.technice.com.tw/issues/ai/67585/ 政院通過生成式AI參考指引　10大重點依趨勢滾動修正]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 數位發展部 (2025). [https://moda.gov.tw/digital-affairs/digital-service/guide/15002 公部門人工智慧應用參考手冊（草案）｜數位政府相關參考文件 - 數位政府 - 核心業務｜moda — 數位發展部 Ministry of Digital Affairs]&lt;br /&gt;
* 數位發展部 (2026). [https://moda.gov.tw/major-policies/ai/governance/19244 AI 風險分類框架]「依據《人工智慧基本法》規定，推動與國際接軌之「人工智慧風險分類框架」。本框架旨在作為政府跨部會溝通的共同語言，提供一套共通的評估標準。 ...」&lt;br /&gt;
* 文化部 (2025). [https://www.moc.gov.tw/News.aspx?n=9149&amp;amp;sms=16053 文化藝術應用生成式AI指引]&lt;br /&gt;
&lt;br /&gt;
媒體&lt;br /&gt;
* 上下游 News&amp;amp;Market (2024). [https://www.newsmarket.com.tw/mazu-oyster/ch08/ 《上下游》生成式人工智慧（AI）使用指引 | 上下游]&lt;br /&gt;
&lt;br /&gt;
== 相關文章 ==&lt;br /&gt;
* [https://learn.microsoft.com/zh-tw/azure/machine-learning/concept-responsible-ai?view=azureml-api-2 什麼是負責任 AI - Azure Machine Learning | Microsoft Learn]&lt;br /&gt;
* [https://www.microsoft.com/en-us/corporate-responsibility/responsible-ai-transparency-report Microsoft Responsible AI Transparency Report | Microsoft CSR]&lt;br /&gt;
* [https://learn.microsoft.com/en-us/legal/cognitive-services/openai/transparency-note?tabs=text Transparency Note for Azure OpenAI - Azure AI services | Microsoft Learn]&lt;br /&gt;
* [https://ai.google/responsibility/responsible-ai-practices/ Google Responsible AI Practices – Google AI]&lt;br /&gt;
* [[Data privacy in Large Language Models in Mandarin | 大型語言模型的資料隱私政策]]&lt;br /&gt;
&lt;br /&gt;
== 相關關鍵字 ==&lt;br /&gt;
* 可信任 AI 原則&lt;br /&gt;
* 可信賴的 AI&lt;br /&gt;
&lt;br /&gt;
== 相關認證 ==&lt;br /&gt;
* [https://www.ipas.org.tw/AIAP :::經濟部產業人才能力鑑定推動網:::] 工研院推的「專業工程師考試 AI應用規劃師」&lt;br /&gt;
* [https://www.iii.org.tw/zh-TW/news/newsroom/iii-news/eff273d9-5fe8-4239-a5f4-63c828ddc1a7 資策會教研所推出免費「生成式AI能力認證」 助力臺灣培育AI新生代｜本會新聞｜新聞中心｜最新消息｜資策會]&lt;br /&gt;
* [https://aiacademy.tw/genai2025-courses/ 台灣人工智慧學校 2025 生成式 AI 實體課程 比較表 - 台灣人工智慧學校]&lt;br /&gt;
&lt;br /&gt;
== 相關法規 ==&lt;br /&gt;
* 台灣行政院新聞傳播處 (2025-08-28). [https://www.ey.gov.tw/Page/9277F759E41CCD91/5d673d1e-f418-47dc-ab35-a06600f77f07 政院通過「人工智慧基本法」草案 建構AI發展與應用良善環境 打造臺灣成為AI人工智慧島 (行政院全球資訊網-本院一般新聞)]&lt;br /&gt;
* [https://artificialintelligenceact.eu/ EU Artificial Intelligence Act | Up-to-date developments and analyses of the EU AI Act]&lt;br /&gt;
* 中國 [https://en.wikipedia.org/wiki/Interim_Measures_for_the_Management_of_Generative_AI_Services Interim Measures for the Management of Generative AI Services - Wikipedia] ([https://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm 生成式人工智慧服務管理暫行辦法_中央網路安全和資訊化委員會辦公室])&lt;br /&gt;
&lt;br /&gt;
== 參考資料 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Artificial intelligence]]&lt;br /&gt;
[[Category:Generative AI]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26402</id>
		<title>Troubleshooting of GIT</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Troubleshooting_of_GIT&amp;diff=26402"/>
		<updated>2026-07-08T04:21:36Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* SSH Authentication Failed: Permission denied (publickey) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Troubleshooting of GIT ==&lt;br /&gt;
&lt;br /&gt;
=== Restoring deleted files in Git ===&lt;br /&gt;
[[Restoring deleted files in Git]]&lt;br /&gt;
&lt;br /&gt;
=== SSH Authentication Failed: Permission denied (publickey) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After running the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
you may see the following error:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cloning into &#039;/opt/your-app&#039;...&lt;br /&gt;
git@github.com: Permission denied (publickey).&lt;br /&gt;
fatal: Could not read from remote repository.&lt;br /&gt;
&lt;br /&gt;
Please make sure you have the correct access rights and the repository exists.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A similar error may also occur when running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This error occurs when Git cannot authenticate with GitHub over SSH.&lt;br /&gt;
&lt;br /&gt;
Common causes include:&lt;br /&gt;
&lt;br /&gt;
* The SSH key does not exist on the server.&lt;br /&gt;
* The SSH key has not been added to GitHub.&lt;br /&gt;
* The SSH key is added to the wrong GitHub account or the wrong repository.&lt;br /&gt;
* The repository is private and the key does not have access.&lt;br /&gt;
* The server has multiple SSH keys, but Git is using the wrong one.&lt;br /&gt;
* The key is a GitHub Deploy Key that belongs to another repository.&lt;br /&gt;
* `sudo git clone` or `sudo git pull` is being used, causing Git to use the `root` user&#039;s SSH key instead of the deploy user&#039;s SSH key.&lt;br /&gt;
&lt;br /&gt;
For example, if you run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current SSH key is valid, but it is linked to another repository&#039;s Deploy Key. In that case, GitHub may return:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERROR: Repository not found.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
even if the target repository URL is correct.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended Solution — Use a dedicated SSH alias for the project&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the safest approach when the server has multiple GitHub Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
Assume:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Deploy user: your-user&lt;br /&gt;
App path: /opt/your-app&lt;br /&gt;
Private key: /home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
Public key: /home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
Repository: git@github.com:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1 — Check the key exists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -l ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app&lt;br /&gt;
/home/your-user/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the key does not exist, create one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh-keygen -t ed25519 -C &amp;quot;your-app-deploy-key&amp;quot; -f ~/.ssh/id_ed25519_your_app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2 — Add the public key to GitHub&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Print the public key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add it to the target repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub Repository&lt;br /&gt;
→ Settings&lt;br /&gt;
→ Deploy keys&lt;br /&gt;
→ Add deploy key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the server only needs to clone or pull the repository, do not enable write access.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3 — Configure SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Edit the SSH config file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Host github-your-app&lt;br /&gt;
  HostName github.com&lt;br /&gt;
  User git&lt;br /&gt;
  IdentityFile ~/.ssh/id_ed25519_your_app&lt;br /&gt;
  IdentitiesOnly yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fix SSH file permissions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod 700 ~/.ssh&lt;br /&gt;
chmod 600 ~/.ssh/config ~/.ssh/id_ed25519_your_app&lt;br /&gt;
chmod 644 ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh&amp;lt;/code&amp;gt; should be accessible only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/config/&amp;lt;/code&amp;gt; should be readable/writable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app&amp;lt;/code&amp;gt; private key should be readable only by the current user &lt;br /&gt;
# &amp;lt;code&amp;gt;~/.ssh/id_ed25519_your_app.pub&amp;lt;/code&amp;gt; public key can be readable by others&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4 — Test the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is expected. It means SSH authentication works, but GitHub does not allow interactive shell login.&lt;br /&gt;
&lt;br /&gt;
If the result shows another repository, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi other-org/other-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the alias is not using the intended key, or the key was added to the wrong repository.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 5 — Clone using the SSH alias&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Instead of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If `/opt/your-app` requires root permission to create, prefer creating the directory first and assigning ownership to the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo mkdir -p /opt/your-app&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This avoids using `sudo git clone`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 6 — If the repository already exists, update the remote URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Check the current remote:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it uses the default GitHub host:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github.com:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
change it to use the SSH alias:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git remote -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (fetch)&lt;br /&gt;
origin  git@github-your-app:your-org/your-repo.git (push)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Avoid using sudo with Git&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Avoid:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
sudo git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because `sudo` runs Git as `root`, Git may use root&#039;s SSH keys instead of the deploy user&#039;s SSH keys.&lt;br /&gt;
&lt;br /&gt;
If the app directory is owned by `root`, fix ownership instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run Git commands as the deploy user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Issue: dubious ownership&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If Git shows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fatal: detected dubious ownership in repository at &#039;/opt/your-app&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means the current user and the repository owner do not match.&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls -ld /opt/your-app&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the app should be maintained by the deploy user, fix ownership:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo chown -R your-user:your-user /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternatively, mark the directory as safe:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git config --global --add safe.directory /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For deployment directories, fixing ownership is usually cleaner if the deploy user is expected to run `git pull`.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternative Solution — Pass the SSH key inline&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can also override the SSH command directly.&lt;br /&gt;
&lt;br /&gt;
First, test the key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -T -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes git@github.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi your-org/your-repo! You&#039;ve successfully authenticated, but GitHub does not provide shell access.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then clone:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need to run this with `sudo`, preserve the environment explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo GIT_SSH_COMMAND=&#039;ssh -i /path/to/.ssh/your_key_name -o IdentitiesOnly=yes&#039; \&lt;br /&gt;
  git clone git@github.com:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, this is usually less clean than using an SSH alias, especially for long-term maintenance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-o IdentitiesOnly=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
forces SSH to use only the specified key and prevents SSH from trying other keys loaded in the agent. This is important on servers with multiple Deploy Keys.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Recommended long-term setup:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 1. Create or confirm a dedicated deploy key&lt;br /&gt;
ls ~/.ssh/id_ed25519_your_app*&lt;br /&gt;
&lt;br /&gt;
# 2. Add the public key to the target GitHub repository Deploy Keys&lt;br /&gt;
cat ~/.ssh/id_ed25519_your_app.pub&lt;br /&gt;
&lt;br /&gt;
# 3. Configure SSH alias&lt;br /&gt;
nano ~/.ssh/config&lt;br /&gt;
&lt;br /&gt;
# 4. Test alias&lt;br /&gt;
ssh -T github-your-app&lt;br /&gt;
&lt;br /&gt;
# 5. Clone or update remote using alias&lt;br /&gt;
git clone git@github-your-app:your-org/your-repo.git /opt/your-app&lt;br /&gt;
&lt;br /&gt;
# or, for an existing repo&lt;br /&gt;
cd /opt/your-app&lt;br /&gt;
git remote set-url origin git@github-your-app:your-org/your-repo.git&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The key lesson is: when multiple Deploy Keys exist on the same server, avoid relying on `git@github.com`. Use a project-specific SSH alias such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git@github-your-app:your-org/your-repo.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so Git always uses the correct SSH key.&lt;br /&gt;
&lt;br /&gt;
=== Git Submodule Pull Failed: unable to create file — File exists ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Error Message&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After pulling in GitHub Desktop, met the error message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Fetching submodule lib&lt;br /&gt;
error: unable to create file feeds/example.php: File exists&lt;br /&gt;
Updating xxxxxxxx..xxxxxxxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cause&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When Git tries to update the submodule to a newer commit, it finds a local untracked file with the same name, blocking the checkout. A mid-pull failure leaves the submodule in an inconsistent state and causes a large number of unexpected unstaged changes to appear in GitHub Desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Run the following command in the project root directory to force re-sync the submodule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git submodule update --init --recursive --force&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it still fails, manually remove the conflicting file and retry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm lib/feeds/example.php&lt;br /&gt;
git submodule update --init --recursive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter the submodule directory and verify the status is clean:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd lib&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The expected output should be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HEAD detached from xxxxxxxx&lt;br /&gt;
nothing to commit, working tree clean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
`nothing to commit, working tree clean` confirms the submodule has been successfully synced — return to GitHub Desktop and continue as normal. `HEAD detached` is the expected state for a submodule and does not require any action.&lt;br /&gt;
&lt;br /&gt;
{{exclaim}} Notice: The large number of unstaged changes appearing in GitHub Desktop after a failed Pull will typically return to normal once the submodule is fixed. If unexpected changes still remain, run &amp;lt;code&amp;gt;git submodule foreach git checkout .&amp;lt;/code&amp;gt; to revert all modifications inside every submodule.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent Generating a new SSH key and adding it to the ssh-agent - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account Adding a new SSH key to your GitHub account - GitHub Docs]&lt;br /&gt;
* [https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection Testing your SSH connection - GitHub Docs]&lt;br /&gt;
* [https://linux.die.net/man/5/ssh_config ssh_config(5): OpenSSH SSH client config files - Linux man page]&lt;br /&gt;
* [https://docs.github.com/en/authentication/troubleshooting-ssh Troubleshooting SSH - GitHub Docs]&lt;br /&gt;
&lt;br /&gt;
[[Category: Git]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Finding_Files_That_Take_Up_Space_on_Ubuntu&amp;diff=26401</id>
		<title>Finding Files That Take Up Space on Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Finding_Files_That_Take_Up_Space_on_Ubuntu&amp;diff=26401"/>
		<updated>2026-07-02T06:17:17Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: Created page with &amp;quot;Finding Files That Take Up Space on Ubuntu  == Graphical User Interface (GUI) == # [https://snapcraft.io/filelight filelight]: Lets you choose which folder to scan {{Gd}} # baobab: Scans the entire computer directly; if there are too many files, it can take a long time.  == Command-Line Interface (CLI) == # `df -h` quickly shows the usage status of different partitions  == References == * [https://snapcraft.io/blog/how-to-keep-your-linux-disk-usage-nice-and-tidy-and-save...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Finding Files That Take Up Space on Ubuntu&lt;br /&gt;
&lt;br /&gt;
== Graphical User Interface (GUI) ==&lt;br /&gt;
# [https://snapcraft.io/filelight filelight]: Lets you choose which folder to scan {{Gd}}&lt;br /&gt;
# baobab: Scans the entire computer directly; if there are too many files, it can take a long time.&lt;br /&gt;
&lt;br /&gt;
== Command-Line Interface (CLI) ==&lt;br /&gt;
# `df -h` quickly shows the usage status of different partitions&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [https://snapcraft.io/blog/how-to-keep-your-linux-disk-usage-nice-and-tidy-and-save-space How to keep your Linux disk usage nice and tidy and save space | Snapcraft]&lt;br /&gt;
* [https://discourse.ubuntu.com/t/trying-to-understand-disk-usage/74126 Trying to understand disk usage - Support and Help - Ubuntu Community Hub]&lt;br /&gt;
&lt;br /&gt;
[[Category: Tool]]&lt;br /&gt;
[[Category: Ubuntu]]&lt;br /&gt;
[[Category: Linux]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Open_data_file_format&amp;diff=26400</id>
		<title>Open data file format</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Open_data_file_format&amp;diff=26400"/>
		<updated>2026-07-02T03:38:22Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: Redirected page to Comparison of common data file formats in Mandarin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Comparison of common data file formats in Mandarin]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Comparison_of_common_data_file_formats_in_Mandarin&amp;diff=26399</id>
		<title>Comparison of common data file formats in Mandarin</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Comparison_of_common_data_file_formats_in_Mandarin&amp;diff=26399"/>
		<updated>2026-07-02T03:37:58Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;拿到資料檔案該怎麼開？各格式限制與注意事項&lt;br /&gt;
&lt;br /&gt;
{{LanguageSwitcher | content = [[Comparison of common data file formats | EN]], [[Comparison of common data file formats in Mandarin | 漢字]] }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 常見格式快速比較表 ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;格式&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;階層性&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;人類易讀&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;筆數/容量限制&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;常見問題&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;CSV&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（表格式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;高&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;格式本身無上限，取決於開啟軟體（Excel 約 104 萬列）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;中文亂碼、換行符號欄位值易錯位、數字型別被強制轉換（如電話號碼開頭 0 消失）&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;TSV&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（表格式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;高&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;同 CSV，格式本身無上限&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;與 CSV 相同，但可避免欄位值含逗號時的分隔誤判&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;Excel&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（表格式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;高&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;理論上限 1,048,576 列 × 16,384 欄；單一儲存格文字上限 32,767 字；超過 10 萬筆操作易頓&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;長數字被轉成科學記號、特定字串誤判為日期&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;JSON&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;有&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;中&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;格式本身無筆數上限，瓶頸為讀取時須整檔載入記憶體&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;大檔案（如 250MB+）易記憶體不足；建議改用 JSONL 串流讀取&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;SQLite&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（關聯式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;低（需工具開啟）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;理論上限 2⁶⁴ 筆，實際受資料庫檔案 281 TB 上限限制（約 2×10¹³ 筆）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;需透過資料庫工具讀寫，不利直接檢視&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;Parquet&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（欄式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;低（需工具開啟）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;格式本身無理論筆數上限（以 Row Group 為單位，預設每組 100 萬筆，可有任意組數）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;實務瓶頸為硬碟空間，非格式限制；已有成功案例寫入 5～10 億筆&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;SQL 檔&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;中&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;純文字格式本身無上限，限制來自匯入工具&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;檔案過大時文字編輯器易當機；不同資料庫引擎語法相容性問題&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;建議：&#039;&#039;&#039;&lt;br /&gt;
# 需要巢狀/自由格式欄位 → JSON（大量資料改 JSONL）&lt;br /&gt;
# 資料量超過百萬筆、只需搬移資料 → Parquet 或 CSV&lt;br /&gt;
# 需要還原完整資料庫結構（含關聯、索引） → SQL 或 SQLite&lt;br /&gt;
# 一般使用試算表軟體開啟操作 → CSV / Excel，如果要使用 CSV / Excel 顯示階層結構，在欄位名稱可透過分隔符號呈現，例如 {{kbd | key=&amp;lt;nowiki&amp;gt;aaa / bbb&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== 常見資料格式與限制 ==&lt;br /&gt;
=== 1. CSV 檔案 ===&lt;br /&gt;
CSV 檔案：不同欄位值用逗號間隔。&lt;br /&gt;
CSV 格式本身沒有筆數上限，限制來自開啟它的軟體。&amp;lt;ref&amp;gt;Row Zero — CSV Row Limits by Spreadsheet: https://rowzero.com/blog/csv-row-limit&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常見問題是&lt;br /&gt;
大部分人會使用 Microsoft Excel 開啟 CSV， (1) 中文亂碼：點選兩下發現中文亂碼，檔首需要額外加上 BOM 符號，或者改用匯入檔案方式，才不會遇到亂碼、(2) 如果欄位值包含換行符號的話，Excel 容易會出錯，導致明明是同一筆資料，卻出現在下一筆而出現欄位錯置的錯誤。(3) 資料類型強迫轉換：常見的問題是手機號碼的第一位號碼 0 被吃掉，因為被強制轉換成整數。&lt;br /&gt;
&lt;br /&gt;
如果你拿到是包含換行符號欄位值的 CSV 檔案，則不建議使用 Excel，而是改用 LibreOffice Calc。&lt;br /&gt;
&lt;br /&gt;
=== 2. TSV 檔案 ===&lt;br /&gt;
TSV 檔案：不同欄位值用定位鍵 (TAB) 間隔。如果欄位值包含逗號，可以改用 TSV 檔案。&lt;br /&gt;
TSV 與 CSV 同屬純文字格式，筆數上限同樣取決於開啟的軟體，格式本身無限制。&lt;br /&gt;
&lt;br /&gt;
=== 3. Excel 檔案===&lt;br /&gt;
Excel 檔案：常見的檔案類型，但是儲存格文字長度與欄位數量都有上限：單一儲存格內的文字不能超過 32,767 字，而欄位數上限是 16,384 欄 &amp;lt;ref&amp;gt;Microsoft Support — Excel specifications and limits: https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3&amp;lt;/ref&amp;gt;。其次雖然資料筆數理論上限是 1,048,576 筆（= 2²⁰），但如果筆數超過 10 萬筆，電腦操作 Excel 就會頓頓的，反而不方便分析。如果是舊版 Excel（2003 以前）允許的筆數更少，僅 65,536 筆（= 2¹⁶）× 256 欄。&amp;lt;ref&amp;gt;[Did You Know] Microsoft Excel has a Limit of Maximum 1,048,576 Rows and 16,384 Columns – AskVG https://www.askvg.com/did-you-know-microsoft-excel-has-a-limit-of-maximum-1048576-rows-and-16384-columns/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://superuser.com/questions/366468/what-is-the-maximum-allowed-rows-in-a-microsoft-excel-xls-or-xlsx What is the maximum allowed rows in a Microsoft Excel .xls or .xlsx - Super User]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常見問題是&lt;br /&gt;
Excel 雖然方便但經常會把長數字（例如：訂單編號）自動轉成科學記號顯示&amp;lt;ref&amp;gt;[https://errerrors.blogspot.com/2023/04/how-to-fix-rounding-after-15-digits-on-excel.html 解決 Excel 長數字的最後一位歸零或出現科學記號的問題]&amp;lt;/ref&amp;gt;，或把特定字串（如 1-2、MAR3）誤判為日期&amp;lt;ref&amp;gt;[https://www.techbang.com/posts/110723-excel-human-genome Excel功能出包，迫使科學家必須重新命名人類基因！現在這個Bug被修復了 | T客邦]&amp;lt;/ref&amp;gt;，造成資料遺失或資料錯誤。&lt;br /&gt;
&lt;br /&gt;
=== 4. JSON 檔案 ===&lt;br /&gt;
JSON 檔案：適合複雜格式或者說自由風格的欄位定義。曾經拿到包含多筆資料，約 250 MB 檔案大小的 JSON 檔案。因為發生檔案讀取錯誤，需要額外切割檔案內容。&lt;br /&gt;
JSON 格式本身沒有筆數上限，瓶頸是讀取時必須將整個檔案載入記憶體，因此檔案愈大愈容易發生記憶體不足的錯誤。&amp;lt;ref&amp;gt;Quora — What is the practical limit on the size of a JSON message?: https://www.quora.com/What-is-the-practical-limit-on-the-size-of-a-JSON-message-for-an-internet-application&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
實務上建議不要將多筆資料寫在 JSON，而改成 JSONL，也就是 JSON 加上換行符號區別多筆資料。適合使用程式用串流方式逐行讀取，而不致於發生記憶體錯誤。&lt;br /&gt;
&lt;br /&gt;
=== 5. SQLite 或 Parquet 檔案 ===&lt;br /&gt;
SQLite 或 Parquet 檔案：當資料量超過 Excel 筆數上限，可以考慮使用這兩種格式。&lt;br /&gt;
&lt;br /&gt;
SQLite 每張資料表的理論筆數上限是 2⁶⁴ 筆（約 1.8 × 10¹⁹），但這個數字實際上不可能達到，因為資料庫檔案大小上限 281 TB 會先被遇到。在最大資料庫容量下，可儲存的筆數約為 2 × 10¹³ 筆（前提是沒有索引且每筆資料極小）。&amp;lt;ref&amp;gt;SQLite 官方文件 — Implementation Limits For SQLite: https://sqlite.org/limits.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parquet 沒有硬性的筆數上限。格式本身以 Row Group 為單位儲存資料。Row Group 是 Parquet 檔案內部的水平分割單位，每個 Row Group 包含一段連續的資料列，以欄位為單位分開存放——例如一個有 100 萬筆、10 個欄位的資料集，在一個 Row Group 裡會被切成 10 段欄位資料分別儲存，而非逐列存放。這樣的設計讓查詢時只需讀取需要的欄位，不必掃描整列，大幅提升讀取效率。每個 Row Group 預設上限為 100 萬筆，但一個檔案可以包含任意數量的 Row Group，因此整個檔案的筆數沒有理論上限 &amp;lt;ref&amp;gt;Apache arrow-rs GitHub issue #5797 — &amp;quot;Row groups are limited to 1M rows by default&amp;quot;: https://github.com/apache/arrow-rs/issues/5797&amp;lt;/ref&amp;gt;。實務上已有人成功寫入 5 億~ 10 億筆資料&amp;lt;ref&amp;gt;Andy Cutler — 10 Billion Rows: Parquet File Size and Distribution When using CETAS: https://www.serverlesssql.com/row-size-and-parquet-file-distribution/&amp;lt;/ref&amp;gt;，瓶頸通常是硬碟空間，而非格式本身。&lt;br /&gt;
&lt;br /&gt;
=== 6. SQL 檔案 ===&lt;br /&gt;
SQL 檔案：關聯式資料庫的匯出格式，內容為多列的 SQL 語法（如 {{kbd | key=&amp;lt;nowiki&amp;gt;INSERT INTO ...&amp;lt;/nowiki&amp;gt;}}），可直接匯入至資料庫。&lt;br /&gt;
&lt;br /&gt;
SQL 檔案本身沒有筆數上限，格式本身只是純文字，限制同樣來自開啟或匯入它的工具。&lt;br /&gt;
&lt;br /&gt;
常見問題是 &lt;br /&gt;
* (1) 檔案過大：大量資料匯出後動輒數 GB，用文字編輯器開啟會導致當機或無回應。&lt;br /&gt;
* (2) 跨資料庫相容性：不同資料庫引擎（如 MySQL、PostgreSQL、SQLite）的 SQL 語法有差異，從 A 引擎匯出的 .sql 檔案，未必能直接匯入另一個引擎。可參考 [[排除_MySQL_技術疑難問題#從_MySQL_資料轉移至_MSSQL | 從_MySQL_資料轉移至_MSSQL]]&lt;br /&gt;
&lt;br /&gt;
如果只需要搬移資料而非還原完整資料庫結構，建議改用 CSV 或 Parquet，避免上述相容性問題。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 延伸閱讀 ==&lt;br /&gt;
* [http://opendatahandbook.org/guide/zh_TW/appendices/file-formats/ 檔案格式]&lt;br /&gt;
* [https://blog.othree.net/log/2016/01/11/json-universe/ JSON Universe : O3noBLOG]&lt;br /&gt;
* [[Open_Source_Community#.E9.96.8B.E6.94.BE.E8.B3.87.E6.96.99_.2F_.E5.B7.A8.E9.87.8F.E8.B3.87.E6.96.99|開放資料 相關社群]]&lt;br /&gt;
* [https://www.loc.gov/preservation/resources/rfs/TOC.html Recommended Formats Statement – table of contents | Resources (Preservation, Library of Congress)]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Data factory flow}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Software]]&lt;br /&gt;
[[Category: Spreadsheet]] &lt;br /&gt;
[[Category: MySQL]]&lt;br /&gt;
[[Category: Data Science]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Comparison_of_common_data_file_formats_in_Mandarin&amp;diff=26398</id>
		<title>Comparison of common data file formats in Mandarin</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Comparison_of_common_data_file_formats_in_Mandarin&amp;diff=26398"/>
		<updated>2026-07-02T03:37:33Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* 常見格式快速比較表 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;拿到資料檔案該怎麼開？各格式限制與注意事項&lt;br /&gt;
&lt;br /&gt;
{{LanguageSwitcher | content = [[Comparison of common data file formats | EN]], [[Comparison of common data file formats in Mandarin | 漢字]] }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 常見格式快速比較表 ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;格式&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;階層性&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;人類易讀&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;筆數/容量限制&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;常見問題&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;CSV&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（表格式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;高&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;格式本身無上限，取決於開啟軟體（Excel 約 104 萬列）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;中文亂碼、換行符號欄位值易錯位、數字型別被強制轉換（如電話號碼開頭 0 消失）&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;TSV&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（表格式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;高&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;同 CSV，格式本身無上限&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;與 CSV 相同，但可避免欄位值含逗號時的分隔誤判&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;Excel&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（表格式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;高&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;理論上限 1,048,576 列 × 16,384 欄；單一儲存格文字上限 32,767 字；超過 10 萬筆操作易頓&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;長數字被轉成科學記號、特定字串誤判為日期&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;JSON&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;有&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;中&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;格式本身無筆數上限，瓶頸為讀取時須整檔載入記憶體&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;大檔案（如 250MB+）易記憶體不足；建議改用 JSONL 串流讀取&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;SQLite&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（關聯式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;低（需工具開啟）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;理論上限 2⁶⁴ 筆，實際受資料庫檔案 281 TB 上限限制（約 2×10¹³ 筆）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;需透過資料庫工具讀寫，不利直接檢視&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;Parquet&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（欄式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;低（需工具開啟）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;格式本身無理論筆數上限（以 Row Group 為單位，預設每組 100 萬筆，可有任意組數）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;實務瓶頸為硬碟空間，非格式限制；已有成功案例寫入 5～10 億筆&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;SQL 檔&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;中&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;純文字格式本身無上限，限制來自匯入工具&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;檔案過大時文字編輯器易當機；不同資料庫引擎語法相容性問題&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;建議：&#039;&#039;&#039;&lt;br /&gt;
# 需要巢狀/自由格式欄位 → JSON（大量資料改 JSONL）&lt;br /&gt;
# 資料量超過百萬筆、只需搬移資料 → Parquet 或 CSV&lt;br /&gt;
# 需要還原完整資料庫結構（含關聯、索引） → SQL 或 SQLite&lt;br /&gt;
# 一般使用試算表軟體開啟操作 → CSV / Excel，如果要使用 CSV / Excel 顯示階層結構，在欄位名稱可透過分隔符號呈現，例如 {{kbd | key=&amp;lt;nowiki&amp;gt;aaa / bbb&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== 常見資料格式與限制 ==&lt;br /&gt;
=== 1. CSV 檔案 ===&lt;br /&gt;
CSV 檔案：不同欄位值用逗號間隔。&lt;br /&gt;
CSV 格式本身沒有筆數上限，限制來自開啟它的軟體。&amp;lt;ref&amp;gt;Row Zero — CSV Row Limits by Spreadsheet: https://rowzero.com/blog/csv-row-limit&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常見問題是&lt;br /&gt;
大部分人會使用 Microsoft Excel 開啟 CSV， (1) 中文亂碼：點選兩下發現中文亂碼，檔首需要額外加上 BOM 符號，或者改用匯入檔案方式，才不會遇到亂碼、(2) 如果欄位值包含換行符號的話，Excel 容易會出錯，導致明明是同一筆資料，卻出現在下一筆而出現欄位錯置的錯誤。(3) 資料類型強迫轉換：常見的問題是手機號碼的第一位號碼 0 被吃掉，因為被強制轉換成整數。&lt;br /&gt;
&lt;br /&gt;
如果你拿到是包含換行符號欄位值的 CSV 檔案，則不建議使用 Excel，而是改用 LibreOffice Calc。&lt;br /&gt;
&lt;br /&gt;
=== 2. TSV 檔案 ===&lt;br /&gt;
TSV 檔案：不同欄位值用定位鍵 (TAB) 間隔。如果欄位值包含逗號，可以改用 TSV 檔案。&lt;br /&gt;
TSV 與 CSV 同屬純文字格式，筆數上限同樣取決於開啟的軟體，格式本身無限制。&lt;br /&gt;
&lt;br /&gt;
=== 3. Excel 檔案===&lt;br /&gt;
Excel 檔案：常見的檔案類型，但是儲存格文字長度與欄位數量都有上限：單一儲存格內的文字不能超過 32,767 字，而欄位數上限是 16,384 欄 &amp;lt;ref&amp;gt;Microsoft Support — Excel specifications and limits: https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3&amp;lt;/ref&amp;gt;。其次雖然資料筆數理論上限是 1,048,576 筆（= 2²⁰），但如果筆數超過 10 萬筆，電腦操作 Excel 就會頓頓的，反而不方便分析。如果是舊版 Excel（2003 以前）允許的筆數更少，僅 65,536 筆（= 2¹⁶）× 256 欄。&amp;lt;ref&amp;gt;[Did You Know] Microsoft Excel has a Limit of Maximum 1,048,576 Rows and 16,384 Columns – AskVG https://www.askvg.com/did-you-know-microsoft-excel-has-a-limit-of-maximum-1048576-rows-and-16384-columns/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://superuser.com/questions/366468/what-is-the-maximum-allowed-rows-in-a-microsoft-excel-xls-or-xlsx What is the maximum allowed rows in a Microsoft Excel .xls or .xlsx - Super User]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常見問題是&lt;br /&gt;
Excel 雖然方便但經常會把長數字（例如：訂單編號）自動轉成科學記號顯示&amp;lt;ref&amp;gt;[https://errerrors.blogspot.com/2023/04/how-to-fix-rounding-after-15-digits-on-excel.html 解決 Excel 長數字的最後一位歸零或出現科學記號的問題]&amp;lt;/ref&amp;gt;，或把特定字串（如 1-2、MAR3）誤判為日期&amp;lt;ref&amp;gt;[https://www.techbang.com/posts/110723-excel-human-genome Excel功能出包，迫使科學家必須重新命名人類基因！現在這個Bug被修復了 | T客邦]&amp;lt;/ref&amp;gt;，造成資料遺失或資料錯誤。&lt;br /&gt;
&lt;br /&gt;
=== 4. JSON 檔案 ===&lt;br /&gt;
JSON 檔案：適合複雜格式或者說自由風格的欄位定義。曾經拿到包含多筆資料，約 250 MB 檔案大小的 JSON 檔案。因為發生檔案讀取錯誤，需要額外切割檔案內容。&lt;br /&gt;
JSON 格式本身沒有筆數上限，瓶頸是讀取時必須將整個檔案載入記憶體，因此檔案愈大愈容易發生記憶體不足的錯誤。&amp;lt;ref&amp;gt;Quora — What is the practical limit on the size of a JSON message?: https://www.quora.com/What-is-the-practical-limit-on-the-size-of-a-JSON-message-for-an-internet-application&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
實務上建議不要將多筆資料寫在 JSON，而改成 JSONL，也就是 JSON 加上換行符號區別多筆資料。適合使用程式用串流方式逐行讀取，而不致於發生記憶體錯誤。&lt;br /&gt;
&lt;br /&gt;
=== 5. SQLite 或 Parquet 檔案 ===&lt;br /&gt;
SQLite 或 Parquet 檔案：當資料量超過 Excel 筆數上限，可以考慮使用這兩種格式。&lt;br /&gt;
&lt;br /&gt;
SQLite 每張資料表的理論筆數上限是 2⁶⁴ 筆（約 1.8 × 10¹⁹），但這個數字實際上不可能達到，因為資料庫檔案大小上限 281 TB 會先被遇到。在最大資料庫容量下，可儲存的筆數約為 2 × 10¹³ 筆（前提是沒有索引且每筆資料極小）。&amp;lt;ref&amp;gt;SQLite 官方文件 — Implementation Limits For SQLite: https://sqlite.org/limits.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parquet 沒有硬性的筆數上限。格式本身以 Row Group 為單位儲存資料。Row Group 是 Parquet 檔案內部的水平分割單位，每個 Row Group 包含一段連續的資料列，以欄位為單位分開存放——例如一個有 100 萬筆、10 個欄位的資料集，在一個 Row Group 裡會被切成 10 段欄位資料分別儲存，而非逐列存放。這樣的設計讓查詢時只需讀取需要的欄位，不必掃描整列，大幅提升讀取效率。每個 Row Group 預設上限為 100 萬筆，但一個檔案可以包含任意數量的 Row Group，因此整個檔案的筆數沒有理論上限 &amp;lt;ref&amp;gt;Apache arrow-rs GitHub issue #5797 — &amp;quot;Row groups are limited to 1M rows by default&amp;quot;: https://github.com/apache/arrow-rs/issues/5797&amp;lt;/ref&amp;gt;。實務上已有人成功寫入 5 億~ 10 億筆資料&amp;lt;ref&amp;gt;Andy Cutler — 10 Billion Rows: Parquet File Size and Distribution When using CETAS: https://www.serverlesssql.com/row-size-and-parquet-file-distribution/&amp;lt;/ref&amp;gt;，瓶頸通常是硬碟空間，而非格式本身。&lt;br /&gt;
&lt;br /&gt;
=== 6. SQL 檔案 ===&lt;br /&gt;
SQL 檔案：關聯式資料庫的匯出格式，內容為多列的 SQL 語法（如 {{kbd | key=&amp;lt;nowiki&amp;gt;INSERT INTO ...&amp;lt;/nowiki&amp;gt;}}），可直接匯入至資料庫。&lt;br /&gt;
&lt;br /&gt;
SQL 檔案本身沒有筆數上限，格式本身只是純文字，限制同樣來自開啟或匯入它的工具。&lt;br /&gt;
&lt;br /&gt;
常見問題是 &lt;br /&gt;
* (1) 檔案過大：大量資料匯出後動輒數 GB，用文字編輯器開啟會導致當機或無回應。&lt;br /&gt;
* (2) 跨資料庫相容性：不同資料庫引擎（如 MySQL、PostgreSQL、SQLite）的 SQL 語法有差異，從 A 引擎匯出的 .sql 檔案，未必能直接匯入另一個引擎。可參考 [[排除_MySQL_技術疑難問題#從_MySQL_資料轉移至_MSSQL | 從_MySQL_資料轉移至_MSSQL]]&lt;br /&gt;
&lt;br /&gt;
如果只需要搬移資料而非還原完整資料庫結構，建議改用 CSV 或 Parquet，避免上述相容性問題。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Data factory flow}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Software]]&lt;br /&gt;
[[Category: Spreadsheet]] &lt;br /&gt;
[[Category: MySQL]]&lt;br /&gt;
[[Category: Data Science]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Comparison_of_common_data_file_formats&amp;diff=26397</id>
		<title>Comparison of common data file formats</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Comparison_of_common_data_file_formats&amp;diff=26397"/>
		<updated>2026-07-02T03:35:40Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Common Data Formats and Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to Open Data Files: Common Formats, Limitations, and Notes&lt;br /&gt;
&lt;br /&gt;
{{LanguageSwitcher | content = [[Comparison of common data file formats | EN]], [[Comparison of common data file formats in Mandarin | 漢字]] }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Quick Comparison Table of Common Formats ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Format&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Hierarchical&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Human-Readable&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Row Count / Size Limit&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Common Issues&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;CSV&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;No (tabular)&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;High&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;No inherent limit in the format itself; depends on the software used to open it (Excel: ~1.04 million rows)&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Garbled text in non-English characters; newline characters within field values can cause row misalignment; data type coercion (e.g., leading zero in phone numbers gets dropped)&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;TSV&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;No (tabular)&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;High&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Same as CSV; no inherent limit in the format itself&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Same issues as CSV, but avoids delimiter misinterpretation when field values contain commas&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;Excel&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;No (tabular)&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;High&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Theoretical limit of 1,048,576 rows × 16,384 columns; 32,767 character limit per cell; performance lags once row count exceeds ~100,000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Long numbers get converted to scientific notation; certain strings get misinterpreted as dates&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;JSON&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Yes&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Medium&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;No inherent row limit in the format itself; the bottleneck is that the entire file must be loaded into memory when read&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Large files (250MB+) are prone to out-of-memory errors; JSONL is recommended for streaming/line-by-line reading instead&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;SQLite&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;No (relational)&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Low (requires a tool to open)&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Theoretical limit of 2⁶⁴ rows, but in practice constrained by the 281 TB database file size limit (roughly 2×10¹³ rows)&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Requires a database tool for reading/writing; not convenient for direct viewing&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;Parquet&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;No (columnar)&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Low (requires a tool to open)&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;No theoretical row limit in the format itself (organized by Row Groups, default limit of 1 million rows per group, but a file can contain any number of Row Groups)&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;The practical bottleneck is disk space rather than the format itself; there are documented cases of successfully writing 500 million to 1 billion rows&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;SQL file&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;No&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Medium&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;No inherent limit as plain text; the limit comes from the tool used to import it&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;Text editors can crash or become unresponsive when the file is too large; SQL syntax compatibility issues across different database engines&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommendations:&#039;&#039;&#039;&lt;br /&gt;
# Need nested/free-form fields → JSON (use JSONL for large datasets)&lt;br /&gt;
# Data exceeds a million rows and you only need to move the data → Parquet or CSV&lt;br /&gt;
# Need to restore the full database structure (including relations and indexes) → SQL or SQLite&lt;br /&gt;
# General use with spreadsheet software → CSV / Excel&lt;br /&gt;
&lt;br /&gt;
== Common Data Formats and Limitations ==&lt;br /&gt;
&lt;br /&gt;
=== CSV Files ===&lt;br /&gt;
CSV files: different field values are separated by commas.&lt;br /&gt;
The CSV format itself has no row limit — the limit comes from the software used to open it.&amp;lt;ref&amp;gt;Row Zero — CSV Row Limits by Spreadsheet: https://rowzero.com/blog/csv-row-limit&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common issues arise because most people open CSV files with Microsoft Excel: (1) &#039;&#039;&#039;Garbled Chinese characters&#039;&#039;&#039;: double-clicking may result in garbled text; a BOM character needs to be prepended to the file, or the file must be imported rather than opened directly. (2) &#039;&#039;&#039;Newline characters in field values&#039;&#039;&#039;: if a field value contains a newline, Excel tends to misinterpret it, causing data from the same record to appear on the next row and resulting in column misalignment. (3) &#039;&#039;&#039;Forced type conversion&#039;&#039;&#039;: a common issue is that the leading zero of a phone number is dropped because the value is coerced into an integer.&lt;br /&gt;
&lt;br /&gt;
If you receive a CSV file containing newline characters in field values, it is not recommended to use Excel; use LibreOffice Calc instead.&lt;br /&gt;
&lt;br /&gt;
=== TSV Files ===&lt;br /&gt;
TSV files: different field values are separated by tab characters. If field values contain commas, TSV can be used as an alternative.&lt;br /&gt;
TSV and CSV are both plain-text formats; the row limit likewise depends on the software used to open them, not the format itself.&lt;br /&gt;
&lt;br /&gt;
=== Excel Files ===&lt;br /&gt;
Excel files: a widely used file format, but with limits on cell text length and column count: a single cell cannot contain more than 32,767 characters, and the maximum number of columns is 16,384.&amp;lt;ref&amp;gt;Microsoft Support — Excel specifications and limits: https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3&amp;lt;/ref&amp;gt; Although the theoretical row limit is 1,048,576 rows (= 2²⁰), performance becomes noticeably sluggish beyond 100,000 rows, making analysis inconvenient. Older versions of Excel (2003 and earlier) allowed even fewer rows — only 65,536 rows (= 2¹⁶) × 256 columns.&amp;lt;ref&amp;gt;[Did You Know] Microsoft Excel has a Limit of Maximum 1,048,576 Rows and 16,384 Columns – AskVG: https://www.askvg.com/did-you-know-microsoft-excel-has-a-limit-of-maximum-1048576-rows-and-16384-columns/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;What is the maximum allowed rows in a Microsoft Excel .xls or .xlsx - Super User: https://superuser.com/questions/366468/what-is-the-maximum-allowed-rows-in-a-microsoft-excel-xls-or-xlsx&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Common issues include Excel automatically converting long numbers (e.g., order IDs) into scientific notation,&amp;lt;ref&amp;gt;Fixing the issue of long numbers being rounded or displayed in scientific notation in Excel (written in Mandarin): https://errerrors.blogspot.com/2023/04/how-to-fix-rounding-after-15-digits-on-excel.html&amp;lt;/ref&amp;gt; or misidentifying certain strings (such as &amp;lt;code&amp;gt;1-2&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;MAR3&amp;lt;/code&amp;gt;) as dates,&amp;lt;ref&amp;gt;Excel bug forces scientists to rename human genes — and the bug has now been fixed | T客邦 (written in Mandarin): https://www.techbang.com/posts/110723-excel-human-genome&amp;lt;/ref&amp;gt; resulting in data loss or corruption.&lt;br /&gt;
&lt;br /&gt;
=== JSON Files ===&lt;br /&gt;
JSON files: suitable for complex or flexibly structured field definitions. A JSON file containing multiple records with a size of approximately 250 MB has been encountered in practice; a read error occurred and the file had to be split before processing.&lt;br /&gt;
The JSON format itself has no row limit, but the bottleneck is that the entire file must be loaded into memory when read — the larger the file, the more likely an out-of-memory error will occur.&amp;lt;ref&amp;gt;Quora — What is the practical limit on the size of a JSON message?: https://www.quora.com/What-is-the-practical-limit-on-the-size-of-a-JSON-message-for-an-internet-application&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In practice, it is recommended to avoid storing multiple records in a single JSON file and to use JSONL instead — that is, JSON with newline characters delimiting individual records. This format is suitable for streaming line-by-line with a program, preventing out-of-memory errors.&lt;br /&gt;
&lt;br /&gt;
=== SQLite or Parquet Files ===&lt;br /&gt;
SQLite or Parquet files: when the data volume exceeds Excel&#039;s row limit, these two formats are worth considering.&lt;br /&gt;
&lt;br /&gt;
The theoretical row limit per table in SQLite is 2⁶⁴ rows (approximately 1.8 × 10¹⁹), but this number is practically unreachable because the database file size limit of 281 TB will be hit first. At maximum database capacity, the number of storable rows is approximately 2 × 10¹³ (assuming no indexes and minimal row size).&amp;lt;ref&amp;gt;SQLite official documentation — Implementation Limits For SQLite: https://sqlite.org/limits.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parquet has no hard row limit. The format stores data in units called Row Groups — the horizontal partitioning unit within a Parquet file. Each Row Group contains a contiguous segment of rows stored column by column. For example, a dataset with 1,000,000 rows and 10 columns would be split into 10 separate column chunks within a single Row Group, rather than stored row by row. This design allows queries to read only the required columns without scanning entire rows, greatly improving read performance. Each Row Group defaults to a limit of 1,000,000 rows, but a single file can contain any number of Row Groups, so there is no theoretical row limit for the file as a whole.&amp;lt;ref&amp;gt;Apache arrow-rs GitHub issue #5797 — &amp;quot;Row groups are limited to 1M rows by default&amp;quot;: https://github.com/apache/arrow-rs/issues/5797&amp;lt;/ref&amp;gt; In practice, people have successfully written 500 million to 1 billion rows,&amp;lt;ref&amp;gt;Andy Cutler — 10 Billion Rows: Parquet File Size and Distribution When using CETAS: https://www.serverlesssql.com/row-size-and-parquet-file-distribution/&amp;lt;/ref&amp;gt; with the bottleneck typically being disk space rather than the format itself.&lt;br /&gt;
&lt;br /&gt;
=== SQL Files ===&lt;br /&gt;
SQL files: the export format for relational databases, consisting of multiple lines of SQL statements (e.g., &amp;lt;code&amp;gt;INSERT INTO ...&amp;lt;/code&amp;gt;), which can be imported directly into a database.&lt;br /&gt;
&lt;br /&gt;
SQL files themselves have no row limit; the format is plain text, and limitations again come from the tools used to open or import them.&lt;br /&gt;
&lt;br /&gt;
Common issues include:&lt;br /&gt;
* &#039;&#039;&#039;(1) Large file size&#039;&#039;&#039;: bulk data exports can easily reach several gigabytes; opening such files in a text editor may cause it to freeze or become unresponsive.&lt;br /&gt;
* &#039;&#039;&#039;(2) Cross-database compatibility&#039;&#039;&#039;: different database engines (such as MySQL, PostgreSQL, and SQLite) have differences in SQL syntax; a &amp;lt;code&amp;gt;.sql&amp;lt;/code&amp;gt; file exported from engine A may not be directly importable into another engine. See also: Troubleshooting MySQL Technical Issues — Migrating Data from MySQL to MSSQL (written in Mandarin).&lt;br /&gt;
&lt;br /&gt;
If the goal is simply to migrate data rather than restore a complete database structure, it is recommended to use CSV or Parquet instead, in order to avoid the compatibility issues described above.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Data factory flow}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Software]]&lt;br /&gt;
[[Category: Spreadsheet]]&lt;br /&gt;
[[Category: MySQL]]&lt;br /&gt;
[[Category: Data Science]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Comparison_of_common_data_file_formats_in_Mandarin&amp;diff=26396</id>
		<title>Comparison of common data file formats in Mandarin</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Comparison_of_common_data_file_formats_in_Mandarin&amp;diff=26396"/>
		<updated>2026-07-02T03:34:31Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;拿到資料檔案該怎麼開？各格式限制與注意事項&lt;br /&gt;
&lt;br /&gt;
{{LanguageSwitcher | content = [[Comparison of common data file formats | EN]], [[Comparison of common data file formats in Mandarin | 漢字]] }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 常見格式快速比較表 ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;格式&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;階層性&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;人類易讀&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;筆數/容量限制&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;常見問題&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;CSV&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（表格式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;高&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;格式本身無上限，取決於開啟軟體（Excel 約 104 萬列）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;中文亂碼、換行符號欄位值易錯位、數字型別被強制轉換（如電話號碼開頭 0 消失）&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;TSV&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（表格式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;高&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;同 CSV，格式本身無上限&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;與 CSV 相同，但可避免欄位值含逗號時的分隔誤判&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;Excel&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（表格式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;高&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;理論上限 1,048,576 列 × 16,384 欄；單一儲存格文字上限 32,767 字；超過 10 萬筆操作易頓&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;長數字被轉成科學記號、特定字串誤判為日期&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;JSON&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;有&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;中&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;格式本身無筆數上限，瓶頸為讀取時須整檔載入記憶體&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;大檔案（如 250MB+）易記憶體不足；建議改用 JSONL 串流讀取&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;SQLite&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（關聯式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;低（需工具開啟）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;理論上限 2⁶⁴ 筆，實際受資料庫檔案 281 TB 上限限制（約 2×10¹³ 筆）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;需透過資料庫工具讀寫，不利直接檢視&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;Parquet&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無（欄式）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;低（需工具開啟）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;格式本身無理論筆數上限（以 Row Group 為單位，預設每組 100 萬筆，可有任意組數）&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;實務瓶頸為硬碟空間，非格式限制；已有成功案例寫入 5～10 億筆&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&#039;&#039;&#039;SQL 檔&#039;&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;無&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;中&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;純文字格式本身無上限，限制來自匯入工具&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;檔案過大時文字編輯器易當機；不同資料庫引擎語法相容性問題&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;建議：&#039;&#039;&#039;&lt;br /&gt;
# 需要巢狀/自由格式欄位 → JSON（大量資料改 JSONL）&lt;br /&gt;
# 資料量超過百萬筆、只需搬移資料 → Parquet 或 CSV&lt;br /&gt;
# 需要還原完整資料庫結構（含關聯、索引） → SQL 或 SQLite&lt;br /&gt;
# 一般使用試算表軟體開啟操作 → CSV / Excel&lt;br /&gt;
&lt;br /&gt;
== 常見資料格式與限制 ==&lt;br /&gt;
=== 1. CSV 檔案 ===&lt;br /&gt;
CSV 檔案：不同欄位值用逗號間隔。&lt;br /&gt;
CSV 格式本身沒有筆數上限，限制來自開啟它的軟體。&amp;lt;ref&amp;gt;Row Zero — CSV Row Limits by Spreadsheet: https://rowzero.com/blog/csv-row-limit&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常見問題是&lt;br /&gt;
大部分人會使用 Microsoft Excel 開啟 CSV， (1) 中文亂碼：點選兩下發現中文亂碼，檔首需要額外加上 BOM 符號，或者改用匯入檔案方式，才不會遇到亂碼、(2) 如果欄位值包含換行符號的話，Excel 容易會出錯，導致明明是同一筆資料，卻出現在下一筆而出現欄位錯置的錯誤。(3) 資料類型強迫轉換：常見的問題是手機號碼的第一位號碼 0 被吃掉，因為被強制轉換成整數。&lt;br /&gt;
&lt;br /&gt;
如果你拿到是包含換行符號欄位值的 CSV 檔案，則不建議使用 Excel，而是改用 LibreOffice Calc。&lt;br /&gt;
&lt;br /&gt;
=== 2. TSV 檔案 ===&lt;br /&gt;
TSV 檔案：不同欄位值用定位鍵 (TAB) 間隔。如果欄位值包含逗號，可以改用 TSV 檔案。&lt;br /&gt;
TSV 與 CSV 同屬純文字格式，筆數上限同樣取決於開啟的軟體，格式本身無限制。&lt;br /&gt;
&lt;br /&gt;
=== 3. Excel 檔案===&lt;br /&gt;
Excel 檔案：常見的檔案類型，但是儲存格文字長度與欄位數量都有上限：單一儲存格內的文字不能超過 32,767 字，而欄位數上限是 16,384 欄 &amp;lt;ref&amp;gt;Microsoft Support — Excel specifications and limits: https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3&amp;lt;/ref&amp;gt;。其次雖然資料筆數理論上限是 1,048,576 筆（= 2²⁰），但如果筆數超過 10 萬筆，電腦操作 Excel 就會頓頓的，反而不方便分析。如果是舊版 Excel（2003 以前）允許的筆數更少，僅 65,536 筆（= 2¹⁶）× 256 欄。&amp;lt;ref&amp;gt;[Did You Know] Microsoft Excel has a Limit of Maximum 1,048,576 Rows and 16,384 Columns – AskVG https://www.askvg.com/did-you-know-microsoft-excel-has-a-limit-of-maximum-1048576-rows-and-16384-columns/&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://superuser.com/questions/366468/what-is-the-maximum-allowed-rows-in-a-microsoft-excel-xls-or-xlsx What is the maximum allowed rows in a Microsoft Excel .xls or .xlsx - Super User]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
常見問題是&lt;br /&gt;
Excel 雖然方便但經常會把長數字（例如：訂單編號）自動轉成科學記號顯示&amp;lt;ref&amp;gt;[https://errerrors.blogspot.com/2023/04/how-to-fix-rounding-after-15-digits-on-excel.html 解決 Excel 長數字的最後一位歸零或出現科學記號的問題]&amp;lt;/ref&amp;gt;，或把特定字串（如 1-2、MAR3）誤判為日期&amp;lt;ref&amp;gt;[https://www.techbang.com/posts/110723-excel-human-genome Excel功能出包，迫使科學家必須重新命名人類基因！現在這個Bug被修復了 | T客邦]&amp;lt;/ref&amp;gt;，造成資料遺失或資料錯誤。&lt;br /&gt;
&lt;br /&gt;
=== 4. JSON 檔案 ===&lt;br /&gt;
JSON 檔案：適合複雜格式或者說自由風格的欄位定義。曾經拿到包含多筆資料，約 250 MB 檔案大小的 JSON 檔案。因為發生檔案讀取錯誤，需要額外切割檔案內容。&lt;br /&gt;
JSON 格式本身沒有筆數上限，瓶頸是讀取時必須將整個檔案載入記憶體，因此檔案愈大愈容易發生記憶體不足的錯誤。&amp;lt;ref&amp;gt;Quora — What is the practical limit on the size of a JSON message?: https://www.quora.com/What-is-the-practical-limit-on-the-size-of-a-JSON-message-for-an-internet-application&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
實務上建議不要將多筆資料寫在 JSON，而改成 JSONL，也就是 JSON 加上換行符號區別多筆資料。適合使用程式用串流方式逐行讀取，而不致於發生記憶體錯誤。&lt;br /&gt;
&lt;br /&gt;
=== 5. SQLite 或 Parquet 檔案 ===&lt;br /&gt;
SQLite 或 Parquet 檔案：當資料量超過 Excel 筆數上限，可以考慮使用這兩種格式。&lt;br /&gt;
&lt;br /&gt;
SQLite 每張資料表的理論筆數上限是 2⁶⁴ 筆（約 1.8 × 10¹⁹），但這個數字實際上不可能達到，因為資料庫檔案大小上限 281 TB 會先被遇到。在最大資料庫容量下，可儲存的筆數約為 2 × 10¹³ 筆（前提是沒有索引且每筆資料極小）。&amp;lt;ref&amp;gt;SQLite 官方文件 — Implementation Limits For SQLite: https://sqlite.org/limits.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parquet 沒有硬性的筆數上限。格式本身以 Row Group 為單位儲存資料。Row Group 是 Parquet 檔案內部的水平分割單位，每個 Row Group 包含一段連續的資料列，以欄位為單位分開存放——例如一個有 100 萬筆、10 個欄位的資料集，在一個 Row Group 裡會被切成 10 段欄位資料分別儲存，而非逐列存放。這樣的設計讓查詢時只需讀取需要的欄位，不必掃描整列，大幅提升讀取效率。每個 Row Group 預設上限為 100 萬筆，但一個檔案可以包含任意數量的 Row Group，因此整個檔案的筆數沒有理論上限 &amp;lt;ref&amp;gt;Apache arrow-rs GitHub issue #5797 — &amp;quot;Row groups are limited to 1M rows by default&amp;quot;: https://github.com/apache/arrow-rs/issues/5797&amp;lt;/ref&amp;gt;。實務上已有人成功寫入 5 億~ 10 億筆資料&amp;lt;ref&amp;gt;Andy Cutler — 10 Billion Rows: Parquet File Size and Distribution When using CETAS: https://www.serverlesssql.com/row-size-and-parquet-file-distribution/&amp;lt;/ref&amp;gt;，瓶頸通常是硬碟空間，而非格式本身。&lt;br /&gt;
&lt;br /&gt;
=== 6. SQL 檔案 ===&lt;br /&gt;
SQL 檔案：關聯式資料庫的匯出格式，內容為多列的 SQL 語法（如 {{kbd | key=&amp;lt;nowiki&amp;gt;INSERT INTO ...&amp;lt;/nowiki&amp;gt;}}），可直接匯入至資料庫。&lt;br /&gt;
&lt;br /&gt;
SQL 檔案本身沒有筆數上限，格式本身只是純文字，限制同樣來自開啟或匯入它的工具。&lt;br /&gt;
&lt;br /&gt;
常見問題是 &lt;br /&gt;
* (1) 檔案過大：大量資料匯出後動輒數 GB，用文字編輯器開啟會導致當機或無回應。&lt;br /&gt;
* (2) 跨資料庫相容性：不同資料庫引擎（如 MySQL、PostgreSQL、SQLite）的 SQL 語法有差異，從 A 引擎匯出的 .sql 檔案，未必能直接匯入另一個引擎。可參考 [[排除_MySQL_技術疑難問題#從_MySQL_資料轉移至_MSSQL | 從_MySQL_資料轉移至_MSSQL]]&lt;br /&gt;
&lt;br /&gt;
如果只需要搬移資料而非還原完整資料庫結構，建議改用 CSV 或 Parquet，避免上述相容性問題。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:Data factory flow}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Software]]&lt;br /&gt;
[[Category: Spreadsheet]] &lt;br /&gt;
[[Category: MySQL]]&lt;br /&gt;
[[Category: Data Science]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Check_Browser_Compatibility&amp;diff=26395</id>
		<title>Check Browser Compatibility</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Check_Browser_Compatibility&amp;diff=26395"/>
		<updated>2026-07-01T10:24:52Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Checking the compatibility */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Check Browser Compatibility&lt;br /&gt;
&lt;br /&gt;
Noun explanation&lt;br /&gt;
# allowed to interact: the solutions which (1) allowed to interact the web pages e.g.  click the link and test javascript (2) view the web snapshot&lt;br /&gt;
# view the snapshot only: only allowed to view the static web snapshot&lt;br /&gt;
&lt;br /&gt;
==== Checking the compatibility of web page ====&lt;br /&gt;
* {{Gd}} [http://www.caniuse.com/ Can I use... Support tables for HTML5, CSS3, etc] &amp;quot;Compatibility tables for support of HTML5, CSS3, SVG and more in desktop and mobile browsers.&amp;quot; {{access | date=2020-08-23}}&lt;br /&gt;
* [http://blog.miniasp.com/post/2013/07/14/HTML5-CSS3-JavaScript-JS-compatibility-resouces.aspx The Will Will Web | 前端工程研究：HTML/CSS/JavaScript 相容性檢查資源整理]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Checking the compatibility of email ====&lt;br /&gt;
* {{Gd}} [https://www.caniemail.com/ Can I email… Support tables for HTML and CSS in emails]&lt;br /&gt;
* [https://email-compatibility-checker.planetoid.info/ Email Newsletter Compatibility Checker]&lt;br /&gt;
&lt;br /&gt;
==== allowed to interact ====&lt;br /&gt;
===== desktop browser + mobile browser =====&lt;br /&gt;
cloud services for testing desktop browsers and mobile browsers&lt;br /&gt;
* [http://www.browserstack.com/ BrowserStack]&#039;&#039;($)&#039;&#039; &amp;quot;Cross Browser Testing Tool. 100+ Browsers, Mobile, Real IE.&amp;quot; [http://www.browserstack.com/list-of-browsers-and-platforms List of Browsers and Platforms for Cross Browser Testing]&lt;br /&gt;
** [https://chrome.google.com/webstore/detail/test-ie/eldlkpeoddgbmpjlnpfblfpgodnojfjl/related Test IE] for {{Chrome}}&lt;br /&gt;
* [https://saucelabs.com/home Sauce Labs: Mobile and Web App Testing Tools For Developers]&#039;&#039;($)&#039;&#039;: [https://saucelabs.com/docs/platforms supported Device/OS/Browser Platforms]&lt;br /&gt;
&lt;br /&gt;
testing different screen resolution &lt;br /&gt;
* [[CSS_tools#.E4.B8.8D.E5.90.8C.E8.9E.A2.E5.B9.95.E8.A7.A3.E6.9E.90.E5.BA.A6.E6.AA.A2.E8.A6.96.E7.B6.B2.E9.A0.81| css tools]]&lt;br /&gt;
&lt;br /&gt;
===== mobile browsers =====&lt;br /&gt;
{{Tips}} WARNING: Simulators/emulators for mobile browser testing is &#039;&#039;&#039;different&#039;&#039;&#039; from the browser for real mobile device.&lt;br /&gt;
* [http://www.mozilla.org/en-US/mobile/ Mozilla Firefox | Firefox for Android | Download Firefox to your mobile device] {{access | date =2012-06-06}} {{win}} {{linux}} &lt;br /&gt;
* [http://www.opera.com/developer/tools/mini/ Opera Mini simulator]. Require: Java installed&lt;br /&gt;
* [https://developer.chrome.com/devtools/docs/device-mode Device Mode Mobile Emulation] for {{chrome}}&lt;br /&gt;
* [https://appetize.io/demo?device=iphone14pro&amp;amp;osVersion=16.2&amp;amp;record=true Demo] of appetize&lt;br /&gt;
&lt;br /&gt;
alternative&lt;br /&gt;
* [http://bluestacks.com/ BlueStacks] Run Android on Windows with BlueStacks for {{win}} &amp;amp; {{Mac}}&lt;br /&gt;
* [http://www.genymotion.com/ Genymotion] + VirtualBox 教學: [http://www.azofreeware.com/2013/08/genymotion-110-bluestacksandroid.html (魔神模擬器) Genymotion 2.2.2 - 比BlueStacks還專業的Android安卓手機模擬器 神魔之塔可以玩 - 阿榮福利味]&lt;br /&gt;
&lt;br /&gt;
===== desktop browser =====&lt;br /&gt;
One PC with different Internet Explorer versions 同一電腦可以有不同版本的Internet Explorer&lt;br /&gt;
&lt;br /&gt;
* [https://blogs.windows.com/msedgedev/2015/08/17/windows-10-virtual-machines-now-available-on-microsoft-edge-dev/#QZQ86LBwxcHOQOgo.97 Windows 10 virtual machines now available on Microsoft Edge Dev | Microsoft Edge Dev Blog] IE8, IE9, IE10, IE11, Microsoft Edge {{access | date = 2016-10-12}}&lt;br /&gt;
* [http://finalbuilds.edskes.net/iecollection.htm Internet Explorer Collection]([http://blog.miniasp.com/post/2009/03/Useful-tools-Internet-Explorer-Collection.aspx 介紹]) &lt;br /&gt;
** various {{IE}} browser version: IE1.0 ~ IE8 which allow to choose to install &#039;&#039;&#039;IE developer toolbar&#039;&#039;&#039; &amp;amp; &#039;&#039;&#039;Firebug Web development extension&#039;&#039;&#039; during the installation&lt;br /&gt;
* [http://www.my-debugbar.com/wiki/IETester/HomePage IETester] &lt;br /&gt;
** various {{IE}} browser version: IE5.5 ~ IE11 emulator {{exclaim}} IE9+ emulator not available on Windows XP&lt;br /&gt;
* [http://browserling.com/ browserling - interactive cross-browser testing in your browser] Run IE5~9 (Simulated by [http://www.my-debugbar.com/wiki/IETester/HomePage IETester])&lt;br /&gt;
* Microsoft [http://expression.microsoft.com/en-us/dd565874.aspx Expression Web SuperPreview]([http://www.microsoft.com/downloads/details.aspx?FamilyID=8e6ac106-525d-45d0-84db-dccff3fae677&amp;amp;displaylang=en download]) IE6, IE7, IE8-&amp;gt;7 (compatibility view), IE8, [http://support.microsoft.com/kb/2445851?Browser=Firefox&amp;amp;Version=5 Fx 3.0~3.6]&lt;br /&gt;
* Windows OS + IE v.10: go to menu: &#039;&#039;&#039;&amp;quot;developer tools&amp;quot;&#039;&#039;&#039; -&amp;gt; switch &amp;quot;browser mode&amp;quot; between: IE10, IE9, IE8, IE7&lt;br /&gt;
&lt;br /&gt;
older version of IE also available at&lt;br /&gt;
* IE3.0 ~ IE6.0: [http://tredosoft.com/Multiple_IE Multiple IE]&lt;br /&gt;
&lt;br /&gt;
other desktop browser available at&lt;br /&gt;
* [http://www.browseemall.com/ BrowseEmAll (Standalone tool to run all major Browsers)] (shareware)&lt;br /&gt;
* [http://spoon.net/browsers/ Browser Sandbox - Run any browser from the web](&#039;&#039;$&#039;&#039;) Run {{Fx}}, {{Chrome}}, {{Opera}}, {{Safari}} and mobile browsers  from the plug-in, but no IE (last visited: 2011-02-09)&lt;br /&gt;
* [http://browserling.com/ browserling - interactive cross-browser testing in your browser] Run {{IE}} 5-9 (Simulated by [http://www.my-debugbar.com/wiki/IETester/HomePage IETester]), {{Fx}} v3~10, {{Chrome}} v1~16 , {{Opera}} v10~11 and {{Safari}} v4~5 (last visited: 2012-03-06) Guest can use 3 minute sessions &lt;br /&gt;
* portable version of browser such as portable firefox (Firefox 免安裝版)&lt;br /&gt;
&lt;br /&gt;
alternative: Install different &#039;&#039;&#039;virtual machines&#039;&#039;&#039;, ex:&lt;br /&gt;
* [http://www.virtualbox.org/ VirtualBox], &lt;br /&gt;
* [http://www.microsoft.com/windows/virtual-pc/support/virtual-pc-2007.aspx Windows Virtual PC]  + [http://www.microsoft.com/en-us/download/details.aspx?id=11575 IE App Compat VHD from Official Microsoft] with different version of browser. For example you install IE v.6 on first virtual machine, and install IE v.7 on another virtual machine. &lt;br /&gt;
* [http://www.vmware.com/products/thinapp/ VMware ThinApp]&#039;&#039;($)&#039;&#039;&lt;br /&gt;
* ... more on [[Virtual machine images]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also &lt;br /&gt;
* [[Research_surveys#全球瀏覽器、作業系統、螢幕解析度、搜尋引擎市占率統計表 | 全球瀏覽器(Browser share)、作業系統、螢幕解析度、搜尋引擎市占率統計表]] &lt;br /&gt;
* [https://addons.mozilla.org/en-US/firefox/addon/59 User Agent Switcher :: Firefox Add-ons][http://chrispederick.com/work/user-agent-switcher/]for {{Fx}}&lt;br /&gt;
&lt;br /&gt;
further reading&lt;br /&gt;
* [https://medium.com/@stothelios/9-tools-to-test-your-site-9ee997c79e48 9 tools to test your site — Medium]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Template:Build a website}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]] [[Category:Browser]] [[Category:Mobile]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Day_of_week&amp;diff=26394</id>
		<title>Day of week</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Day_of_week&amp;diff=26394"/>
		<updated>2026-06-25T16:57:47Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Weekday */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Numeric representation of the day of the week. MySQL, Excel or PHP approaches to specify these date time.&lt;br /&gt;
&lt;br /&gt;
== Weekday ==&lt;br /&gt;
The value of weekday obtained from different approaches.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%; min-height: .01%; overflow-x: auto;&amp;quot;&amp;gt; &lt;br /&gt;
{| class=&amp;quot;wikitable sortable nowrap&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:right;&amp;quot; | Weekday values from different approaches&lt;br /&gt;
! Sunday&lt;br /&gt;
! Monday&lt;br /&gt;
! Tuesday&lt;br /&gt;
! Wednesday&lt;br /&gt;
! Thursday&lt;br /&gt;
! Friday&lt;br /&gt;
! Saturday&lt;br /&gt;
|-&lt;br /&gt;
! [http://php.net/manual/en/function.date.php PHP date] with N format character: Weekday ([https://en.wikipedia.org/wiki/ISO_week_date ISO-8601])&lt;br /&gt;
| 7&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
! [https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_weekday MySQL WEEKDAY() function]&lt;br /&gt;
| 6&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
! [https://www.w3schools.com/sql/func_mysql_dayofweek.asp MySQL DAYOFWEEK() Function]&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
! [https://support.office.com/zh-tw/article/WEEKDAY-%E5%87%BD%E6%95%B8-60e44483-2ed1-439f-8bd0-e404c190949a Excel WEEKDAY() function] e.g. WEEKDAY(A2) or WEEKDAY(A2, 1)&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
! [https://support.office.com/zh-tw/article/WEEKDAY-%E5%87%BD%E6%95%B8-60e44483-2ed1-439f-8bd0-e404c190949a Excel WEEKDAY() function] e.g. WEEKDAY(A2, 2)&lt;br /&gt;
| 7&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
! [http://php.net/manual/en/function.date.php PHP date] with w format character&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get the date ==&lt;br /&gt;
Get the date of weekday from another known date (today or another specific day)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%; min-height: .01%; overflow-x: auto;&amp;quot;&amp;gt; &lt;br /&gt;
{| class=&amp;quot;wikitable sortable nowrap&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:right;&amp;quot; | Day&lt;br /&gt;
! Sunday&lt;br /&gt;
! Monday&lt;br /&gt;
! Tuesday&lt;br /&gt;
! Wednesday&lt;br /&gt;
! Thursday&lt;br /&gt;
! Friday&lt;br /&gt;
! Saturday&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! Last week&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;-8&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())-6&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;Sunday -14 day&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;-7&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())-5&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;monday this week -7 day&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;-3&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&#039;Friday -7 day&#039;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;-2&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt; PHP&amp;lt;ref&amp;gt;[https://stackoverflow.com/questions/3742820/php-how-to-get-previous-sunday-of-a-specific-date-in-the-past PHP: How to get previous Sunday of a specific date in the past..? - Stack Overflow]&amp;lt;/ref&amp;gt;: (1) {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;last Saturday&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}} (2) {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&#039;last Saturday&#039;, strtotime(&amp;quot;2018-03-04 00:01:00&amp;quot;))) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|-&lt;br /&gt;
! This week&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;-1&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+1&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;Sunday -7 day&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+2&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;monday this week&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+3&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+4&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+5&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+6&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&#039;Friday&#039;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+7&amp;lt;/nowiki&amp;gt;}} &amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;Saturday&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|-&lt;br /&gt;
! Next week&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+8&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;Sunday&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;7&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+9&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: (1) {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;next monday&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}} (2) {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;monday this week +7 day&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&#039;Friday +7 day&#039;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;References /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
* PHP [http://php.net/manual/en/function.date.php date] function: w character (0 for Sunday through 6 for Saturday) or N character (1 for Monday through 7 for Sunday)&lt;br /&gt;
* [https://support.office.com/zh-tw/article/WEEKDAY-%E5%87%BD%E6%95%B8-60e44483-2ed1-439f-8bd0-e404c190949a WEEKDAY 函數 - Office 支援]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/ISO_8601 ISO 8601 - Wikipedia]&lt;br /&gt;
* [https://stackoverflow.com/questions/23020162/how-to-get-this-coming-sundays-date mysql - How to get this coming Sunday&#039;s date? - Stack Overflow]&lt;br /&gt;
* [https://support.office.com/zh-tw/article/today-%E5%87%BD%E6%95%B8-5eb3078d-a82c-4736-8930-2f51a028fdd9 TODAY 函數 - Office 支援]&lt;br /&gt;
* [https://errerrors.blogspot.com/2026/06/spreadsheet-weekday-formula.html 在 Google 試算表、Excel 與 LibreOffice Calc 如何顯示星期幾]&lt;br /&gt;
&lt;br /&gt;
[[Category:PHP]] &lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Web_Dev]]&lt;br /&gt;
[[Category:MySQL]]&lt;br /&gt;
[[Category:Data Science]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Day_of_week&amp;diff=26393</id>
		<title>Day of week</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Day_of_week&amp;diff=26393"/>
		<updated>2026-06-25T16:54:45Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Further reading */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Numeric representation of the day of the week. MySQL, Excel or PHP approaches to specify these date time.&lt;br /&gt;
&lt;br /&gt;
== Weekday ==&lt;br /&gt;
The value of weekday obtained from different approaches.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%; min-height: .01%; overflow-x: auto;&amp;quot;&amp;gt; &lt;br /&gt;
{| class=&amp;quot;wikitable sortable nowrap&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:right;&amp;quot; | Weekday values from different approaches&lt;br /&gt;
! Sunday&lt;br /&gt;
! Monday&lt;br /&gt;
! Tuesday&lt;br /&gt;
! Wednesday&lt;br /&gt;
! Thursday&lt;br /&gt;
! Friday&lt;br /&gt;
! Saturday&lt;br /&gt;
|-&lt;br /&gt;
! [http://php.net/manual/en/function.date.php PHP date] with N format character: Weekday ([https://en.wikipedia.org/wiki/ISO_week_date ISO-8601])&lt;br /&gt;
| 7&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
! [https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_weekday MySQL WEEKDAY() function]&lt;br /&gt;
| 6&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
! [https://www.w3schools.com/sql/func_mysql_dayofweek.asp MySQL DAYOFWEEK() Function]&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
! [https://support.office.com/zh-tw/article/WEEKDAY-%E5%87%BD%E6%95%B8-60e44483-2ed1-439f-8bd0-e404c190949a Excel WEEKDAY() function]&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
! [http://php.net/manual/en/function.date.php PHP date] with w format character&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 2&lt;br /&gt;
| 3&lt;br /&gt;
| 4&lt;br /&gt;
| 5&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Get the date ==&lt;br /&gt;
Get the date of weekday from another known date (today or another specific day)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%; min-height: .01%; overflow-x: auto;&amp;quot;&amp;gt; &lt;br /&gt;
{| class=&amp;quot;wikitable sortable nowrap&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align:right;&amp;quot; | Day&lt;br /&gt;
! Sunday&lt;br /&gt;
! Monday&lt;br /&gt;
! Tuesday&lt;br /&gt;
! Wednesday&lt;br /&gt;
! Thursday&lt;br /&gt;
! Friday&lt;br /&gt;
! Saturday&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! Last week&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;-8&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())-6&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;Sunday -14 day&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;-7&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())-5&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;monday this week -7 day&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;-3&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&#039;Friday -7 day&#039;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;-2&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt; PHP&amp;lt;ref&amp;gt;[https://stackoverflow.com/questions/3742820/php-how-to-get-previous-sunday-of-a-specific-date-in-the-past PHP: How to get previous Sunday of a specific date in the past..? - Stack Overflow]&amp;lt;/ref&amp;gt;: (1) {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;last Saturday&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}} (2) {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&#039;last Saturday&#039;, strtotime(&amp;quot;2018-03-04 00:01:00&amp;quot;))) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|-&lt;br /&gt;
! This week&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;-1&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+1&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;Sunday -7 day&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+2&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;monday this week&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+3&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+4&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+5&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;4&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+6&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&#039;Friday&#039;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+7&amp;lt;/nowiki&amp;gt;}} &amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;Saturday&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
|-&lt;br /&gt;
! Next week&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+8&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;Sunday&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| MySQL: {{kbd | key=SELECT CURDATE() + INTERVAL &amp;lt;span class=&amp;quot;hightlight&amp;quot;&amp;gt;7&amp;lt;/span&amp;gt; - WEEKDAY(CURDATE()) DAY;}} &amp;lt;br /&amp;gt;Excel: {{kbd | key=&amp;lt;nowiki&amp;gt;=TODAY()-WEEKDAY(NOW())+9&amp;lt;/nowiki&amp;gt;}}&amp;lt;br /&amp;gt;PHP: (1) {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;next monday&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}} (2) {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&amp;quot;monday this week +7 day&amp;quot;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| PHP: {{kbd | key=&amp;lt;nowiki&amp;gt;echo date(&#039;Y-m-d&#039;, strtotime(&#039;Friday +7 day&#039;)) . PHP_EOL;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;References /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
* PHP [http://php.net/manual/en/function.date.php date] function: w character (0 for Sunday through 6 for Saturday) or N character (1 for Monday through 7 for Sunday)&lt;br /&gt;
* [https://support.office.com/zh-tw/article/WEEKDAY-%E5%87%BD%E6%95%B8-60e44483-2ed1-439f-8bd0-e404c190949a WEEKDAY 函數 - Office 支援]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/ISO_8601 ISO 8601 - Wikipedia]&lt;br /&gt;
* [https://stackoverflow.com/questions/23020162/how-to-get-this-coming-sundays-date mysql - How to get this coming Sunday&#039;s date? - Stack Overflow]&lt;br /&gt;
* [https://support.office.com/zh-tw/article/today-%E5%87%BD%E6%95%B8-5eb3078d-a82c-4736-8930-2f51a028fdd9 TODAY 函數 - Office 支援]&lt;br /&gt;
* [https://errerrors.blogspot.com/2026/06/spreadsheet-weekday-formula.html 在 Google 試算表、Excel 與 LibreOffice Calc 如何顯示星期幾]&lt;br /&gt;
&lt;br /&gt;
[[Category:PHP]] &lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Web_Dev]]&lt;br /&gt;
[[Category:MySQL]]&lt;br /&gt;
[[Category:Data Science]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Check_Browser_Compatibility&amp;diff=26392</id>
		<title>Check Browser Compatibility</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Check_Browser_Compatibility&amp;diff=26392"/>
		<updated>2026-06-24T09:12:02Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* view the snapshot only */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Check Browser Compatibility&lt;br /&gt;
&lt;br /&gt;
Noun explanation&lt;br /&gt;
# allowed to interact: the solutions which (1) allowed to interact the web pages e.g.  click the link and test javascript (2) view the web snapshot&lt;br /&gt;
# view the snapshot only: only allowed to view the static web snapshot&lt;br /&gt;
&lt;br /&gt;
==== Checking the compatibility ====&lt;br /&gt;
* {{Gd}} [http://www.caniuse.com/ Can I use... Support tables for HTML5, CSS3, etc] &amp;quot;Compatibility tables for support of HTML5, CSS3, SVG and more in desktop and mobile browsers.&amp;quot; {{access | date=2020-08-23}}&lt;br /&gt;
* {{Gd}} [https://www.caniemail.com/ Can I email… Support tables for HTML and CSS in emails]&lt;br /&gt;
* [http://blog.miniasp.com/post/2013/07/14/HTML5-CSS3-JavaScript-JS-compatibility-resouces.aspx The Will Will Web | 前端工程研究：HTML/CSS/JavaScript 相容性檢查資源整理]&lt;br /&gt;
&lt;br /&gt;
==== allowed to interact ====&lt;br /&gt;
===== desktop browser + mobile browser =====&lt;br /&gt;
cloud services for testing desktop browsers and mobile browsers&lt;br /&gt;
* [http://www.browserstack.com/ BrowserStack]&#039;&#039;($)&#039;&#039; &amp;quot;Cross Browser Testing Tool. 100+ Browsers, Mobile, Real IE.&amp;quot; [http://www.browserstack.com/list-of-browsers-and-platforms List of Browsers and Platforms for Cross Browser Testing]&lt;br /&gt;
** [https://chrome.google.com/webstore/detail/test-ie/eldlkpeoddgbmpjlnpfblfpgodnojfjl/related Test IE] for {{Chrome}}&lt;br /&gt;
* [https://saucelabs.com/home Sauce Labs: Mobile and Web App Testing Tools For Developers]&#039;&#039;($)&#039;&#039;: [https://saucelabs.com/docs/platforms supported Device/OS/Browser Platforms]&lt;br /&gt;
&lt;br /&gt;
testing different screen resolution &lt;br /&gt;
* [[CSS_tools#.E4.B8.8D.E5.90.8C.E8.9E.A2.E5.B9.95.E8.A7.A3.E6.9E.90.E5.BA.A6.E6.AA.A2.E8.A6.96.E7.B6.B2.E9.A0.81| css tools]]&lt;br /&gt;
&lt;br /&gt;
===== mobile browsers =====&lt;br /&gt;
{{Tips}} WARNING: Simulators/emulators for mobile browser testing is &#039;&#039;&#039;different&#039;&#039;&#039; from the browser for real mobile device.&lt;br /&gt;
* [http://www.mozilla.org/en-US/mobile/ Mozilla Firefox | Firefox for Android | Download Firefox to your mobile device] {{access | date =2012-06-06}} {{win}} {{linux}} &lt;br /&gt;
* [http://www.opera.com/developer/tools/mini/ Opera Mini simulator]. Require: Java installed&lt;br /&gt;
* [https://developer.chrome.com/devtools/docs/device-mode Device Mode Mobile Emulation] for {{chrome}}&lt;br /&gt;
* [https://appetize.io/demo?device=iphone14pro&amp;amp;osVersion=16.2&amp;amp;record=true Demo] of appetize&lt;br /&gt;
&lt;br /&gt;
alternative&lt;br /&gt;
* [http://bluestacks.com/ BlueStacks] Run Android on Windows with BlueStacks for {{win}} &amp;amp; {{Mac}}&lt;br /&gt;
* [http://www.genymotion.com/ Genymotion] + VirtualBox 教學: [http://www.azofreeware.com/2013/08/genymotion-110-bluestacksandroid.html (魔神模擬器) Genymotion 2.2.2 - 比BlueStacks還專業的Android安卓手機模擬器 神魔之塔可以玩 - 阿榮福利味]&lt;br /&gt;
&lt;br /&gt;
===== desktop browser =====&lt;br /&gt;
One PC with different Internet Explorer versions 同一電腦可以有不同版本的Internet Explorer&lt;br /&gt;
&lt;br /&gt;
* [https://blogs.windows.com/msedgedev/2015/08/17/windows-10-virtual-machines-now-available-on-microsoft-edge-dev/#QZQ86LBwxcHOQOgo.97 Windows 10 virtual machines now available on Microsoft Edge Dev | Microsoft Edge Dev Blog] IE8, IE9, IE10, IE11, Microsoft Edge {{access | date = 2016-10-12}}&lt;br /&gt;
* [http://finalbuilds.edskes.net/iecollection.htm Internet Explorer Collection]([http://blog.miniasp.com/post/2009/03/Useful-tools-Internet-Explorer-Collection.aspx 介紹]) &lt;br /&gt;
** various {{IE}} browser version: IE1.0 ~ IE8 which allow to choose to install &#039;&#039;&#039;IE developer toolbar&#039;&#039;&#039; &amp;amp; &#039;&#039;&#039;Firebug Web development extension&#039;&#039;&#039; during the installation&lt;br /&gt;
* [http://www.my-debugbar.com/wiki/IETester/HomePage IETester] &lt;br /&gt;
** various {{IE}} browser version: IE5.5 ~ IE11 emulator {{exclaim}} IE9+ emulator not available on Windows XP&lt;br /&gt;
* [http://browserling.com/ browserling - interactive cross-browser testing in your browser] Run IE5~9 (Simulated by [http://www.my-debugbar.com/wiki/IETester/HomePage IETester])&lt;br /&gt;
* Microsoft [http://expression.microsoft.com/en-us/dd565874.aspx Expression Web SuperPreview]([http://www.microsoft.com/downloads/details.aspx?FamilyID=8e6ac106-525d-45d0-84db-dccff3fae677&amp;amp;displaylang=en download]) IE6, IE7, IE8-&amp;gt;7 (compatibility view), IE8, [http://support.microsoft.com/kb/2445851?Browser=Firefox&amp;amp;Version=5 Fx 3.0~3.6]&lt;br /&gt;
* Windows OS + IE v.10: go to menu: &#039;&#039;&#039;&amp;quot;developer tools&amp;quot;&#039;&#039;&#039; -&amp;gt; switch &amp;quot;browser mode&amp;quot; between: IE10, IE9, IE8, IE7&lt;br /&gt;
&lt;br /&gt;
older version of IE also available at&lt;br /&gt;
* IE3.0 ~ IE6.0: [http://tredosoft.com/Multiple_IE Multiple IE]&lt;br /&gt;
&lt;br /&gt;
other desktop browser available at&lt;br /&gt;
* [http://www.browseemall.com/ BrowseEmAll (Standalone tool to run all major Browsers)] (shareware)&lt;br /&gt;
* [http://spoon.net/browsers/ Browser Sandbox - Run any browser from the web](&#039;&#039;$&#039;&#039;) Run {{Fx}}, {{Chrome}}, {{Opera}}, {{Safari}} and mobile browsers  from the plug-in, but no IE (last visited: 2011-02-09)&lt;br /&gt;
* [http://browserling.com/ browserling - interactive cross-browser testing in your browser] Run {{IE}} 5-9 (Simulated by [http://www.my-debugbar.com/wiki/IETester/HomePage IETester]), {{Fx}} v3~10, {{Chrome}} v1~16 , {{Opera}} v10~11 and {{Safari}} v4~5 (last visited: 2012-03-06) Guest can use 3 minute sessions &lt;br /&gt;
* portable version of browser such as portable firefox (Firefox 免安裝版)&lt;br /&gt;
&lt;br /&gt;
alternative: Install different &#039;&#039;&#039;virtual machines&#039;&#039;&#039;, ex:&lt;br /&gt;
* [http://www.virtualbox.org/ VirtualBox], &lt;br /&gt;
* [http://www.microsoft.com/windows/virtual-pc/support/virtual-pc-2007.aspx Windows Virtual PC]  + [http://www.microsoft.com/en-us/download/details.aspx?id=11575 IE App Compat VHD from Official Microsoft] with different version of browser. For example you install IE v.6 on first virtual machine, and install IE v.7 on another virtual machine. &lt;br /&gt;
* [http://www.vmware.com/products/thinapp/ VMware ThinApp]&#039;&#039;($)&#039;&#039;&lt;br /&gt;
* ... more on [[Virtual machine images]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also &lt;br /&gt;
* [[Research_surveys#全球瀏覽器、作業系統、螢幕解析度、搜尋引擎市占率統計表 | 全球瀏覽器(Browser share)、作業系統、螢幕解析度、搜尋引擎市占率統計表]] &lt;br /&gt;
* [https://addons.mozilla.org/en-US/firefox/addon/59 User Agent Switcher :: Firefox Add-ons][http://chrispederick.com/work/user-agent-switcher/]for {{Fx}}&lt;br /&gt;
&lt;br /&gt;
further reading&lt;br /&gt;
* [https://medium.com/@stothelios/9-tools-to-test-your-site-9ee997c79e48 9 tools to test your site — Medium]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Template:Build a website}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]] [[Category:Browser]] [[Category:Mobile]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=User_agent&amp;diff=26391</id>
		<title>User agent</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=User_agent&amp;diff=26391"/>
		<updated>2026-06-24T09:10:46Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Mail user clients / Mail user agents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;使用者代理程式(user agent):  Search Engine Spiders (Bots), Browsers, Code Validators &lt;br /&gt;
&lt;br /&gt;
== Search Engine Spiders (Bots) ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
| User Agent || Search Engine&lt;br /&gt;
|-&lt;br /&gt;
| Scooter || [http://www.altavista.com/web/legal/termsofuse AltaVista]&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.wisenut.com/ WISENutbot] || Looksmart&lt;br /&gt;
|-&lt;br /&gt;
| IA Archiver || [http://pages.alexa.com/help/webmasters/ Alexa] &lt;br /&gt;
|-&lt;br /&gt;
| [http://search.msn.com/msnbot.htm MSNBot] || MSN&lt;br /&gt;
|-&lt;br /&gt;
| Slurp || [http://www.inktomi.com/slurp.html Inktomi]&lt;br /&gt;
|-&lt;br /&gt;
| Fast-Webcrawler || [http://www.fastsearch.com/us/products/fast_web_search/crawler_faq AllTheWeb]&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.walhello.com/aboutgl.html Walhello appie] || -&lt;br /&gt;
|-&lt;br /&gt;
| Googlebot || ([http://www.google.com/bot.html Google] or [http://www.yam.com/help/doc_sre.html 中文說明])&lt;br /&gt;
|-&lt;br /&gt;
| [http://gais.cs.ccu.edu.tw/robot.php Gaisbot] || -&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Robotstxt.org: [http://www.robotstxt.org/wc/active.html The Web Robots Database]&lt;br /&gt;
* WebmasterWorld Forms: [http://www.webmasterworld.com/category1.htm The Search Engine World]&lt;br /&gt;
* [http://www.hkwebs.net/catalog/teach/setting/robots.php 設定 robots.txt]&lt;br /&gt;
&lt;br /&gt;
{{News feed | title = 搜尋引擎 相關新聞聯播 | feed = &amp;lt;rss&amp;gt;https://news.google.com/rss/search?q=%E6%90%9C%E5%B0%8B%E5%BC%95%E6%93%8E&amp;amp;hl=zh-TW&amp;amp;gl=TW&amp;amp;ceid=TW:zh-Hant&amp;lt;/rss&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Web Browsers ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== list of web browsers ===&lt;br /&gt;
* https://planetoid.info/images/browser_msie.png [http://www.microsoft.com/windows/ie/default.asp MS Internet Explorer]&lt;br /&gt;
* https://planetoid.info/images/browser_firefox.png [http://www.mozilla.org/ Mozilla]及瘦身版 Mozilla Firefox [http://moztw.org/ 中文化]([http://portableapps.com/apps/internet/firefox_portable Portable Edition]), &lt;br /&gt;
* https://planetoid.info/images/browser_chrome.png [http://www.google.com/chrome Google chrome]([http://portableapps.com/apps/internet/google_chrome_portable Portable Edition], [http://briian.com/?p=5754 「鍵盤快速鍵」與「快捷操作技巧」])&lt;br /&gt;
** [http://briian.com/?p=6043 Google Chrome Channel Changer 2.0 快速取得最新測試版瀏覽器　　【重灌狂人】]&lt;br /&gt;
** [http://tools.google.com/dlpage/chromesxs Google Chrome Canary Build]&lt;br /&gt;
** 開放原始碼專案: [http://code.google.com/chromium/ Chromium] ([http://blog.chromium.org/ Chromium Blog], [http://dev.chromium.org/getting-involved/dev-channel/ Dev Channel], [http://build.chromium.org/buildbot/snapshots/chromium-rel-xp/?O=D Download]) via [http://www.freegroup.org/free-web-browser-chromium]&lt;br /&gt;
*** 下載說明: [http://www.freegroup.org/free-web-browser-chromium Chromium - Google Chrome 免安裝版！ - 免費資源網路社群]&lt;br /&gt;
*** 非官方的版本: [http://soft.onlyone.idv.tw/article.asp?id=467 Google Chrome 有免安裝 + 滑鼠手勢版囉！ - 硬是要學！網路資源學習站]&lt;br /&gt;
* https://planetoid.info/images/browser_opera.png [http://www.opera.com/ Opera]([http://www.opera-usb.com/operausben.htm Portable Edition]), [http://jedi.org/p4/Opera/pub/ Opera 台灣版──三太子（Nalakuvara）]&lt;br /&gt;
* https://planetoid.info/images/browser_safari.png [http://www.apple.com/safari/ Safari]([http://azo-freeware.blogspot.com/2009/02/safari-452816-beta.html Safari 5.1.7 免安裝中文版])&lt;br /&gt;
* [http://www.w3.org/Library/ LibWWW], &lt;br /&gt;
* [http://www.konqueror.org/ Konqueror], and 文字界面的瀏覽軟體: [http://lynx.isc.org/release/ Lynx]&lt;br /&gt;
* more on [http://en.wikipedia.org/wiki/List_of_web_browsers List of web browsers]([http://zh.wikipedia.org/wiki/%E7%B6%B2%E9%A0%81%E7%80%8F%E8%A6%BD%E5%99%A8%E5%88%97%E8%A1%A8 網頁瀏覽器列表])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{News feed | title = 瀏覽器 相關新聞聯播 | feed = &amp;lt;rss&amp;gt;https://news.google.com/rss/search?q=%E7%80%8F%E8%A6%BD%E5%99%A8&amp;amp;hl=zh-TW&amp;amp;gl=TW&amp;amp;ceid=TW:zh-Hant&amp;lt;/rss&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Chcek Browser Compatibility ===&lt;br /&gt;
{{:Check Browser Compatibility}}&lt;br /&gt;
&lt;br /&gt;
=== Browser detect ===&lt;br /&gt;
* {{Gd}} [http://www.useragentstring.com/ User Agent String.Com ]&lt;br /&gt;
* [http://www.quirksmode.org/js/detect.html JavaScript - Browser detect]&lt;br /&gt;
* [http://php.net/manual/en/function.get-browser.php PHP get_browser function]&lt;br /&gt;
* [http://whatsmyuseragent.com/ Whats My User Agent?]&lt;br /&gt;
&lt;br /&gt;
=== Display HTTP headers of a web page ===&lt;br /&gt;
[[HTTP request and response data tool]]&lt;br /&gt;
&lt;br /&gt;
== Mail user clients / Mail user agents ==&lt;br /&gt;
* {{Gd}} [https://www.caniemail.com/ Can I email… Support tables for HTML and CSS in emails] {{access | date=2026-04-24}} e.g. [https://www.caniemail.com/features/image-webp/ Can I email… webP image format]&lt;br /&gt;
&lt;br /&gt;
== Grabber ==&lt;br /&gt;
* [http://curl.haxx.se/ Curl] &amp;quot;curl is a command line tool for transferring files with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE.&amp;quot; Cited from official website.&lt;br /&gt;
* wget&lt;br /&gt;
&lt;br /&gt;
== Code Validators (驗證工具) ==&lt;br /&gt;
&lt;br /&gt;
{{Validator}}&lt;br /&gt;
&lt;br /&gt;
== Serverside RSS Agregator ==&lt;br /&gt;
[http://www.bloglines.com Bloglines], [http://www.pubsub.com/ PubSub.com RSS reader], [http://www.breakingblogs.com/timbo_bot.html timboBot], [http://magpierss.sf.net MagpieRSS], &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Some data came from http://www.siteware.ch/webresources/useragents/&lt;br /&gt;
* [http://blog.miniasp.com/post/2009/12/Useful-website-UserAgentString.aspx 介紹好用網站：UserAgentString.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further readings ==&lt;br /&gt;
* [https://developer.chrome.com/blog/user-agent-reduction-android-model-and-version/ Prepare for Chrome&#039;s user‑agent reduction - Chrome Developers]&lt;br /&gt;
&lt;br /&gt;
[[Category: Programming]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Xpath_tools&amp;diff=26390</id>
		<title>Xpath tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Xpath_tools&amp;diff=26390"/>
		<updated>2026-06-23T05:55:40Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of tools for xpath expression selection/query&lt;br /&gt;
&lt;br /&gt;
== Comparison of xpath tools ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1 class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Method&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Pros&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Cons&amp;lt;/th&amp;gt; &lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;chrome extension [https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl XPath Helper]&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;worked on online webpage&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;NOT work on offline file&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Sublime [https://packagecontrol.io/packages/xpath xpath] plugin&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;worked on offline file&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;NOT work on online webpage&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Browser Console ==&lt;br /&gt;
&lt;br /&gt;
=== List matched elements by XPath rule ===&lt;br /&gt;
&lt;br /&gt;
Open the browser console in {{chrome}} or {{Edge}}:&lt;br /&gt;
&lt;br /&gt;
# Menu: Tools → Developer Tools → Console&lt;br /&gt;
# To verify elements matching an XPath rule, type the expression using $x(). For example, to find all images, enter {{kbd | key = &amp;lt;nowiki&amp;gt;$x(&amp;quot;//img&amp;quot;)&amp;lt;/nowiki&amp;gt;}} and press Enter. The matched elements will be listed in the console&amp;lt;ref&amp;gt;[http://stackoverflow.com/questions/3030487/is-there-a-way-to-get-the-xpath-in-google-chrome Is there a way to get the xpath in google chrome? - Stack Overflow]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://yizeng.me/2014/03/23/evaluate-and-validate-xpath-css-selectors-in-chrome-developer-tools/ Evaluate and validate XPath/CSS selectors in Chrome Developer Tools | Yi Zeng&#039;s Blog]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
https://planetoid.info/images/xpath_result_on_browser_console.jpg&lt;br /&gt;
&lt;br /&gt;
To extract and display the text content of matched elements — cleaned and separated by newlines — use the snippet below. The example uses XPath rule {{kbd | key = &amp;lt;nowiki&amp;gt;//div[@id=&amp;quot;showvender&amp;quot;]/a&amp;lt;/nowiki&amp;gt;}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Use document.evaluate to retrieve all matching elements&lt;br /&gt;
const result = document.evaluate(&#039;//div[@id=&amp;quot;showvender&amp;quot;]/a&#039;, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);&lt;br /&gt;
&lt;br /&gt;
// Collect text content from each element&lt;br /&gt;
const textArray = [];&lt;br /&gt;
for (let i = 0; i &amp;lt; result.snapshotLength; i++) {&lt;br /&gt;
    const element = result.snapshotItem(i);&lt;br /&gt;
    // Strip newlines and trim whitespace&lt;br /&gt;
    const cleanedText = element.textContent.replace(/[\n\r]+/g, &#039;&#039;).trim();&lt;br /&gt;
    textArray.push(cleanedText);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Print all results, one per line&lt;br /&gt;
console.log(textArray.join(&#039;\n&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List matched elements by CSS selector ===&lt;br /&gt;
&lt;br /&gt;
To quickly list all elements matching a CSS selector, use {{kbd | key = &amp;lt;nowiki&amp;gt;$$(&amp;quot;css-selector&amp;quot;)&amp;lt;/nowiki&amp;gt;}} in the console. For example, to find all images, enter {{kbd | key = &amp;lt;nowiki&amp;gt;$$(&amp;quot;img&amp;quot;)&amp;lt;/nowiki&amp;gt;}} and press Enter. The matched elements will be listed in the console.&lt;br /&gt;
&lt;br /&gt;
To extract and display the text content of matched elements — cleaned and separated by newlines — use the snippet below. The example uses CSS selector {{kbd | key = &amp;lt;nowiki&amp;gt;div#showvender a&amp;lt;/nowiki&amp;gt;}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Use querySelectorAll to retrieve all matching elements&lt;br /&gt;
const elements = document.querySelectorAll(&#039;div#showvender a&#039;);&lt;br /&gt;
&lt;br /&gt;
// Collect text content from each element&lt;br /&gt;
const textArray = [];&lt;br /&gt;
elements.forEach(el =&amp;gt; {&lt;br /&gt;
    // Strip newlines and trim whitespace&lt;br /&gt;
    const cleanedText = el.textContent.replace(/[\n\r]+/g, &#039;&#039;).trim();&lt;br /&gt;
    textArray.push(cleanedText);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// Print all results, one per line&lt;br /&gt;
console.log(textArray.join(&#039;\n&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Highlight matched elements by XPath rule ===&lt;br /&gt;
&lt;br /&gt;
By XPath rule:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const xpath = &#039;//main[contains(@class, &amp;quot;htmlview&amp;quot;) and @data-cat=&amp;quot;article&amp;quot;]&#039;;&lt;br /&gt;
&lt;br /&gt;
// Helper: resolve XPath to an array of elements&lt;br /&gt;
function $x(xpath) {&lt;br /&gt;
  const result = document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);&lt;br /&gt;
  return Array.from({ length: result.snapshotLength }, (_, i) =&amp;gt; result.snapshotItem(i));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Scroll to the first matched element&lt;br /&gt;
$x(xpath)[0]?.scrollIntoView();&lt;br /&gt;
&lt;br /&gt;
// Highlight all matched elements with a red outline&lt;br /&gt;
$x(xpath).forEach(el =&amp;gt; {&lt;br /&gt;
  el.style.outline = &#039;3px solid red&#039;;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Highlight matched elements by CSS selector ===&lt;br /&gt;
&lt;br /&gt;
By CSS selector:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const cssSelector = &amp;quot;main.htmlview[data-cat=&#039;article&#039;]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Scroll to the first matched element&lt;br /&gt;
document.querySelector(cssSelector)?.scrollIntoView();&lt;br /&gt;
&lt;br /&gt;
// Highlight all matched elements with a red outline&lt;br /&gt;
document.querySelectorAll(cssSelector).forEach(el =&amp;gt; {&lt;br /&gt;
  el.style.outline = &#039;3px solid red&#039;;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XPath Browser extensions ==&lt;br /&gt;
[https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl XPath Helper] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
# 不支援 {{kbd | key=&amp;lt;nowiki&amp;gt;file:///&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
# 輸入 ctrl + shift + x 或點選工具列上的 x 圖示，開啟 XPath Helper console (顯示在網頁上方)&lt;br /&gt;
# 輸入 xpath 規則。就會凸顯符合 xpath 規則的網頁元件地方&lt;br /&gt;
: https://planetoid.info/images/xpath_helper.jpg&lt;br /&gt;
&lt;br /&gt;
[https://chrome.google.com/webstore/detail/selectorshub/ndgimibanhlabgdgjcpbbndiehljcpfh SelectorsHub] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
# After adding it to browser, restart the browser. 安裝後，重新啟動瀏覽器&lt;br /&gt;
# Open DevTools. 打開「開發人員工具」&lt;br /&gt;
# Click on SelectorsHub tab. 點選「元素」標籤，再點選最右邊的「SelectorsHub」&lt;br /&gt;
# Here it will show all possible xpath, selectors for inspected element. &lt;br /&gt;
# To build  your own xpath or CSS Selector, start typing in the selector input box.&lt;br /&gt;
&lt;br /&gt;
[https://chrome.google.com/webstore/detail/natu-websync/aohpgnblncapofbobbilnlfliihianac/related Natu WebSync - Chrome 線上應用程式商店] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
# 開啟「開發人員工具」&lt;br /&gt;
# 點選標籤「WebSync」-&amp;gt; 輸入 xpath 規則&lt;br /&gt;
&lt;br /&gt;
[https://chrome.google.com/webstore/detail/css-selector/dobcgekgcmhjmfahepgbpmiaejlpaalc CSS Selector][https://css-selector-gadget.dllplayer.com/welcome] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
* 直接點選網頁元素，則顯示 CSS Selector。點選 xpath 按鈕則顯示 xpath 路徑。&lt;br /&gt;
&lt;br /&gt;
[https://addons.mozilla.org/zh-TW/firefox/addon/firebug/ Firebug] + [https://addons.mozilla.org/zh-TW/firefox/addon/firepath/ FirePath] for {{Fx}}&lt;br /&gt;
# 選單: 工具 --&amp;gt; 網頁開發者 --&amp;gt; Firebug --&amp;gt; 開啟 Firebug&lt;br /&gt;
# 切換到 FirePath 標籤&lt;br /&gt;
# 輸入 xpath 規則。就會凸顯符合 xpath 規則的網頁元件地方&lt;br /&gt;
&lt;br /&gt;
== Sublime text editor ==&lt;br /&gt;
[https://packagecontrol.io/packages/xpath xpath] plugin: &amp;quot;[https://www.sublimetext.com/ Sublime Text] plugin for easier cursor navigation of XML and HTML files using XPath 1.0.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Steps&lt;br /&gt;
# Open the Command Palette&lt;br /&gt;
#* Menu: Tools -&amp;gt; Command Palette&lt;br /&gt;
#* or press the keyboard shortcut&amp;lt;ref&amp;gt;[https://stackoverflow.com/questions/45586508/sublime-text-xpath-plugin-shortcut sublimetext3 - Sublime Text - XPath Plugin shortcut - Stack Overflow]&amp;lt;/ref&amp;gt;: {{kbd | key=ctrl + shift + p}} on {{Win}} or {{kbd | key=command + shift + p}} on {{Mac}})&lt;br /&gt;
# and select {{kbd | key=Xpath: Query document}}&lt;br /&gt;
# input the Xpath expression&lt;br /&gt;
&lt;br /&gt;
== Other tools ==&lt;br /&gt;
* [https://xpath.curiousconcept.com/ XPath Expression Tester] for XML {{access | date=2020-06-09}}&lt;br /&gt;
* [https://www.freeformatter.com/xpath-tester.html Free Online XPath Tester / Evaluator] for XML {{access | date=2020-06-09}}&lt;br /&gt;
* [http://xpather.com/ XPath online real-time tester, evaluator and generator for XML &amp;amp; HTML] {{access | date=2023-03-22}}&lt;br /&gt;
&lt;br /&gt;
== Xpath syntax examples ==&lt;br /&gt;
* SVG {{kbd | key=&amp;lt;nowiki&amp;gt;//*[local-name() = &#039;svg&#039;]&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* SVG elements {{kbd | key=&amp;lt;nowiki&amp;gt;//*[name()=&#039;svg&#039;]//*[name()=&#039;YOUR OBJECT&#039;]&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[https://stackoverflow.com/questions/31520642/how-to-use-xpath-in-selenium-webdriver-to-grab-svg-elements java - How to use xPath in Selenium WebDriver to grab SVG elements? - Stack Overflow]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* References&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Related articles&lt;br /&gt;
&lt;br /&gt;
* [https://devhints.io/xpath Xpath cheatsheet]&lt;br /&gt;
&lt;br /&gt;
{{Template:Troubleshooting}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Programming]]&lt;br /&gt;
[[Category: Web_Dev]] &lt;br /&gt;
[[Category: Javascript]]&lt;br /&gt;
[[Category: Data collecting]]&lt;br /&gt;
[[Category: Revised with LLMs]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
	<entry>
		<id>https://wiki.planetoid.info/index.php?title=Xpath_tools&amp;diff=26389</id>
		<title>Xpath tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.planetoid.info/index.php?title=Xpath_tools&amp;diff=26389"/>
		<updated>2026-06-23T05:54:33Z</updated>

		<summary type="html">&lt;p&gt;Planetoid: /* Browser console */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of tools for xpath expression selection/query&lt;br /&gt;
&lt;br /&gt;
== Comparison of xpath tools ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1 class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Method&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Pros&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Cons&amp;lt;/th&amp;gt; &lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;chrome extension [https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl XPath Helper]&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;worked on online webpage&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;NOT work on offline file&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Sublime [https://packagecontrol.io/packages/xpath xpath] plugin&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;worked on offline file&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;NOT work on online webpage&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Browser Console ==&lt;br /&gt;
&lt;br /&gt;
=== List matched elements by XPath rule ===&lt;br /&gt;
&lt;br /&gt;
Open the browser console in {{chrome}} or {{Edge}}:&lt;br /&gt;
&lt;br /&gt;
# Menu: Tools → Developer Tools → Console&lt;br /&gt;
# To verify elements matching an XPath rule, type the expression using $x(). For example, to find all images, enter {{kbd | key = &amp;lt;nowiki&amp;gt;$x(&amp;quot;//img&amp;quot;)&amp;lt;/nowiki&amp;gt;}} and press Enter. The matched elements will be listed in the console&amp;lt;ref&amp;gt;[http://stackoverflow.com/questions/3030487/is-there-a-way-to-get-the-xpath-in-google-chrome Is there a way to get the xpath in google chrome? - Stack Overflow]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://yizeng.me/2014/03/23/evaluate-and-validate-xpath-css-selectors-in-chrome-developer-tools/ Evaluate and validate XPath/CSS selectors in Chrome Developer Tools | Yi Zeng&#039;s Blog]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
https://planetoid.info/images/xpath_result_on_browser_console.jpg&lt;br /&gt;
&lt;br /&gt;
To extract and display the text content of matched elements — cleaned and separated by newlines — use the snippet below. The example uses XPath rule {{kbd | key = &amp;lt;nowiki&amp;gt;//div[@id=&amp;quot;showvender&amp;quot;]/a&amp;lt;/nowiki&amp;gt;}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Use document.evaluate to retrieve all matching elements&lt;br /&gt;
const result = document.evaluate(&#039;//div[@id=&amp;quot;showvender&amp;quot;]/a&#039;, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);&lt;br /&gt;
&lt;br /&gt;
// Collect text content from each element&lt;br /&gt;
const textArray = [];&lt;br /&gt;
for (let i = 0; i &amp;lt; result.snapshotLength; i++) {&lt;br /&gt;
    const element = result.snapshotItem(i);&lt;br /&gt;
    // Strip newlines and trim whitespace&lt;br /&gt;
    const cleanedText = element.textContent.replace(/[\n\r]+/g, &#039;&#039;).trim();&lt;br /&gt;
    textArray.push(cleanedText);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Print all results, one per line&lt;br /&gt;
console.log(textArray.join(&#039;\n&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== List matched elements by CSS selector ===&lt;br /&gt;
&lt;br /&gt;
To quickly list all elements matching a CSS selector, use {{kbd | key = &amp;lt;nowiki&amp;gt;$$(&amp;quot;css-selector&amp;quot;)&amp;lt;/nowiki&amp;gt;}} in the console. For example, to find all images, enter {{kbd | key = &amp;lt;nowiki&amp;gt;$$(&amp;quot;img&amp;quot;)&amp;lt;/nowiki&amp;gt;}} and press Enter. The matched elements will be listed in the console.&lt;br /&gt;
&lt;br /&gt;
To extract and display the text content of matched elements — cleaned and separated by newlines — use the snippet below. The example uses CSS selector {{kbd | key = &amp;lt;nowiki&amp;gt;div#showvender a&amp;lt;/nowiki&amp;gt;}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Use querySelectorAll to retrieve all matching elements&lt;br /&gt;
const elements = document.querySelectorAll(&#039;div#showvender a&#039;);&lt;br /&gt;
&lt;br /&gt;
// Collect text content from each element&lt;br /&gt;
const textArray = [];&lt;br /&gt;
elements.forEach(el =&amp;gt; {&lt;br /&gt;
    // Strip newlines and trim whitespace&lt;br /&gt;
    const cleanedText = el.textContent.replace(/[\n\r]+/g, &#039;&#039;).trim();&lt;br /&gt;
    textArray.push(cleanedText);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
// Print all results, one per line&lt;br /&gt;
console.log(textArray.join(&#039;\n&#039;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Highlight matched elements by XPath rule ===&lt;br /&gt;
&lt;br /&gt;
By XPath rule:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const xpath = &#039;//main[contains(@class, &amp;quot;htmlview&amp;quot;) and @data-cat=&amp;quot;article&amp;quot;]&#039;;&lt;br /&gt;
&lt;br /&gt;
// Helper: resolve XPath to an array of elements&lt;br /&gt;
function $x(xpath) {&lt;br /&gt;
  const result = document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);&lt;br /&gt;
  return Array.from({ length: result.snapshotLength }, (_, i) =&amp;gt; result.snapshotItem(i));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Scroll to the first matched element&lt;br /&gt;
$x(xpath)[0]?.scrollIntoView();&lt;br /&gt;
&lt;br /&gt;
// Highlight all matched elements with a red outline&lt;br /&gt;
$x(xpath).forEach(el =&amp;gt; {&lt;br /&gt;
  el.style.outline = &#039;3px solid red&#039;;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Highlight matched elements by CSS selector ===&lt;br /&gt;
&lt;br /&gt;
By CSS selector:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const cssSelector = &amp;quot;main.htmlview[data-cat=&#039;article&#039;]&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Scroll to the first matched element&lt;br /&gt;
document.querySelector(cssSelector)?.scrollIntoView();&lt;br /&gt;
&lt;br /&gt;
// Highlight all matched elements with a red outline&lt;br /&gt;
document.querySelectorAll(cssSelector).forEach(el =&amp;gt; {&lt;br /&gt;
  el.style.outline = &#039;3px solid red&#039;;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XPath Browser extensions ==&lt;br /&gt;
[https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl XPath Helper] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
# 不支援 {{kbd | key=&amp;lt;nowiki&amp;gt;file:///&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
# 輸入 ctrl + shift + x 或點選工具列上的 x 圖示，開啟 XPath Helper console (顯示在網頁上方)&lt;br /&gt;
# 輸入 xpath 規則。就會凸顯符合 xpath 規則的網頁元件地方&lt;br /&gt;
: https://planetoid.info/images/xpath_helper.jpg&lt;br /&gt;
&lt;br /&gt;
[https://chrome.google.com/webstore/detail/selectorshub/ndgimibanhlabgdgjcpbbndiehljcpfh SelectorsHub] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
# After adding it to browser, restart the browser. 安裝後，重新啟動瀏覽器&lt;br /&gt;
# Open DevTools. 打開「開發人員工具」&lt;br /&gt;
# Click on SelectorsHub tab. 點選「元素」標籤，再點選最右邊的「SelectorsHub」&lt;br /&gt;
# Here it will show all possible xpath, selectors for inspected element. &lt;br /&gt;
# To build  your own xpath or CSS Selector, start typing in the selector input box.&lt;br /&gt;
&lt;br /&gt;
[https://chrome.google.com/webstore/detail/natu-websync/aohpgnblncapofbobbilnlfliihianac/related Natu WebSync - Chrome 線上應用程式商店] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
# 開啟「開發人員工具」&lt;br /&gt;
# 點選標籤「WebSync」-&amp;gt; 輸入 xpath 規則&lt;br /&gt;
&lt;br /&gt;
[https://chrome.google.com/webstore/detail/css-selector/dobcgekgcmhjmfahepgbpmiaejlpaalc CSS Selector][https://css-selector-gadget.dllplayer.com/welcome] for {{Chrome}}&lt;br /&gt;
&lt;br /&gt;
* 直接點選網頁元素，則顯示 CSS Selector。點選 xpath 按鈕則顯示 xpath 路徑。&lt;br /&gt;
&lt;br /&gt;
[https://addons.mozilla.org/zh-TW/firefox/addon/firebug/ Firebug] + [https://addons.mozilla.org/zh-TW/firefox/addon/firepath/ FirePath] for {{Fx}}&lt;br /&gt;
# 選單: 工具 --&amp;gt; 網頁開發者 --&amp;gt; Firebug --&amp;gt; 開啟 Firebug&lt;br /&gt;
# 切換到 FirePath 標籤&lt;br /&gt;
# 輸入 xpath 規則。就會凸顯符合 xpath 規則的網頁元件地方&lt;br /&gt;
&lt;br /&gt;
== Sublime text editor ==&lt;br /&gt;
[https://packagecontrol.io/packages/xpath xpath] plugin: &amp;quot;[https://www.sublimetext.com/ Sublime Text] plugin for easier cursor navigation of XML and HTML files using XPath 1.0.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Steps&lt;br /&gt;
# Open the Command Palette&lt;br /&gt;
#* Menu: Tools -&amp;gt; Command Palette&lt;br /&gt;
#* or press the keyboard shortcut&amp;lt;ref&amp;gt;[https://stackoverflow.com/questions/45586508/sublime-text-xpath-plugin-shortcut sublimetext3 - Sublime Text - XPath Plugin shortcut - Stack Overflow]&amp;lt;/ref&amp;gt;: {{kbd | key=ctrl + shift + p}} on {{Win}} or {{kbd | key=command + shift + p}} on {{Mac}})&lt;br /&gt;
# and select {{kbd | key=Xpath: Query document}}&lt;br /&gt;
# input the Xpath expression&lt;br /&gt;
&lt;br /&gt;
== Other tools ==&lt;br /&gt;
* [https://xpath.curiousconcept.com/ XPath Expression Tester] for XML {{access | date=2020-06-09}}&lt;br /&gt;
* [https://www.freeformatter.com/xpath-tester.html Free Online XPath Tester / Evaluator] for XML {{access | date=2020-06-09}}&lt;br /&gt;
* [http://xpather.com/ XPath online real-time tester, evaluator and generator for XML &amp;amp; HTML] {{access | date=2023-03-22}}&lt;br /&gt;
&lt;br /&gt;
== Xpath syntax examples ==&lt;br /&gt;
* SVG {{kbd | key=&amp;lt;nowiki&amp;gt;//*[local-name() = &#039;svg&#039;]&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
* SVG elements {{kbd | key=&amp;lt;nowiki&amp;gt;//*[name()=&#039;svg&#039;]//*[name()=&#039;YOUR OBJECT&#039;]&amp;lt;/nowiki&amp;gt;}} &amp;lt;ref&amp;gt;[https://stackoverflow.com/questions/31520642/how-to-use-xpath-in-selenium-webdriver-to-grab-svg-elements java - How to use xPath in Selenium WebDriver to grab SVG elements? - Stack Overflow]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* References&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Related articles&lt;br /&gt;
&lt;br /&gt;
* [https://devhints.io/xpath Xpath cheatsheet]&lt;br /&gt;
&lt;br /&gt;
{{Template:Troubleshooting}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming]]&lt;br /&gt;
[[Category:Web_Dev]] &lt;br /&gt;
[[Category:Javascript]]&lt;br /&gt;
[[Category:Data collecting]]&lt;/div&gt;</summary>
		<author><name>Planetoid</name></author>
	</entry>
</feed>