0%

5 Linux Shell Tricks

  • 1:04 sudo !! - re-run previous command with ‘sudo’ prepended
  • 1:53 ctrl-k, ctrl-u, ctrl-w, ctrl-y - cutting and pasting text in the command line
    • ctrl+k 刪除後面的文字
    • ctrl+u 刪除前面的文字
    • ctrl+y 貼上剛才刪除的文字
    • ctrl+w 刪除一個字 (word)
  • 4:04 use ‘less +F’ to view logfiles, instead of ‘tail’ (ctrl-c, shift-f, q to quit)
    • 在 less +F 的狀況下按下 ctrl+c 可以直接瀏覽檔案,就不用在 vim
    • shift+f 退出 ctrl+c 的環境
    • q 退出 less +F 的環境
  • 6:25 ctrl-x-e - continue editing your current shell line in a text editor (uses $EDITOR)
  • 7:54 alt-. - paste previous command’s argument (useful for running multiple commands on the same resource) 9:18 reset - resets/unborks your terminal

Sysvinit, UpStart, Systemd

什麼是 Init 系統,init 系統的歷史和現狀

  • Linux 操作系統的啟動首先從 BIOS 開始,接下來進入 boot loader,由 bootloader 載入內核,進行內核初始化。內核初始化的最後一步就是啟動 pid 為 1 的 init 進程。這個進程是系統的第一個進程。它負責產生其他所有用戶進程。
  • init 以守護進程方式存在,是所有其他進程的祖先。init 進程非常獨特,能夠完成其他進程無法完成的任務。
    • Init 系統能夠定義、管理和控制 init 進程的行為。它負責組織和運行許多獨立的或相關的始化工作(因此被稱為 init 系統),從而讓計算機系統進入某種用戶預訂的運行模式。
    • 大多數 Linux 發行版的 init 系統是和 System V 相兼容的,被稱為 sysvinit。這是人們最熟悉的 init 系統。
    • 其他的發行版如 Gentoo 是自己定製的。Ubuntu 和 RHEL 採用 upstart 替代了傳統的 sysvinit。
    • 而 Fedora 從版本 15 開始使用了一個被稱為 systemd 的新 init 系統。
  • 在 Linux 主要應用於服務器和 PC 機的時代,SysVinit 運行非常良好,概念簡單清晰。它主要依賴於 Shell 腳本,這就決定了它的最大弱點:啟動太慢。在很少重新啟動的 Server 上,這個缺點並不重要。
  • 而當 Linux 被應用到移動終端設備的時候,啟動慢就成了一個大問題。為了更快地啟動,人們開始改進 sysvinit,先後出現了 upstart 和 systemd 這兩個主要的新一代 init 系統。Upstart 已經開發了 8 年多,在不少系統中已經替換 sysvinit。Systemd 出現較晚,但發展更快,大有取代 upstart 的趨勢。
    閱讀全文 »

RAID

  • Redundant Array of Independent Disks

introduction

  • 透過多台硬碟堆疊成一台高容量使用的『虛擬磁碟』,而 RAID 核心技術就是『虛擬架構』

  • RAID 有一基本概念稱為EDAP (Extended Data Availability and Protection),其強調擴充性及容錯機制

    • 自動偵測故障硬碟 (RAID Auto Error Detection)
    • 重建故障硬碟的資料 (RAID Rebuild and Recovery)
    • 支援不需關機的硬碟備援 (RAID Hot Spare)
    • 支援不需關機的硬碟替換 (RAID Hot Swap)
    • 擴充硬碟容量等 (Raid Hot Expanding)
  • RAID 磁碟陣列的儲存原理是用 “Bit Striping“及目前主流 “Block Striping“的分割方式,將資料分散儲存至各硬碟中,當硬碟受損時則經由 XOR 運算,再將存在其他各硬碟內的 Parity Blocks 及 Data Stripe 磁區的 Data Blocks,進行計算而重建資料 Rebuild。

  • RAID把多個硬碟組合成為一個邏輯磁區,因此,作業系統只會把它當作一個硬碟。RAID常被用在伺服器電腦上,並且常使用完全相同的硬碟作為組合。由於硬碟價格的不斷下降與RAID功能更加有效地與主機板整合,它也成為玩家的一個選擇,特別是需要大容量儲存空間的工作,如:視訊與音訊製作。

    閱讀全文 »

Vuex

  • Vue + flux = vuex
  • 單向資料流
  • Flux design pettern
  • 統一管理應用程式所有狀態

introduction

  • 我們使用 vuex 官方流程圖來解釋:所有的動作都是從 action 出發,接著到了 store 把結果存起來改變 state 然後因為 state 改變了,所以 view(元件或頁面)就會跟著改變。
  • 只有一個重點,就是這一連串的行為是不可逆的,因此稱為:單向資料流

  • 在 Vuex 裡面,儲存狀態的為 State,組件需要更動狀態時,需要透過 Actions 發出一個 Commit 去呼叫 Mutations,再由 Mutations 去更改 State。整個 Vuex 的方法也稱為 store。接下來再來一一說明整個步驟流程。

閱讀全文 »

LDAP

什麼是LDAP?

  • LDAP的英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP。它是關於X.500標準的,但是簡單多了並且可以根據需要定制。與X.500不同,LDAP支持TCP/IP, 這對訪問Internet是必須的。LDAP的核心規範在RFC中都有定義,所有與LDAP相關的RFC都可以在LDAPman RFC網頁中找到。

  • LDAP根本不是資料庫而是用來訪問存儲在信息目錄(也就是LDAP目錄)中的信息的傳輸協定

  • LDAP傳輸協定是跨平台的和標準的傳輸協定,因此應用程式就不用為LDAP目錄放在什麼樣的伺服器上操心了。

    • 實際上,LDAP得到了業界的廣泛認可,因 為它是Internet的標準。產商都很願意在產品中加入對LDAP的支持,因為他們根本不用考慮另一端(客戶端或服務端)是怎麼樣的。
    • LDAP伺服器可 以是任何一個開發來源碼或商用的LDAP目錄伺服器(或者還可能是具有LDAP界面的關係型資料庫),因為可以用同樣的傳輸協定、客戶端連接軟體包和查詢 指令與LDAP伺服器進行交互。
  • LDAP伺服器可以用「推」或「拉」的方法複製部分或全部資料

    • 如果要在DBMS中使用相同的複製功能,資料庫產商就會要你支付額外的費用,而且也很難管理。
      閱讀全文 »

sqlite

type

  • NULL:標識一個NULL值
  • INTERGER:整數類型
  • REAL:浮點數
  • TEXT:字符串
  • BLOB:二進制數

    command

    basic

  • open a db

    • sqlite3 ${database.sqlite}
  • in sqlite mode

    • .tables will list tables
    • .schema [tablename] will show the CREATE statement(s) for a table or tables
      • .schema 查看所有表的創建語句
    • .dump, .dump table_name view the entire contents
    • select * from some_table;
      閱讀全文 »

.gitconfig

~/.gitconfig
git config --list

user, email

1
2
git config --global user.name "Lin Yun Wen"
git config --global user.email l40303k@gmail.com

ssh key

閱讀全文 »

Bash Script

Condition

  • if
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if [ expression ];
    # ^ ^ ^ please note these spaces
    then
    statement(s)
    fi

    if [ expression ] && [ expression_2 ]
    if [ expression ] || [ expression_2 ]
    # following if syntax is allowed. Please observe that the condition has double square brackets
    if [[ expression_1 && expression_2 || expression_3 ]];
    • -gt (greater than)
    • -lt (less than)
    • -eq (equal to)
    • -ne (not equal to)
      閱讀全文 »

GDB

Introduction

  • GDB 的全稱是 GNU Debuger

  • 在 gdb 裡,為了方便除錯,它將程式碼以副程式為單位分成一個個的區塊 (frame)。比如說,在上例裡的 main() 會被視為一個 frame,而 Password() 則會被視為另一個 frame

  • 在 frame 與 frame 之間,正在執行的區塊就是 frame 0。呼叫該區塊的就是 frame 1;而再上上一層的就叫 frame 2,以此類推。

  • 在 gdb 進入另一個 frame 之前,它會將該 frame 的一些變數值之類的儲存至堆疊 (stack) 裡,等到從 frame 回來後再從這些 stack 裡把這些變數值取回來。

閱讀全文 »

Coverity

Introduction

Coverity公司是由一流的斯坦福大学的科学家于2002年成立的,产品核心技术是1998年至2002年在斯坦福大学计算机系统实验室开发的,用于解决一个计算机科学领域最困难的问题,在2003年发布了第一个能够帮助Linux、FreeBSD等开源项目检测大量关键缺陷的系统。Coverity公司推出的综合开发测试平台,基于新一代的不做代码规则检查、只专注检测代码中的Bug静态分析技术,可以更好地帮助开发人员在写代码的时候就能发现并修复安全缺陷,缩短产品上市时间和降低风险。Coverity是唯一位列IDC前10名软件质量工具供应商的静态分析工具厂商,被VDC评为静态源代码分析领域的领导者。

閱讀全文 »