ubuntu & 指令

VIM Server

linux 發行版本
  • Ubuntu 同 Fedora 差不多,原本基於 Debian,更新方面類似 Fedora 的速度。桌面合用,伺服器用戶會嫌更新太密太急,支援期短(除非用LTS)。
  • Red Hat發展到9.0版之後,轉向純商業化模式,一般基於幾個月前的 Fedora 版本加以刪減不必要的軟件,做硬件、軟件兼容測試、認證的工作,以求穩定性,推出之後有收費的支援服務,一個版本會有7年的安全更新和修正。伺服器/工作站合用。
  • Fedora 是Red Hat間接提供免費的Linux發行版本(通常Fedora會先導入一些新技術,直到在 Fedora 測試成熟後,才移植到RHEL,意思是RH的測試場)。但更新快,有修正,產品周期短,一個版本只會有一年左右的更新和修正。  
  • CentOS 是 RHEL 的重制版本,沒有支援服務。由 RH 部分成員與強大社群開發的。通常會在RHEL改版後跟著發行新版。
  • Scientific 是由規模極大的CERN(歐洲核子研究組織)所維護。跟CentOS幾乎一樣,都是由RHEL Clone,另外提供了科學家所需要的相關計算工具。 
  • Gentoo呢,估計是性能最好的,因為他安裝超麻煩;據說他的理念就是,讓你明白Linux的每一樣東西是如何出來的!全部由你定製來決定。
  • FreeBSD是另外一種內核,不屬於Linux了,我們以前百步梯的服務器就是採用FreeBSD的了,據說是性能最強勁的。但內核不一樣,我們這次不敢嘗試。




    安裝 ubuntu server
    直接參考官方文獻 http://wiki.ubuntu-tw.org/index.php?title=Alternate_Install

    apache / lighttpd / nginx 三大開放WEB伺服器比較
    http://mike7120.blogspot.com/2011/02/apache-lighttpd-nginx-web.html

    tw ubuntu wiki
    http://wiki.ubuntu-tw.org


    開機流程與主要開機記錄區(MBR)
    • 簡單的說,整個開機流程到作業系統之前的動作應該是這樣的:
      1. BIOS:開機主動執行的韌體,會認識第一個可開機的裝置;
      2. MBR:第一個可開機裝置的第一個磁區內的主要開機記錄區塊,內含開機管理程式;
      3. 開機管理程式(boot loader):一支可讀取核心檔案來執行的軟體;
      4. 核心檔案:開始作業系統的功能...
    • 由上面的說明我們會知道,BIOS與MBR都是硬體本身會支援的功能,至於Boot loader則是作業系統安裝在MBR上面的一套軟體了。由於MBR僅有446 bytes而已,因此這個開機管理程式是非常小而美的。 這個boot loader的主要任務有底下這些項目:
      1. 提供選單:使用者可以選擇不同的開機項目,這也是多重開機的重要功能!
      2. 載入核心檔案:直接指向可開機的程式區段來開始作業系統;
      3. 轉交其他loader:將開機管理功能轉交給其他loader負責。

    為什麼人家常常說:『如果要安裝多重開機, 最好先安裝Windows再安裝Linux』呢?

    • Windows在安裝的時候,他的安裝程式會主動的覆蓋掉MBR以及自己所在分割槽的開機磁區,你沒有選擇的機會, Linux不會。那如果MBR被覆蓋掉怎辦?你只要用盡各種方法來處理MBR的內容即可。 例如利用全中文的spfdisk來管理,或Linux的救援模式來挽救MBR即可。

    ubuntu 系統目錄結構
    http://www.kume.idv.tw/read-161.html

    /bin ---- 目錄包含可供系統管理員和使用者使用的檔案命令。
    /boot ---- 目錄包含系統的核心(kernel)檔案,而且與開機有關的檔案也放在此目錄下。
    /dev ---- 目錄包含的檔案是有關於系統上任何一個硬體裝置或軟體裝置的資訊。例如:/dev/fd0 軟磁碟機資訊。
    /etc ---- 目錄包含子目錄,子目錄包含了大部份的系統設定檔。例如:/etc/mail 電郵系統及 /etc/httpd 網頁伺服器設定檔。
    /home ---- 目錄包含系統上使用者的家目錄。例如:/home/peter 或 /home/john 使用者。
    /lib ---- 目錄包含了共享系統檔、kernel 模組以及 lib 底下的子目錄。
    /mnt ---- 目錄包含外掛的裝置及檔案,預設為 cdrom 及 floppy 兩個目錄,一為讀取光碟機的檔案,另一為讀取軟碟機的檔案。我們亦可掛載 Windows 檔案於 /mnt 目錄下,例如:/mnt/windowsxp。
    /opt ---- 目錄用來保存安裝在系統上的應用程式。
    /proc ---- 目錄包含系統處理程序的資訊。
    /root ---- 目錄包含系統管理員的檔案。
    /sbin ---- 目錄包含專為系統管理員的執行檔。
    /tmp ---- 目錄用來存放系統的暫存檔。
    /usr ---- 目錄為存放使用者共享檔案及程式。例如:/usr/local 目錄為存放非系統預設的程式。
    /var ---- 目錄用來存放系統各樣的資訊檔,例如:系統的紀錄檔 log file 及列印檔。此外網頁伺服器預設的根目錄為 /var/www/html。


    硬碟設備代號

    • 在GNU/Linux 中的所有硬體設備都是可以看成是某個檔案來操作。平常只需要管針對那個檔案如何操作,至於那個檔案與實際硬體的對應,是由 kernel 負責。


    檔案系統格式

    • Ext2
    • Ext3
    • ReiserFS
    • XFS
    • JFS


    絕對路徑 vs 相對路徑
    • 絕對位置:凡切換所有路徑都是以「/」作為開頭。
    • 相對路徑:凡路徑的表示,均不以「/」作為開頭。
    • 「.」: 代表 現行目錄(current directory。
    • 「..」:代表 上一層目錄。
    • 「~」:代表 使用者家目錄。
    • 「~wild」:代表 使用者wild的家目錄。 
    • 「-」:代表上一個使用目錄。(同windows 上一頁)
    • cd / 到跟目錄
    • cd /home/cyj 到 home 底下的 cyj
    • cd ../../ 上兩層
    • cd ../../usr/share 上兩層,再進入 usr/share
    • cd ~ 回到家目錄
    • cd - 回到上一個使用的目錄 
    虛擬終端機
    • 切換按鍵: Ctrl + Alt + F1~F7 (tty1~7)
    • F7通常為 X-window登入與使用,若反應太慢,按F1~7長按久一點。
    登入登出


    當電腦電源開啟時,系統會把控制權全部交給BIOS,而BIOS會開始對硬體作檢查並且初始化。接下來BIOS會去找硬碟的MBR(Master Boot Record)磁區的開機程式,並且去執行它!由於MBR的大小隻有512 bytes,在今天的複雜應用其實是無法在小小的MBR放上完整的bootloader開機程式,所以在Linux上最常用的bootloader GRUB就拆成stage 1和stage 2,其中的stage 1就放在MBR上。當stage 1上的bootloader從BIOS取得控制權後,它會先驅動硬碟,接下來從硬碟內找到stage 2的程式,並執行stage 2的bootloader。
    Stage 2的bootloader執行後,會先找 /boot/grub/menu.lst去取得可用的核心和系統。若讀者選擇啟動Linux的話,它會依照menu.lst內的核心檔案位置去載入該核心映像檔,接下來該核心會開始初始化硬體並依照fstab把該掛載的硬碟或者光碟機等檔案設備掛載進來。
    為了減少核心大小,有一些硬體驅動程式會編成模組,由 /sbin/init 執行,這個程式會讀取 /etc/rc{編號}.d/ 裡面的 script,並且進入runlevel,跑完這些script後,系統已經正式的開機完成了。

    • ssh 帳號@伺服器位址 登入遠端伺服器
    • SSH 免密碼登入:
    • passwd 更改此身分的登入密碼
    • shutdown 關機 
      • -h 在關機後,停止系統或關閉電源
      • -H  在關機後,停止系統
      • -P  在關機後,關閉電源 
      • -r 重新啟動
      • -k "訊息" 發出警告訊息通知所有使用者
      • +3 三分鐘後
      • 19:00 在19:00執行動作
      • -c 取消正在執行的 shutdown 
      • Ctrl + Z 將任務放入後台執行
    • reboot 重新啟動
      • -f 強力停止系統或重開,不使用 shutdown
    • halt 停止系統(但沒斷電 or 重啟)
      • -f 強力停止系統或重開,不使用 shutdown 
    • poweroff 停止系統後關閉電源
      • -w 實際上不停止系統或重開,只有寫入 wtmp
      • -f 強力停止系統或重開,不使用 shutdown 
    • init 內核啟動的用戶級進程(下方為各 runlevel)
      •     init 0 停止系統 (千萬別把 initdefault 設成0)
      •     init 1 單用戶啟動
      •     init 2 多使用者模式
      •     init 3 多使用者模式
      •     init 4 多使用者模式
      •     init 5 多使用者模式
      •     init 6 重啟系統(千萬別把 initdefault 設成6)
    • 登入環境
      終端機進入後,這個操作環境稱為 Shell,可以透過 Shell 下指令給作業系統並回傳顯示。
    通用快速鍵
    • Tab 當檔名過長有部分遺忘時,可以用此按鍵來自動補齊 or 快搜檔名
    • Ctrl + Alt + backspace 重新啟動 X-window
    • Ctrl + C 終止目前的命令
    • Ctrl + D 輸入結束 (EOF),例如郵件結束的時候;
    • Ctrl + M 就是 Enter 啦!
    • Ctrl + S 暫停螢幕的輸出
    • Ctrl + Q 恢復螢幕的輸出
    • Ctrl + U 在提示字元下,將整列命令刪除
    • Ctrl + Z 『暫停』目前的命令
    • 可使用 stty 設定終端機環境(含操作熱鍵等..)


    系統操作
    • \ [Enter] 指令斷行(當指令過長可用此斷行,\後面不接符號)
    • lsb_release -a 或 cat /etc/issue  查看Ubuntu版本
    • uname -a 查看Linux Kernel版本
    • cat /proc/cpuinfo 查看CPU資訊
    • cat /proc/meminfo 查看MEM資訊
    • free 查看記憶體使用情形 -m(以MB為單位)
    • lspci 列出所有PCI設備 ex.找VGA則 lspci|grep VGA
    • lsusb 查看usb設備
    • type cd 顯示出cd是外部指令還是 bash 內建的指令(內建的會顯示:is a shell builtin)
    sudo ethtool eth0 查看網卡狀態
    lshw 查看當前硬體資訊
    sudo fdisk -l 查看磁碟機資訊
    df -h 查看硬碟剩余空間
    free -m 查看當前的記憶體使用情況
    ps -A 查看當前有哪些進程
    kill 進程號(就是ps -A中的第一列的數字)或者 killall 進程名( 殺死一個進程)
    kill -9 進程號 強制殺死一個進程
    vi / vim / nano -w 文件編輯器
    /proc/meminfo |grep free 看剩餘記憶體

    磁碟與檔案系統
    dd - 轉換並複製檔案的實用工具
    dh - 查詢磁碟使用情形
    自訂指令
    alias - 用來自訂常用命令的縮寫 - 開啟 ~/.bashrc 可編輯自己的 alias(但須reboot)
    alias c='/proc/cpuinfo'  之後下c指令就等於下 /proc/cpuinfo
    unalias c 取消自訂的"c"指令
    文件和目錄管理
    ln - 建立連結
    文件檢視
    grep - 過濾特定內容
    pwd - 取得目前目錄
    find - 搜尋文件
    說明與支援
    man - 查閱離線指令說明,通常為英文。
    系統管理
    sudo - 取得暫時管理權限
    su - 登入為管理員
    top - 文字介面的程序監視器
    mount - 裝置掛戴



    重開 網路
       /etc/init.d/networking restart

    檔案操作

    • 檔案權限
      除了 rwx  之外的特別權限,權限號碼為最前面的第四碼 ex. "4755"
      • SUID = 4
      • SGID = 2
      • SBIT = 1
    • 檔案類型
      • [ d]:目錄
      • [ - ]:檔案
      • [ b ]:表示為裝置檔裡面的可供儲存的周邊設備;
      • [ c ]:表示為裝置檔裡面的序列埠設備,例如鍵盤、滑鼠。
    • 權限計算
      • r = 100 => 二進位 = 1*4 + 0*2 + 0*1 = 4
      • w = 010  => 二進位 = 0*4 + 1*2 + 0*1 = 2
      • x = 001  => 二進位 = 0*4 + 0*2 + 1*1 = 1
      • 由此可推 => rwx = 4+2+1 = 7
      • 由此可推 => rwx-rx-rx = 7-5-5
    • Link數目:檔案清單表示為連結佔用的節點 (i-node) ( 若為目錄時,通常與該目錄底下還有多少目錄有關 )
    • 檔名:如果檔名之前多一個『 . 』,則代表這個檔案為『隱藏檔』
    1. pwd 顯示目前工作目錄
      • -P 顯示出確實的路徑(讓連結檔顯示真正路徑)
    2. ls 列出檔案資訊(類似dos之dir)
      • -l:列出詳細的檔案資訊 *
      • -A:列出全部檔案包括隱藏檔(不含 . 與 ..) *
      • -a:列出全部檔案包括隱藏檔(不含 . 與 ..) *
      • -R:遞迴列出檔案及子目錄其下的所有子目錄和檔案 *
      • -x:以多欄方式列出,字母順序由左而右
      • -i:以i -node來列出,會列出每個檔案在磁碟中的編號 *
      • -m:列出檔案時以逗號 , 來分隔
      • -n:把群組及檔案擁有者名稱轉成數字代碼
      • -t:依檔案的修改時間排序 (由新而舊) *
      • -u:依檔案上次的存取時間排序 (需與t配合) *
      • -s:檔案的大小以區塊為單位 (每個區塊block = 512 bytes)
      • -o:用顏色來顯示各種類別的檔案
      • -r:以相反的英文字母順序顯示
      • -d:只顯示目錄訊息而非目錄下的檔案
      • --color=never:不要依據檔案特性給予顏色顯示;
      • --color=always:顯示顏色
      • --color=auto:讓系統自行依據設定來判斷是否給予顏色
      • --full-time:以完整時間模式 (包含年、月、日、時、分) 輸出
      • --time={atime,ctime} :輸出 access 時間或改變權限屬性時間 (ctime) 而非內容變更時間 (modification time)
    3. ll 含詳細資料清單(alias li -l)
    4. more 逐筆顯示
      • space:向下翻一頁
      • b       :向上翻一頁(只對檔案有用)
      • Enter :向下翻『一行』
      • /字串:向下搜尋『字串』這個關鍵字
      • :f       :顯示出檔名以及目前顯示的行數
      • q       :代表立刻離開 more ,不再顯示該檔案內容。
    5. less 逐頁翻動
      • 空白鍵       :向下翻動一頁
      • [pagedown] :向下翻動一頁
      • [pageup]      :向上翻動一頁
      • /字串           :向下搜尋『字串』
      • ?字串          :向上搜尋『字串』
      • n                  :向前一個搜尋結果
      • N                 :向下一個搜尋結果
      • q                  :離開
    6. cp 複製
      • -a  :相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)
      • -d  :若來源檔為連結檔的屬性(link file),則複製連結檔屬性而非檔案本身;
      • -f  :為強制(force)的意思,若目標檔案已經存在且無法開啟,則移除後再嘗試一次;
      • -i  :若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
      • -l  :進行硬式連結(hard link)的連結檔建立,而非複製檔案本身;
      • -p  :連同檔案的屬性一起複製過去,而非使用預設屬性(備份常用)
      • -r  :遞迴持續複製,用於目錄的複製行為;(常用)
      • -s  :複製成為符號連結檔 (symbolic link),亦即『捷徑』檔案;
      • -u  :若 destination 比 source 舊才更新 destination !
      • 最後需要注意的,如果來源檔有兩個以上,則最後一個目的檔一定要是『目錄』才行!
    7. mv 移動
      • mv mvtest mvtest2 更改名稱
    8. rm 刪除檔案
      • -r 連同內容一起刪除
    9. rename 變更檔名
      • -n :是把模擬的結果印在螢幕上,不實際改檔名
      • -v :是改檔名同時把結果印在螢幕上
      • -f  :是當檔名重複時強制覆蓋
      • rename 's/\.bak$//' *.bak  有一批文件,以 .bak結尾,現在想把這些 .bak 統統去掉。
      • rename 'y/A-Z/a-z/' 把所有文件名內含有大小字母的,修改為小寫字母。
    10. mkdir 新增資料夾
      • -p:遞迴建立目錄 (ex. mkdir -p a/b/c/d)
      • -m:設定這個目錄的存取權限 (ex. -m 755)
    11. rmdir 刪除資料夾
      • -p:遞迴刪除目錄  (ex. rmdir -p c/d)
      • *.非空白目錄請用 rm -r
    12. chmod 變更權限
      • 777 filename:權限數字
      • u=rwx,go=rx  .bashrc :以身分個別設定
        • u = user, g = group , o = others, a = all
        • + 加入, - 除去, = 設定
        • chmod  a+w  .bashrc :全部人都加上寫入權限
        • chmod  a-w  .bashrc 全部人都拿掉執行權限
    13. chown 變更檔案擁有者
      • user filename:加入擁有者
    14. umask 檔案預設權限
      • umask -S 使用文字方式設定 (ex. u=rwx,g=rx,o=rx)
      • umask 002 預設值就要剪掉的權限值
    15. head 顯示前面幾行
      • -n 20 filename 顯示前20行
        • 拿掉 w 的權限,就是輸入 2 分
        • 拿掉 r 的權限,也就是 4 分
        • 拿掉 r + w 的權限,也就是 6 分
        • 拿掉 x + w 的權限,也就是 3 分
      • -n -10 filename 顯示總行數-10行的資料 (ex. 共30行,則顯示前20行,最後10行不顯示)
    16. chattr 設定檔案其他屬性
      • a  :檔案只能增加資料,不能刪也不能修改,只有root 才能設定這個屬性。 
      • i  :不能被刪除、改名、設定連結也無法寫入或新增資料!』只有 root 能設定
    17. lsattr 顯示檔案其他屬性
      • -a :將隱藏檔的屬性也秀出來
      • -d :如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名
      • -R :連同子目錄的資料也一併列出來!
    18. tail 顯示後面幾行
      • -n 20 filename 顯示後20行
      • -n +10 filename 共30行,則顯示最後20行,最前面10行不顯示)
    19. od 非純文字檔
      • -t  type filename:後面可以接各種『類型 (TYPE)』的輸出,例如:
        • a:利用預設的字元來輸出
        • c:使用 ASCII 字元來輸出
        • d[size]:利用十進位(decimal)來輸出資料,每個整數佔用 size bytes 
        • f[size]:利用浮點數值(floating)來輸出資料,每個數佔用 size bytes 
        • o[size]:利用八進位(octal)來輸出資料,每個整數佔用 size bytes 
        • x[size]:利用十六進位(hexadecimal)來輸出資料,每個整數佔用 size bytes
    20. file 顯示檔案類型
    21. find 從硬碟尋找特定檔案
      • 路徑可設定多個,用 space 分開
      • 與時間有關的選項:共有 -atime, -ctime 與 -mtime ,以  -mtime 說明
      • -mtime  n :列出 在 n 天之前的『一天之內』被更動過內容的檔案(今天則是 0)
      • -mtime +n:列出 在 n 天之前(不含 n 天本身)被更動過內容的檔案檔名
      • -mtime -n :列出在 n 天之內(含 n 天本身)被更動過內容的檔案檔名 *
      • -newer file:列出比 file 還要新的檔案檔名
      • find 路徑 -uid/gid n:找路徑底下屬於此id的檔案(id 清單在 /etc/passwd , /etc/group)
      • find 路徑 -user/group 名稱:找路徑底下屬於此帳號的檔案
      • find 路徑 -nouser/-nogroup:找路徑底下不屬於任何人的檔案
      • -name filename:搜尋檔案名稱為 filename 的檔案(可用 RegEx)
      • -size [+-]SIZE:搜尋比 SIZE 還要大(+)或小(-)的檔案。c=byte, k:=1024bytes。ex. +50k
      • -type TYPE:搜尋檔案的類型為 TYPE 的:
        • 一般正規檔案 (f)
        • 裝置檔案 (b, c)
        • 目錄 (d)
        • 連結檔 (l)
        • socket (s)
        • FIFO (p)
      • -perm mode:搜尋檔案權限『剛好等於』 mode 的檔案,ex. 4755
      • -perm -mode:搜尋檔案權限『必須要全部囊括 mode 的權限』的檔案
        • ex. -perm -0744( -rwxr--r-- )   ,亦即 4755(-rwsr-xr-x)  也會被包括在裡面。
      • -perm +mode:搜尋檔案權限『包含任一 mode 的權限』的檔案(特殊權限 +7000)
        • ex. -perm -0744( -rwxr--r-- )   ,亦即  -rw-------   也會被包括在裡面。
    1. locate  從資料庫尋找特定檔案
    2. whereis 從資料庫尋找特定檔案(查系統檔, 不含 home)
    3. whichis 從資料庫尋找特定檔案 (查指令)
    4. 搜尋範圍: find >  locate >  whereis >  whichis
    Lamp
    1. mysql
      開關: /etc/init.d/mysql restart / stop / start
      設定檔 :/etc/mysql/my.cnf
      • 如果遠端連不進來,註解掉(or 增加)bind-address = 127.0.0.1
    2. Apache
      開關  service apache2 restart / stop / start 或 /etc/init.d/apache2 restart /stop /start
      設定檔 :
    3. PHP
      設 定檔 :
    4. phpmyadmin

    基本指令及系統訊息
    |    pipe通道,將一指令輸出作另一指令輸入
    cal   查看月曆(cal 02 2011 查看2011-02的月曆)
    clear  清除目前的螢幕內容
    date  查看或設定系統時間
    dmesg 顯示系統暫存區的內容
    free  顯示記憶體及SWAP的使用狀況
    man  線上查看指令說明
    pwd  查看目前所在的目錄位置
    uptime 系統開機時間等訊息
    w   列出目前系統使用者使用狀況 (參考who)

    檔案及目錄使用操作

    cat   列出文字檔案的內容
    cd   切換目錄(cd ~joe : 切換到joe的家目錄)
    chmod  變更檔案目錄權限(-ugo,a=all, r4/w2/x1 )
    chown  變更檔案的擁有者及群組(-R包含子目錄)
    cp   複製檔案或目錄 (cp 來源 目的)
    df   查看磁碟空間使用狀況(-h 以K/M/G顯示)
    du   查看所在目錄磁碟空間的使用情形

    • du -mah --max-depth=1 .

    find   尋找檔案(find / -name filename)
    fsck   檢查並修復檔案系統
    grep   搜尋字串(grep -r string folder )
    head   列出檔案前n行(head -5 a.t列出a.t前5行)
    ln   建立檔案或目錄的連結檔(Windows捷徑)
    ls   查看所在目錄下的目錄、檔案資訊(dir)
    mkdir  建立目錄
    more  以分頁列出文字檔的內容 (參考less)
    mv   搬移檔案或目錄(可更改檔案或目錄名稱)
    rm   刪除檔案或目錄(刪目錄-r,強制刪除-f)
    tail   列出檔案末n行
    tar   壓縮/解壓縮(z壓縮/x取出/c建立)
    touch  改變檔案的時間戳記
    wc   計算檔案的行數、字數、位元數
    whereis  尋找程式/說明檔等的位置(不適用文字檔)
    which  尋找指令程式的所在目錄

    網路指令

    arp    查詢IP, mac等位址
    dig    DNS查詢工具
    ifconfig  查詢或設定網路介面
    netstat  查詢網路連線狀況
    nslookup 交談式查詢主機名稱或IP
    ping   藉ICMP封包檢查遠端主機的連線狀態
    traceroute 查詢到達遠端主機所經的結點
    whois   查詢網域名稱的持有現況


    帳號管理
    • gpasswd 群組管理指令(gpasswd -a user group)
    • groupadd 新增群組
    • groupdel 刪除群組
    • groupmod 修改群組
    • groups 查詢使用者所隸屬群組(groups useracc)
    • passwd 修改(指定)使用者密碼
    • useradd 新增帳號
    • userdel 刪除帳號
    • usermod 修改帳號
    • vipw 編輯使用者密碼檔
    LOG讀取
    • dmesg 顯示開機記錄檔(/proc/kmsg)
      • |grep '關鍵字' 取得所需紀錄(ex. |grep eth 網路卡是否有抓到)
    • last 顯示系統開機以來或是每月初登入者紀錄(/var/log/wtmp)
      • -R: 省略 hostname 的欄位 
      • -n:指定輸出記錄的條數。(或 -num) 
      • -f file:指定用文件file作為查詢用的log文件。 (/var/log/btmp 或 /var/log/wtmp)
      • -t YYYYMMDDHHMMSS:只顯示指定的虛擬控制台上登錄情況。 (ex. 20120319150000)
      • -a把從何處登入系統的hostname或IP,顯示在最後一行。
      • -d將IP地址轉換成hostname。 (很慢)
      • -h 節點:只顯示指定的節點上的登錄情況。 
      • -i IP:只顯示指定的IP上登錄的情況。 
      • 用戶名:知道查詢的用戶名。 
      • -x : 顯示系統關閉、用戶登錄和退出的紀錄。  
    • lastlog 顯示目前系統上每個帳號最近一次登入的時間(/var/log/lastlog)
    • syslogd
    • logrotate LOG檔輪替,將舊的資料更名,並且建立新的登錄檔, 以保持登錄檔的『新鮮』,並視設定將最舊的登錄檔刪除。
    • http://linux.vbird.org/linux_basic/0570syslog/0570syslog-fc4.php#analyze_vbird 
    • history 列出上一次登入時曾用過的指令(~/.bash_history)
      • history:列出所有紀錄
      • history -c:清空 Bash 指令記錄 
      • history -w 檔名:將目前的 history 記憶內容寫入  
      • history -a 檔名:將目前新增的history 指令新增入 此檔案 中,預設寫入 /.bash_history
      • history -d 編號:可刪除該「編號」的指令
      • history 8:列出最近8筆指令 
      • history -r 檔名 :以反方向顯示所下過的指令 
      • !!:執行上一個命令 
      • !9 執行編號9的指令
      • !cd:執行最後一次以 cd 開頭的指令 
      • set history = 50 設定歷史命令記錄最後50個指令(原始設定 1000?!) 


    系統管理

    • apt-get  apt-get update重新同步套件索引檔
    • apt-cache search 搜尋套件
    • apt-get install package1 package2 ...
    • dpkg -l | grep 套件名稱  查詢套件是否安裝
    • crontab  定時執行工作(-e編輯,-l列表,-r清除)
    • dpkg   deb套建管理(dpkg --install pakage)
    • exit   登出
    • kill   送訊號給指定的程序(kill -9 ##移除程序)
    • ntpdate  NTP校時
    • ps   目前系統執行中的程序(ps auxww)
    • reboot  系統重新開機
    • shutdown 系統關機時間指定 (shutdown -h now)
    • sync  將系統暫存的資料強制寫回硬碟
    • top  程序管理工具(q:離開 / h:Help)
    • ulimit 檔案系統及程序的限制關係
      • -a:顯示資源限制的設定細節
      • -c:core file size (blocks) 0 Core文件的最大值
      • -d:data seg size (kbytes) unlimited 程序數據節區的最大值
      • -e:scheduling priority 0
      • -f:file size (blocks) unlimited 可建立的單一檔案的大小
      • -i:pending signals 11774 
      • -l:max locked memory (kbytes) 32 記憶體中鎖定程序的最大值
      • -m:max memory size (kbytes) unlimited
      • -n:open files 1024 同時可開啟的檔案數量
      • -p:pipe size (512 bytes) 8 管道緩衝區的最大值
      • -q:POSIX message queues (bytes) 819200
      • -r:real-time priority 0stack size (kbytes) 10240
      • -t:cpu time (seconds) unlimited CPU使用時間的上限
      • -u:max user processes 11774 用戶最多可開啟的程序數量
      • -v:virtual memory (kbytes) unlimited 可使用的虛擬記憶體上限
      • -x:file locks unlimited
    • haparm -Tt /dev/硬碟代號 硬碟測速
    startx 進入 x-window

    Shell BASH
    • http://lernju.pixnet.net/blog/post/27190147-shell-script-bash-%E6%95%99%E5%AD%B8-%E5%9F%BA%E6%A5%9A-%E6%A6%82%E5%BF%B5
    • http://blog.evisio.net/?p=1038
    • 進階 ubuntu(一)
    • 變數基本規則
      • myname=ABC 用=賦予變數值
      • myname=" Mr. John" 等號兩邊不可有 space,變數值中有 space 請用 " 包住
      • 2myname 變數開頭不能是數字
      • var="Lang is $LANG" 結果為 Lang is en_US," 會保有變數值,' 則為普通文字
      • \ 跳脫特殊字元(ex. space = enter $ \ 等)
      • vs=$(uname -r) 結果為核心版本號,用 ` 或 $() 包住指令,則會套用該指令結果值
      • vs=core\ ver\="$myname" 可用 "$變數名稱" 或 ${變數} 去包裹要串接的變數
      • export PATH 使變數變成環境變數
      • unset myname 取消變數
    • echo 讀出變數值
      • echo $HOME 同 echo ${HOME}
    • unset 取消變數
    • bash 子程序
    • read 從鍵盤取得變數內容
      • read var_name , this is value 賦予 $var_name 值 "this is value"
      • read -p "Please keyin your name:" var_name 顯示出引號內字串,並將使用者 keyin 的值給 $var_name
      • read -t 30 等待回覆的秒數
    • declare / typeset 變數宣告(部分功能同 set)
      • 顯示所有變數名稱與內容
      • -a var[1]="xxx":變數定義成為陣列類型
      • -i var=100+50:變數定義成為整數類型
      • -x var=$(ls -l): 變數變成環境變數,同 export
      • -r:變數變成 readonly 類型,不可被更改、unset,通常得重新登入OS才能解除
    • array變數類型
      • var[index]="content" 宣告方式
      • echo "${var[index]}" 顯示方式
    • 變數內容刪減
      • ${變數名稱#關鍵字} 從最左側開始比對,且刪除最短的
      • ${變數名稱##關鍵字} 從最左側開始比對,且刪除最長的
      • ${變數名稱%關鍵字} 從最右側開始比對,且刪除最短的
      • ${變數名稱%%關鍵字} 從最右側開始比對,且刪除最長的
    • 變數內容取代
      • ${變數名稱/舊字串/新字串} 只有第一個符合的字串會被取代
      • ${變數名稱//舊字串//新字串} 全部符合的字串都會被取代
    • 變數的複製
    • 萬用字元
      • 0~無限個 任意字元
      • ? 『一定有一個』任意字元
      • [ ] 『 一定有一個』 在括號內的字元
      • [ - ] 『 在編碼範圍內的所有字元』。例如 [0-9] 代表 0 到 9 
      • [^ ] 『反向選擇』,例如 [^abc] 代表 一定有一個字元,只要是非 a, b, c 就成立
    • 特殊字元
      • 註解符號,在後的資料均不執行
      • 跳脫符號,將『特殊字元或萬用字元』還原成一般字元
      • 管線 (pipe),分隔兩個管線命令的界定
      • 連續指令下達分隔符號(與管線命令並不相同)
      • 使用者的家目錄
      • 取用變數前置字元
      • 工作控制 (job control) , 將指令變成背景下工作
      • 邏輯運算意義上的『非』 not 的意思!
      • 目錄符號:路徑分隔的符號
      • >, >> 資料流重導向:輸出導向,分別是『取代』與『累加』
      • <, << 資料流重導向:輸入導向 (這兩個留待下節介紹)
      • ' ' 單引號,不具有變數置換的功能
      • " " 具有變數置換的功能
      • ` ` 兩個『 ` 』中間為可以先執行的指令,亦可使用 $( )
      • ( ) 在中間為子 shell 的起始與結束
      • { } 在中間為命令區塊的組合
    • 資料流重導向
      標準輸出指的是『指令執行所回傳的正確的訊息』,而標準錯誤輸出可理解為『 指令執行失敗後,所回傳的錯誤訊息』
    • 標準輸入  (stdin) :代碼為 0 ,使用 < 或 << ;
    • 標準輸出  (stdout):代碼為 1 ,使用 > 或 >> ;
    • 標準錯誤輸出(stderr):代碼為 2 ,使用 2> 或 2>> ;
    • 1> :以覆蓋的方法將『正確的資料』輸出到指定的檔案或裝置上;
    • 1>>:以累加的方法將『正確的資料』輸出到指定的檔案或裝置上;
    • 2> :以覆蓋的方法將『錯誤的資料』輸出到指定的檔案或裝置上;
    • 2>>:以累加的方法將『錯誤的資料』輸出到指定的檔案或裝置上;
    • /dev/null 垃圾桶黑洞裝置


    • 連續指令下達
      • ; 不考慮指令相關性,連續執行
      • && 若左邊的 cmd 執行有錯誤,就不繼續。 (反之則繼續)
      • || 若左邊的 cmd 執行正確,就不繼續。(反之則繼續)
    • 管線命令
      • | 左邊的命令產生的 stdout 傳給右邊命令接著處理並產生結果。(有 stderr 則會忽略)
    • 擷取命令
      • cut
        • -d '分隔字元' -f 欄位 以特定符號切割字串,欄位數可用',' 分隔(ex. -d '/' -f  3,5 )
        • -c 字元區間 擷取範圍內字串(ex. -c 20- 或 -c 20-30)
      • grep
        • -c 計算搜尋到的結果筆數
        • -i 大小寫視為相同
        • -n 順便輸出行號
        • -v 反向選擇,列出沒有關鍵字的資料
        • --color=auto 關鍵字上色
    • 排序命令
      排序有問題可使用 LANG=語系 來調整,查詢則用 locale-gen
      • sort 
        • -f 忽略大小寫
        • -b 忽略最前面的空白字元
        • -r 反向排序
        • -u 相同的資料只出現一行
        • -R 亂數排序
        • -o filename 輸出結果到檔案
      • wc 字元統計
        • -l 列出行數
        • -w 多少個單字
        • -m 多少字元
      • uniq 統計重複資料
        • -c 顯示此字串共有幾筆重複 (ex. last|cut -d ' ' -f 1| uniq -c
      • tee 將資料傳送至檔案或裝置
        • -a 以累加的方式 (ex. ls -l ~/|tee a.txt|more)
    • 字元轉換命令
      • tr 文字替換與刪除
        • '原字串' '新字串' 取代字串( ex. last|tr '[a-z]' '[A-Z]'
        • -d 刪除該字串
        • -s 刪掉重複字串
      • col 過濾特定文字
        • -b 在文字內有反斜線 (/) 時,僅保留反斜線最後接的那個字元
        • -x 輸出的 tab 以等量的空格替換
        • -f 允許句子末端的單字因過長而被截斷
      • join 將有相同資料的那一行加在一起
        比較常用在處理這些檔案上 etc/passwd, /etc/shadow, /etc/group
        • -t  :join 預設以空白字元分隔資料,並且比對『第一個欄位』的資料,如果兩個檔案相同,則將兩筆資料聯成一行,且第一個欄位放在第一個!
        • -i  :忽略大小寫的差異
        • -1  :這個是數字的 1 ,代表『第一個檔案要用那個欄位來分析』的意思
        • -2  :代表『第二個檔案要用那個欄位來分析』的意思
      • paste 比對將有關連性的兩行用 Tab 連在一起
        • -d '字元' 可指定分隔用的字元
      • expend 將 Tab 轉成空白
        • -t 數字 可以設定用幾個空白鍵取代
    • 分割命令
      • split 切割
        split 參數 來源檔 目標
        • -b檔案大小 限制切割大小 (300b, 300k, 300m)
        • -l 行數 以行數限制切割大小
    • 參數代換
      • xargs 產生某個指令的參數(可用來引用不支援管線命令的指令)
        find /sbin -perm +7000 | xargs ls -l
        • -0  :將 stdin 的特殊字元還原成一般字元,例如 `, \, 空白鍵等等
        • -e 字串  :這個是 EOF (end of file) 的意思。到此字串會停止
        • -p  :在執行每個指令的參數時,都會詢問使用者
        • -n  :每次 command 指令執行時,要使用幾個參數
    • 打包 stdout
      • - 將 | 前面的結果打包,並送給下個指令的 " - "位置做處理 ex. tar -cvf - /home | tar -xvf -

    Shell Script
    • sh xx.sh 如果 *.sh 在 ~/bin 資料夾內,只要檔案有 r 權限即可執行
    • source xx.sh 在父程序中執行,也就是執行結果與變數會直接在你正在用的 Bash 中生效
    • # 註解
    • #!/bin/bash 宣告檔案內的語法是使用 bash,使其能載入 bash 相關環境檔
    • PATH, LANG 相關的環境變數宣告
    • exit 0 命令程式中斷(用 $? 來觀察此 sh 狀態時,就能得到 0 這個結果)
    • read 善用此指令,取得鍵盤輸入的資料
    • filename=${fileuser:-"filename"} 用變數功能分析參數是否設定
    • com1=$(指令)  com2=$(指令2) do=${com1}${com2} 用此方法將兩段指令組合
    • $((運算內容)) 加減乘除...
    • test 測試
      test -e xxx.txt && echo 'exist' || echo 'not exist'
      • 判斷檔案類型 (ex. -e f1)
        • -e 檔名存在?
        • -f  檔名存在? is 檔案?
        • -d 檔名存在? is 資料夾?
        • -b 檔名存在? is block device 裝置?
        • -c 檔名存在? is character device 裝置?
        • -S 檔名存在? is Sockect 檔案?
        • -p 檔名存在? is FIFO(pipe)檔案?
        • -L 檔名存在? is 連結檔?  
      • 判斷檔案權限 (ex. -r f1)
        • -r 檔名存在? is 可讀?
        • -w 檔名存在? is 可寫?
        • -x 檔名存在? is 可執行?
        • -u 檔名存在? is SUID?
        • -g 檔名存在? is SGID?
        • -k 檔名存在? is Sticky bit?
        • -s 檔名存在? is 非空白檔案?
      • 檔案間的比較 (ex. f1 -nt f2)
        • -nt file1 比 file 2 新?(newer than) 
        • -ot file1 比 file 2 舊?(older than) 
        • -ef  file1 = file 2 ?(判定兩個file是否指向同一個 inode)
      • 兩個整數之間的判定(ex. n1 -eq n2)
        • -eq n1=n2(equal)
        • -ne n1!=n2(not equal)
        • -gt n1 > n2 (greater than)
        • -lt n1 < n2 (less than)
        • -ge n1>=n2 (greater than or equal)
        • -le n1<= n2 (less than or equal)
      • 判定字串資料
        • -z string 判斷為0 or 空字串
        • -n string  判斷非0 or 非空字串
        • str1 = str2 判斷兩字串是否相等
        • str1 != str2 判斷兩字串是否不相等
      • 多重條件判定
        • -a 兩狀況同時成立(and),ex. 判斷式1 -a 判斷式2
        • -o 兩狀態其一成立(or) ,ex. 判斷式1 -o 判斷式2
        • ! 相反狀態 ,ex. !判斷式
      • 判斷符號 [ ]
        [□"$aa"□==□"yyy ooo"□] && echo "y" || echo "n" (□表示空格)
      • 預設變數($0,$1~~)
        取得 bash 下指令時後方填入的參數值。(ex. /etc/init.d/syslog restart)
        • $0~$n 從 sh 指令後的第一個參數起算 $0, $1, $2~
        • $# 總共帶了幾個參數
        • $@ 全部的參數內容
        • shift n 將參數編號偏移 (ex. shift 3 就是從第四個起算 one two three four five)
      • 條件判斷式
        • if 判斷式 ] ||  判斷式 ] then 程式 elif 判斷式 ]; then  程式 else 程式 fi
        • case $變數名稱 in "case1") 程式 ;; "case2") 程式 ;; *) 程式;; esac
        • function xxx(){ 程式 }
      • 迴圈
        • for (( i=1; i<=$nu; i=i+1 )) do 程式 done
        • for 變數名稱 in 變數值1  變數值2  變數值3.... 變數值要連續好可用 $(seq 1 100)
        • while [ 判斷式 ] do 程式 done 判斷式成立則執行程式
        • until [ 判斷式 ] do 程式 done  判斷式成立則停止執行程式
      • Debug
        • sh -n 不要執行 script,僅查詢語法的問題
        • sh -v 再執行 sccript 前,先將 scripts 的內容輸出到螢幕上;
        • sh -x 將使用到的 script 內容顯示到螢幕上,這是很有用的參數!




    環境變數
    • env 列出所有環境變數
      • HOSTNAME 這部主機的主機名稱
      • TERM 這個終端機使用的環境是什麼類型
      • SHELL 目前這個環境下,使用的 Shell 是哪一個程式?
      • HISTSIZE 紀錄執行過的指令筆數
      • USER 使用者的名稱
      • LS_COLORS 一些顏色顯示
      • MAIL 這個使用者所取用的 mailbox 位置
      • PATH 是執行檔指令搜尋路徑
      • INPUTRC 與鍵盤按鍵功能有關。可以設定特殊按鍵!
      • PWD 目前使用者所在的工作目錄 (利用 pwd 取出!)
      • LANG 這個與語系有關,底下會再介紹!
      • HOME 這個使用者的家目錄
      • _ 上一次使用的指令的最後一個參數(或指令本身)
    • set 觀察所有變數(環境+自訂)
      通常系統變數都為大寫
      • PS1 命令提示字元格式,也就是每次下指令左邊那串字 root@wild:/etc#
      • $ 目前執行緒代號PID(Process ID) ,用法 echo $$
      • ? 上一個指令的回傳值(一般預設回傳 0),用法 echo $?
      • OSTYPE, HOSTTYPE, MACHTYPE (主機硬體與核心的等級)
    • export 列出自訂變數轉成環境變數
      將 user 自己設定的變數轉成其他 user 也能用
      • export 變數 將此變數轉成環境變數
    • locale 影響顯示結果的語系變數
    • /etc/issue 進站畫面
    • /etc/issue.net 用telnet連接的進站畫面
    • /etc/motd 使用者登入後訊息
      • man agetty 查詢內碼
    • /etc/profile 整體環境設定檔(login shell)
      使用者登入的時候一定會讀的設定檔,執行中會順便呼叫其他設定檔如:
      • /etc/inputrc
      • ~/etc/bash.bachrc
    • ~/.bash_logout 登出設定檔
    • ~/.bash_profile 個人設定檔(login shell)載入環境設定檔後,呼叫個別設定檔如:
      • ~/.bash_profile
      • ~/.bash_login
      • ~/.profile
    • ~/.bashrc -- non-login 非登入環境設定檔
      • 依據不同的 UID 規範出 umask 的值;
      • 依據不同的 UID 規範出提示字元 (就是 PS1 變數);
      • 呼叫 /etc/profile.d/*.sh 的設定
    • /etc/manpath.config 套件的man說明記錄檔
    • source 免重開直接載入環境設定檔
    • stty 終端機環境設定
      ^C = Ctrl + C
      • -a 列出詳細參數
      • size 顯示目前終端機檢視行列數
      • intr 中斷目前程序
      • quit 退出目前程序
      • erase 向前刪除一個文字
      • kill 刪除程序
      • eof 輸入結束、文件結束
      • start 啟動畫面輸出
      • stop 停止畫面輸出
      • susp 將程式改為後台執行
      • werase 刪除最後一個單字 ex. aaa bbb (則刪除 bbb)
      • rprnt
      • eol
      • eol2
      • swtch
      • lnext
      • flush
      • min
      • time
    About PHP server
    Linux 監測工具 與 系統、硬體環境對應圖表 (link)


    疑難排解
    • 忘記帳號、密碼 ( http://blog.yam.com/leo2016/article/26255291 )
      1. 開機若有 Linux LOGO,按一次 ESC 進入 Grub 選單。
      2. 在 Grub 選單時,選擇用 Recovery Mode 開機 (通常是第二個選項)
      3. 進入命令列模式之後,輸入「passwd username」,其中 username 就是你的帳號名稱。若連帳號名稱也忘記的話,下指令「ls /home」就會列出來了。
      4. 然後輸入新的密碼,再輸入一次新的密碼作為確認。
      5. 好啦,密碼被重新設定了,輸入「shutdown -r now」立即重新開機吧。


    定期清除 舊檔案

    • 測試: find /path/* -mtime +幾天以前 -type f
    • 刪除:後面加上 -delete











  • 在 mk802 上安裝 jdk

    • //清除 java
      apt-get purge icedtea* default-jre* default-jdk* java*
      //在 mk802安裝 jdk
      apt-get install default-jdk
      apt-get install default-jre-headless

    設定時間

    • timedatectl set-timezone Asia/Taipei
    • 並在 /etc/rc.local 的 exit 之前加入
      • /etc/init.d/cron restart
      • service rsyslog restart


    ubuntu & 指令 ubuntu & 指令 Reviewed by Wild on 8/11/2015 03:30:00 下午 Rating: 5

    沒有留言:

    沒有Google帳號也可發表意見唷!

    技術提供:Blogger.