2100年12月31日 星期五

vim 小技巧篇

vim 小技巧篇

*: VIM 多行註解

1. vim加上多行註解的步驟:

(1) 將游標移到要開始註解的那一列。
(2) 按下ESC、然後按下Ctrl + V ,切換成區塊選取的模式(就是反白啦)。
(3) 將游標向下移到要加上註解的最後一列,此時你可以發現這幾列都被反白了。
(4) 按下大寫I,游標跑回步驟(2)的那一列了,這時就可以直接輸入要用的註解了,假設輸入'//'。
(5) 按下ESC,大功告成。
(6) 千萬不要忘記步驟(5)。

2. vim 取消多行註解的步驟:

(1) 方法和加上多行註解一樣,先將游標移到開始註解的那一列。
(2) 按下ESC、然後按下Ctrl + V ,切換成區塊選取的模式。
(3) 將游標向下移到要加上註解的最後一列,再按左、右的方向鍵,將要delete掉的註解都反白。
(4) 按下delete,大功告成。



vim study 指令基本篇



========== command mode ==========
insert mode
由 command mode 進入 insert mode 有六個常用的按鍵: i I a A o O
i     Insert text before the cursor 
I     Insert text Before the first non-blank in the line 
a     Append text after the cursor
A     Append text at the end of the line
o     Begin a new line below the cursor and insert text 

O     Begin a new line above the cursor and insert text (並把文字往下推一行) 



2022年4月13日 星期三

linux ubuntu 16.04 install docker

REF:https://docs.docker.com/engine/install/ubuntu/
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
 echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 sudo apt-get update
 sudo apt-get install docker-ce docker-ce-cli containerd.io


在ubuntu 1604上遇到了一些安裝的問題

dockerd[21814]: failed to start daemon: error initializing graphdriver: /var/lib/docker contains several valid graphdrivers: overlay2, aufs; Please cleanup or explicitly choose storage driver (-s <DRIVER>)


參考以下解決
https://stackoverflow.com/questions/45103803/not-able-to-start-docker-on-ubuntu-16-04-2-lts-error-initializing-graphdriver

17

I did some research and I found the answer. I was able to fix the issue by using the overlay2 as storage driver. I followed the below link for that: https://docs.docker.com/engine/userguide/storagedriver/overlayfs-driver/

I took the followins steps to fix the issue:

  1. Stop Docker.

    sudo systemctl stop docker
    
  2. Copy the contents of /var/lib/docker to a temporary location.

    cp -au /var/lib/docker /var/lib/docker.bk
    
  3. Edit /etc/docker/daemon.json. If it doesn't exist yet: create it. Assuming that the file was empty, add the following contents:

    {
      "storage-driver": "overlay2"
    }
    
  4. Start Docker.

    sudo systemctl start docker
    
  5. Verify that the daemon is using the overlay/overlay2 storage driver.

    sudo docker info
    

After this I was able to run docker container on my "16.04.2 LTS (Xenial Xerus)"

sudo docker run -dit ubuntu

ubuntu 更換 apt-get update 的台灣資料庫


 https://www.ubuntu-tw.org/modules/newbb/viewtopic.php?post_id=218626


2020年12月1日 星期二

2020年1月8日 星期三

ebtable staudy


ebtables

默認有三個Table (filter,nat,broute)

filter 內建三個chain:INPUT/OUTPUT/FORWARD

nat 內建三個chain:PREROUTING/OUTPUT/POSTROUTING

broute內建一個chain : BROUTING



*顯示table

ebtables [-t filter] -L 顯示filter table的內容,默認也是顯示該table

ebtables -t broute -L 顯示broute table的內容

ebtables -t nat -L 顯示nat table的內容



增加一個chain

ebtables -t filter -N newChain -P ACCEPT



但此時不會有封包走到此chain,須將 chain 加到 linux 內建的 hook chain上

ebtables -t filter -A INPUT -j newChain 


ebtables -t filter -L

Bridge chain: INPUT, entries: 1, policy: ACCEPT

-j newChain 



ebtables [-t table ] -[ACDI] chain rule specification [match extensions] [watcher extensions] target    // append, delete, change-counters, insert

ebtables [-t table ] -P chain ACCEPT | DROP | RETURN                                                                      // policy, Set the policy for the chain to the given target

ebtables [-t table ] -F [chain]                                                                                                           // flush, Flush the selected chain

ebtables [-t table ] -Z [chain]                                                                                                           // zero, Set the counters of the selected chain to zero

ebtables [-t table ] -L [-Z] [chain] [ [--Ln] | [--Lx] ] [--Lc] [--Lmac2]                                                  // list, List all rules in the selected chain. If no chain is selected, all chains are listed.

                              // -L -Z , When both the -Z and -L commands are used together in this way, the rule counters are printed on the screen before they are set to zero.

                              // -L --Ln, Shows the counters at the end of each rule displayed by the -L command.

ebtables [-t table ] -N chain [-P ACCEPT | DROP | RETURN]                                                               // new-chain

ebtables [-t table ] -X [chain]                                                                                                           // delete-chain

ebtables [-t table ] -E old-chain-name new-chain-name                                                                    // rename-chain

ebtables [-t table ] --init-table                                                                                                         // Replace the current table data by the initial table data

ebtables [-t table ] [--atomic-file file] --atomic-commit

ebtables [-t table ] [--atomic-file file] --atomic-init

ebtables [-t table ] [--atomic-file file] --atomic-save





ebtables [-t table ] -[ACDI] chain rule specification [match extensions] [watcher extensions] target

ebtables [-t table ] -P chain ACCEPT | DROP | RETURN

ebtables [-t table ] -F [chain]

ebtables [-t table ] -Z [chain]

ebtables [-t table ] -L [-Z] [chain] [ [--Ln] | [--Lx] ] [--Lc] [--Lmac2]

ebtables [-t table ] -N chain [-P ACCEPT | DROP | RETURN]

ebtables [-t table ] -X [chain]

ebtables [-t table ] -E old-chain-name new-chain-name

ebtables [-t table ] --init-table

ebtables [-t table ] [--atomic-file file] --atomic-commit

ebtables [-t table ] [--atomic-file file] --atomic-init

ebtables [-t table ] [--atomic-file file] --atomic-save




2019年6月26日 星期三

Win10 快捷整理

切換窗口(不是新的,但任務切換介面改進):
Alt+Tab


WIN 鍵

Win10新增的功能快捷鍵:

*貼靠窗口(窗口可以變為 1/4 大小放置在螢幕 4 個角落)
Win+←:最大化窗口到左側的螢幕上(與開始螢幕應用無關)

Win + →:最大化窗口到右側的螢幕上(與開始螢幕應用無關)

Win+ ↑:最大化窗口(與開始螢幕應用無關)

Win+ ↓:最小化窗口(與開始螢幕應用無關)

Win+ SHIFT +↑:垂直拉伸窗口,寬度不變(與開始螢幕應用無關)

Win+ SHIFT +↓:垂直縮小窗口,寬度不變(與開始螢幕應用無關)

Win+SHIFT+←:將活動窗口移至左側顯示器 (與開始螢幕應用無關)

Win+SHIFT+→:將活動窗口移至右側顯示器(與開始螢幕應用無關)


*任務視圖(鬆開鍵盤介面不會消失):
Win+Tab


*創建新的虛擬桌面:
Win+Ctrl+D

*關閉當前虛擬桌面:
Win+Ctrl+F4

*切換虛擬桌面:
Win+Ctrl+左/右


Win+P:投影多螢幕設定

Win+ Home:最小化所有窗口,第二次鍵擊恢復窗口(不恢復開始螢幕應用)

Win+ 數字鍵:打開或切換位於任務欄指定位置的程序

Win+Shift+數字鍵:打開位於任務欄指定位置程序的新實例

Win+B:光標移至通知區域

Win+D:顯示桌面,第二次鍵擊恢復桌面 (不恢復開始螢幕應用)

Win+E:打開我的電腦

Win+G:遊戲列

Win+L:鎖住電腦或切換用戶

Win+M:最小化所有窗口

Win+Shift+M:在桌面恢復所有最小化窗口(不恢復開始螢幕應用)

Win+R:打開「運行」對話框

Win+T:切換任務欄上的程序

Win+S:搜尋程式

Win+空格鍵:切換輸入語言和鍵盤布局

Win+,:臨時查看桌面

Win+I:打開設置欄

Win+K:打開無線連接顯示屏

Win+Tab:循環切換應用


Win+/:恢復默認輸入法

Win+J:顯示之前操作的應用

Win+X:快捷菜單


Ctrl+Shift+Esc:打開任務管理器(工作管理員)

Ctrl+A 全選

Ctrl+C(或 Ctrl+Insert) 複製選擇的項目

Ctrl+X 剪切選擇的項目

Ctrl+V(或 Shift+Insert) 粘貼選擇的項目

Ctrl+Z 撤消操作

Ctrl+Y 重新執行某項操作

Ctrl+向右鍵 將光標移動到下一個字詞的起始處

Ctrl+向左鍵 將光標移動到上一個字詞的起始處

Ctrl+向下鍵 將光標移動到下一個段落的起始處

Ctrl+向上鍵 將光標移動到上一個段落的起始處

Ctrl+Shift 加某個箭頭鍵 選擇一塊文本

Shift 加任意箭頭鍵 在窗口中或桌面上選擇多個項目,或者在文檔中選擇文本

Ctrl 加任意箭頭鍵+空格鍵 選擇窗口中或桌面上的多個單個項目

Ctrl+A 選擇文檔或窗口中的所有項目


Alt+F4 關閉活動項目或者退出活動程序

Alt+空格鍵 為活動窗口打開快捷方式菜單

Ctrl+F4 關閉活動文檔(在允許同時打開多個文檔的程序中)

Ctrl+Alt+Tab 使用箭頭鍵在打開的項目之間切換

Ctrl+滑鼠滾輪 更改桌面上的圖標大小

Win鍵 + Tab 使用 Aero Flip 3-D 循環切換任務欄上的程序

Ctrl + Win鍵 + Tab 通過 Aero Flip 3-D 使用箭頭鍵循環切換任務欄上的程序

Alt+Esc 以項目打開的順序循環切換項目

Win10常用Win快捷鍵:

Win鍵桌面與開始菜單切換按鍵

Ctrl+Alt+Del快速打開任務管理器

Alt+F4關機快捷鍵



Alt+Enter 顯示所選項的屬性

Alt+F4 關閉活動項目或者退出活動程序

Alt+空格鍵 為活動窗口打開快捷方法菜單

Ctrl+F4 關閉活動文檔(在允許同時打開多個文檔的程序中)


F5 刷新活動窗口


Esc 取消當前任務

Ctrl+Shift+Esc 打開任務管理器

插入 CD 時按住 Shift 阻止 CD 自動播放

文本類對話框類快捷鍵:

Ctrl+Tab 在選項卡上向後移動

Ctrl+Shift+Tab 在選項卡上向前移動

Tab 在選項上向前移動

Shift+Tab 在選項上向後移動

Alt+Tab 多任務窗口切換

Win + Tab 帶有3D效果的多任務窗口切換 (Win7旗艦版、專業版可用)

Win +Ctrl+ Tab 帶有3D效果的多任務窗口切換(Win7旗艦版、專業版可用)

Alt+加下劃線的字母 執行與該字母匹配的命令(或選擇選項)

Enter 對於許多選定命令代替單擊滑鼠

空格鍵 如果活動選項是複選框,則選中或清除該複選框

箭頭鍵 如果活動選項是一組選項按鈕,則選擇某個按鈕