2021-01-28 / JSN / 0 Comments / 382 次瀏覽
我這邊在主機有多個使用者,每個人都要切換到使用者 ubuntu 下達 docker 相關指令。以下示範由我的帳號是 cary 切換到內建使用者 ubuntu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
sudo su ubuntu // 位在群組 docker 如果直接下 docker-compose 會出現權限不夠 docker-compose ps // 查看自己目前的 group 有在哪些群組裡,如果沒有 docker id $USER //uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(lxd),114(netdev) // 那就下這行把自己的群組加入 docker sudo usermod -aG docker $USER // 再次確認群組已經加入了 docker id $USER // uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(lxd),114(netdev),116(docker) // 接著離開再登入 ubuntu exit sudo su ubuntu // 這樣就可以不需要 sudo 了 docker-compose ps |
2021-01-28 / JSN / 0 Comments / 43 次瀏覽
最近在 docker (laradock) 切進去 linux 的時候,預設是 root,呈現出來的視窗是黑白,沒有上色
要讓 terminal 的 command 可以呈現繽紛色彩我使用以下方法
|
printenv // 搜尋關鍵字 TERM 等好的後面文字,例如我的是 TERM=xterm // 那就複製 "xterm",要注意,我的電腦是 xterm 但每台電腦可能會不一樣,像我另外一個 docker 內的 linux 是顯示 "xterm-256color" |
接著我們執行
|
// 搜尋 case "$TERM" in 找到如 case "$TERM" in xterm-color) color_prompt=yes;; // 把剛剛複製的 "xterm" 加入符號 | 並貼到符號 | 的後面,修改如下 case "$TERM" in xterm-color|xterm) color_prompt=yes;; |
|
// 搜尋 "$color_prompt" 找到如 if [ "$color_prompt" = yes ]; then PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' // 修改為 if [ "$color_prompt" = yes ]; then PS1='${debian_chroot:+($debian_chroot)}\[\033[31m\]\u\[\033[00m\]@\[\033[01;32m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]# ' |
以上存擋後,下指令
就會有色彩出現了
2020-09-15 / JSN / 0 Comments / 84 次瀏覽
最近在接 wordpress 的文章,要顯示在 RSS,但遇到文字之間出現 “\x08” 造成 RSS 格式錯誤,可使用這種方式過濾掉 ASCII
|
/** * 移除 ascii 由 wordpress 產生的問題,造成 RSS 無法讀取 {@see https://xilou.info/p/121} * * @param $text * @return string|string[]|null */ public function removeAscii($text) { return preg_replace('/[\x00-\x08\x0b-\x0c\x0e-\x1f]/','', $text); } |
2020-05-27 / JSN / 0 Comments / 10,089 次瀏覽
Node.js 有兩種方法,一種透過 nvm 一種透過 n:
第一種 nvm
連同 NPM 一起更新到該版本預設
|
// 指定版本號 nvm install {version} // 若要最後一版 lastest nvm install node // 看所有安裝的列表 nvm ls // 替換到某個版本 nvm use {version} |
第二種 n
|
npm cache clean -f npm install -g n // 若要更新到最後一個版本 n latest // 若要更新到穩定版本 n stable // 檢查一下 node -v |
NPM 更新
參考網友文章
2020-05-12 / JSN / 0 Comments / 431 次瀏覽
以下介紹兩種方法都可以達到目的
方法一、在類別的方法使用 NULL
|
Interface MemberInterface { public function getName(); } |
|
class Member implements MemberInterface { public function () { return "Cary"; } } |
如果希望在 getName() 的時候修改回傳 “A001 – Cary”,那麼可以在方法帶入的參數使用預設值 null 來符合介面定義,修改如下
|
class Member implements MemberInterface { public function getName($id = null) { return "{$id} - Cary"; } } |
|
$member = new Member(); echo $member->getName("A001"); |
方法二、透過 Setter
保持介面定義的方法樣式,但為了填入參數,我們必須要製作另外一個方法來寫入類別屬性,例如修改為
|
class Member implements MemberInterface { public function setId($id) { $this->id = $id; } public function getName() { $id = $this->id; return "{$id} - Cary"; } } |
|
$member = new Member(); $member->setId("A001"); echo $member->getName(); |
比較兩者
方法一,適合用在 只定義方法名稱 但不定義寫入的參數要長甚麼樣子。因為都直接定義在類別的方法中,因此比較一目了然。
|
$memberA = new MemberA(); $memberA->getName("A001"); // 接手人 A 可能這樣寫,結果一個禮拜後離職 $memberB = new MemberB(); $memberB->getName("B001"); // 外包商接手人 B,參考 A 很直覺得會使用這種方法 |
方法二,因為 setId() 方法並沒有定義在 Interface,是依照各個類別自行應用。在不同類別,要使用 getName() 的時候,需要使用的寫法可能會不一樣。
|
$memberA = new MemberA(); $memberA->setId("A001"); // 接手人 A 可能這樣寫,結果一個禮拜後離職 echo $memberA->getName(); $memberB = new MemberB(); $memberB->setUserId("B001") // 外包商接手人 B 可能這樣寫,沒有依照 A 的命名樣式 echo $memberA->getName(); $memberC = new MemberC(); $memberC->id($id); // 接手人 C 可能剛學 PHP 一個月,接手處理這個問題 echo $memberC->getName(); // 接手人 D 整頓程式碼,就會 WTF ... |
不過,最怕的當然還是方法一、方法二的混用的狀況啦,因此定義 Interface 要實作 setter 與 getter,就很需要一些經驗了。