Linux & UNIX 工作筆記

    內容表格
    1. 1. 筆記整理
      1. 1.1. 備份/回復軟體套件(RPM & DPKG)
      2. 1.2. 快速檢查網路埠 (port) 是否開啟
      3. 1.3. 特殊檔案權限
      4. 1.4. ssh 連線指令
      5. 1.5. ip 指令
      6. 1.6. GPT/MBR 磁區
      7. 1.7. 安裝編譯工具的開發環境
      8. 1.8. 變更系統預設語系
      9. 1.9. Swap 相關指令
      10. 1.10. CentOS 6/7 問題
      11. 1.11. sendmail 轉信設定
      12. 1.12. [PHP] 檢查支援項目及編譯參數
      13. 1.13. [PHP] 檢查 extension 是否載入
      14. 1.14. [PHP] 設定 timezone
      15. 1.15. 完整複製 Home 目錄
      16. 1.16. 關閉 EXT3 的 AUTO FSCK
      17. 1.17. 檢查檔案的日期
      18. 1.18. 查詢 DHCP Server IP
      19. 1.19. 檢查 Linux 開機時所使用的 kernel 參數
      20. 1.20. 數字換算工具 - bc
      21. 1.21. [CentOS] 移除預設的 Apache Test Page
      22. 1.22. 系統帳號管理
      23. 1.23. SSHFS 透過 SSH 掛載遠端主機目錄
      24. 1.24. tar 使用技巧
      25. 1.25. sudo 使用技巧
      26. 1.26. Linux 的模組指令
      27. 1.27. Perl 使用技巧
      28. 1.28. rsync 備份/複製目錄
      29. 1.29. 製作目前系統的臨時開機光碟
      30. 1.30. 安裝 JRE/JDK 6
      31. 1.31. 改善硬碟 I/O 存取效能
      32. 1.32. 強制更新 partition table - partprobe
      33. 1.33. Putty 登入 Linux 執行有關 ncurses 的文字介面時會出現亂碼
      34. 1.34. 解決 btmp 紀錄檔案肥大問題
      35. 1.35. 刪除包含 dash 符號的檔名
      36. 1.36. 掛載 Windows 分享目錄
      37. 1.37. 關閉 SELinux
      38. 1.38. 校時(NTPD)及變更系統的時區-timezone
      39. 1.39. WGET 技巧
      40. 1.40. YUM 套件管理技巧
      41. 1.41. DNS 除錯指令 dig 用法
      42. 1.42. 變更 hostname,無需重啟主機
      43. 1.43. CPU/Memory Benchmark
      44. 1.44. Linux 系統作燒機/壓力測試(stress test)的工具
      45. 1.45. RedHat/CentOS 安裝時如何載入 Raid Card 驅動程式
      46. 1.46. CentOS 5 無法使用 4GB 以上 RAM
      47. 1.47. 遠端桌面管理-VNC
      48. 1.48. RPM 套件管理
      49. 1.49. 如何找出device名稱(/dev/sda)與LUN channel的對應列表?
      50. 1.50. Apache 網頁認證與  Windows Active Directory 整合
      51. 1.51. 編譯安裝 MRTG 流量監控套件
      52. 1.52. 指令 grep 的強化版
      53. 1.53. 關於 Joomla 1.5.x 網站被駭後所做的因應措施
      54. 1.54. 解開 RPM內的檔案,但不作安裝
      55. 1.55. 關閉  USB 儲存裝置的連接但不能影響 USB 鍵盤/滑鼠  
      56. 1.56. 執行 umount 遇到 device is busy,但又不能重開機,該怎辦?
      57. 1.57. 如何使用 patch/diff 指令
      58. 1.58. 編輯器 VI 必學招
      59. 1.59. 比 top 還好用的工具 - htop
      60. 1.60. 指令 dd 的用法
      61. 1.61. Can't mount remotely Linux host on AIX
      62. 1.62. 分析CPU/Memory使用狀況 - ps command
      63. 1.63. 指令 ls 技巧
    2. 2. 延伸閱讀

    版本為 23:34, 20 Nov 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    1. 1. 筆記整理
      1. 1.1. 備份/回復軟體套件(RPM & DPKG)
      2. 1.2. 快速檢查網路埠 (port) 是否開啟
      3. 1.3. 特殊檔案權限
      4. 1.4. ssh 連線指令
      5. 1.5. ip 指令
      6. 1.6. GPT/MBR 磁區
      7. 1.7. 安裝編譯工具的開發環境
      8. 1.8. 變更系統預設語系
      9. 1.9. Swap 相關指令
      10. 1.10. CentOS 6/7 問題
      11. 1.11. sendmail 轉信設定
      12. 1.12. [PHP] 檢查支援項目及編譯參數
      13. 1.13. [PHP] 檢查 extension 是否載入
      14. 1.14. [PHP] 設定 timezone
      15. 1.15. 完整複製 Home 目錄
      16. 1.16. 關閉 EXT3 的 AUTO FSCK
      17. 1.17. 檢查檔案的日期
      18. 1.18. 查詢 DHCP Server IP
      19. 1.19. 檢查 Linux 開機時所使用的 kernel 參數
      20. 1.20. 數字換算工具 - bc
      21. 1.21. [CentOS] 移除預設的 Apache Test Page
      22. 1.22. 系統帳號管理
      23. 1.23. SSHFS 透過 SSH 掛載遠端主機目錄
      24. 1.24. tar 使用技巧
      25. 1.25. sudo 使用技巧
      26. 1.26. Linux 的模組指令
      27. 1.27. Perl 使用技巧
      28. 1.28. rsync 備份/複製目錄
      29. 1.29. 製作目前系統的臨時開機光碟
      30. 1.30. 安裝 JRE/JDK 6
      31. 1.31. 改善硬碟 I/O 存取效能
      32. 1.32. 強制更新 partition table - partprobe
      33. 1.33. Putty 登入 Linux 執行有關 ncurses 的文字介面時會出現亂碼
      34. 1.34. 解決 btmp 紀錄檔案肥大問題
      35. 1.35. 刪除包含 dash 符號的檔名
      36. 1.36. 掛載 Windows 分享目錄
      37. 1.37. 關閉 SELinux
      38. 1.38. 校時(NTPD)及變更系統的時區-timezone
      39. 1.39. WGET 技巧
      40. 1.40. YUM 套件管理技巧
      41. 1.41. DNS 除錯指令 dig 用法
      42. 1.42. 變更 hostname,無需重啟主機
      43. 1.43. CPU/Memory Benchmark
      44. 1.44. Linux 系統作燒機/壓力測試(stress test)的工具
      45. 1.45. RedHat/CentOS 安裝時如何載入 Raid Card 驅動程式
      46. 1.46. CentOS 5 無法使用 4GB 以上 RAM
      47. 1.47. 遠端桌面管理-VNC
      48. 1.48. RPM 套件管理
      49. 1.49. 如何找出device名稱(/dev/sda)與LUN channel的對應列表?
      50. 1.50. Apache 網頁認證與  Windows Active Directory 整合
      51. 1.51. 編譯安裝 MRTG 流量監控套件
      52. 1.52. 指令 grep 的強化版
      53. 1.53. 關於 Joomla 1.5.x 網站被駭後所做的因應措施
      54. 1.54. 解開 RPM內的檔案,但不作安裝
      55. 1.55. 關閉  USB 儲存裝置的連接但不能影響 USB 鍵盤/滑鼠  
      56. 1.56. 執行 umount 遇到 device is busy,但又不能重開機,該怎辦?
      57. 1.57. 如何使用 patch/diff 指令
      58. 1.58. 編輯器 VI 必學招
      59. 1.59. 比 top 還好用的工具 - htop
      60. 1.60. 指令 dd 的用法
      61. 1.61. Can't mount remotely Linux host on AIX
      62. 1.62. 分析CPU/Memory使用狀況 - ps command
      63. 1.63. 指令 ls 技巧
    2. 2. 延伸閱讀

    筆記整理

    **如何快速搜尋筆記內容**
    建議使用 Firefox 為主要瀏覽器,只要輸入 / 然後在頁面最下方輸入要搜尋的關鍵字即可,往下搜尋按 F3。

    備份/回復軟體套件(RPM & DPKG)

    備份已安裝的套件清單

    $ dpkg --get-selections
    $ dpkg --get-selections > /backup/installed-software.log 
    
    $ rpm -qa
    $ rpm -qa > /backup/installed-software.log
    OR remove software version number (recommended):
    $ rpm -qa --qf "%{NAME}\n" | sort > /backup/installed-software.log
    

    回復清單上的所有套件

    # dpkg --set-selections < /backup/installed-software.log
    
    Once list is imported, use the dselect command or other tools to install the packages, enter:
    # dselect
    Select 'i' for install the software. 
    
    OR use the following command:
    # apt-get dselect-upgrade
    
    # LIST="$( cat /backup/installed-software.log )"
    
    If you are using the yum command, type the following bash for loop to install all software:
    # for s in $LIST; do yum -y install $s; done
    
    Or try out the following command (HT to gt):
    # yum -y install $(cat /backup/installed-software.log) 
    

    A Note About RHEL version 4

    If you are using RHEL/CentOS v4.x or older, enter:
    # for s in $LIST; do up2date -i $s; done
    
    Alternatively, you can use the following up2date command:
    # up2date -i $(cat /backup/installed-software.log) 
    
    快速檢查網路埠 (port) 是否開啟
    方法一
    telnet <IP> <port>
    
    方法二
    nc -zv <IP> <port> 
    
    特殊檔案權限

    使特定檔案無法被任何帳號刪除及變更(包含 root)

    chattr +i /etc/passwd
    lsattr /etc/passwd 
    

    TIPs:

    +i , add immutable attribute

    對整個目錄
    chattr -R +i my-dir/

    -i, remove immutable attribute

    使特定檔案的內容,只能插入新行(append mode),不可作內容刪除

    chattr +a /var/log/syslog
    
    ssh 連線指令

    本機:8888 對應至 遠端 irc.freenode.net:6667

    ssh -L 8888:irc.freenode.net:6667 myuser@randomhost.net
    

    假使 SSH port 非標準,而是 2745 時

    ssh -p2745 -L8888:irc.freenode.net:6667 myuser@randomhost.net
    
    ip 指令

    替代 ifconfig 指令

    顯示所有網卡資訊
    ip a
    
    顯示 eth0 網卡資訊
    ip a show eth0 
    
    開啟/關閉網卡
    ip link set dev eth0 { up | down }
    
    顯示已開啟的網路裝置
    ip link ls up 
    
    設定 IP (非永久)
    ip a add 192.168.1.200/255.255.255.0 dev eth0
    
    移除 IP (非永久)
    ip a del 192.168.1.200/255.255.255.0 dev eth0
    
    GPT/MBR 磁區

    如果磁碟曾經作過 GPT 磁區,之後再用舊版 Linux 安裝系統時,可能會遇到錯誤 Your boot partition is on a disk using the GPT partitioning Scheme but this machines cannot boot using GPT. ,解決方法是必須將磁碟定義為 MBR,步驟:

    在安裝 CentOS 過程,選擇語言時,按下 CTRL+ALT+F2,輸入指令

    /usr/sbin/parted -s /dev/sda mklabel msdos
    

    如果想定義磁碟為 GPT 磁區

    /usr/sbin/parted -s /dev/sda mklabel gpt
    

    補充:

    MBR 主要用來做系統開機的磁區

    MBR 的磁碟限制是 2TB,GPT 是 1024TB

    安裝編譯工具的開發環境
    yum install make libtool autoconf subversion git cvs wget libogg-devel gcc gcc-c++ pkgconfig
    
    變更系統預設語系

    CentOS 6
    編輯 /etc/sysconfig/i18n

    英文
    LANG="en_US.UTF-8"
    
    繁體中文
    LANG="zh_TW.UTF-8"
    
    簡體中文
    LANG="zh_CN.UTF-8"
    
    Swap 相關指令
    // 檢查目前的 swap 配置
    > free
    > swapon -s
    
    // 關閉 swap
    > swapon /dev/sda3
    
    // 開啟 swap
    > swapoff /dev/sda3
    
    // 製作一個 swap 系統
    > mkswap /dev/sda3 
    
    CentOS 6/7 問題

    (http://wiki.centos.org/zh-tw/FAQ/CentOS6)

    沒有 setup 指令

    yum install setuptool
    yum install system-config-network*
    yum install system-config-securitylevel-tui
    yum install system-config-keyboard
    

    預設會啟用 NetworkManager 管理網路,建議關閉

    service NetworkManager stop
    chkconfig NetworkManager off 
    

    移除 SELinux
    在 6.4 之前版本,套件有 bug,當使用 yum 安裝套件時,會卡在 SELinux 套件升級,並且重開機後會造成 kernel panic 無法開機。

    yum remove selinux*
    

    關閉防火牆

    // CentOS 7
    #> systemctl stop firewalld.service
    #> systemctl disable firewalld.service 
    #> firewall-cmd --state
    
    sendmail 轉信設定

    架設寄信主機為 192.168.21.75 (smtp.my.domain)
    編輯 /etc/mail/sendmail.cf

    # "Smart" relay host (may be null)
    DS[192.168.21.75]
    
    或者是
    # "Smart" relay host (may be null)
    DSsmtp.my.domain 
    

    需重啟 sendmail 服務

    [PHP] 檢查支援項目及編譯參數
    php -i
    
    [PHP] 檢查 extension 是否載入
    php -m | grep imagick
    
    [PHP] 設定 timezone

    編輯 /etc/php.ini

    date.timezone = 'Asia/Taipei'
    
    完整複製 Home 目錄

    由於 User 的 Home 目錄內有許多隱藏檔,若要完整複製它們,有兩個方法:

    方法一:可以複製成一個新目錄

    cd /home
    cp -a user1/ user1_new/ 
    

    方法二:複製到一個現有目錄內

    cd /home
    cp -a user1/.[^.]* user1_new/ 
    關閉 EXT3 的 AUTO FSCK

    原因:對於比較大的 filesystem,預設在 mount 次數 > 30 或 180 天後,系統若有重新開機,會自動作 FSCK,這會使 downtime 非常長。

    檢查檔案系統資訊

    # tune2fs -l /dev/VolGroup/LogVol

    Mount count: 1 Maximum mount count: 30 Last checked: Tue Apr 29 13:09:15 2014 Check interval: 15552000 (6 months)

    方法一:永久關閉 - tune2fs(適用於 RedHat 4.x/5.x)

    // 只關閉天數限制
    tune2fs -i 0 /dev/VolGroup/LogVol
    
    // 關閉 mount 次數與天數限制
    tune2fs -c 0 -i 0 /dev/VolGroup/LogVol

    方法二:永久關閉 - fstab(適用於 RedHat 4.x/5.x)
    編輯 /etc/fstab,在第 6 欄位修改成 0

    /dev/VolGroup00/arclogLV        /opt/oracle/arclog      ext3    defaults        1 0
    

    方法三:暫時關閉 - 重啟系統前(適用於 RedHat 4.x/5.x)
    重啟指令

    shutdown -rf
    

    -r  Reboot after shutdown

    -f  Skip fsck on reboot

    方法四:暫時關閉 - 重啟系統後(適用於 RedHat 4.x/5.x)

    在開機選單畫面,按 e > 在 kernel 行最後加上 fastboot

    檢查檔案的日期

    在 AIX 5.3 使用 ls -l 時,有時會無法顯示檔案的日期,替代方式有:

    # istat istflr.MMDB.CAPMM02.CAP.log0924.gz
    Inode 11 on device 50/6 File
    Protection: rw-r--r--
    Owner: 801(istflr)              Group: 801(db2adm)
    Link count:   1         Length 5572891 bytes
    
    Last updated:   Tue Sep 24 09:22:23 TAIST 2013
    Last modified:  Tue Sep 24 09:20:59 TAIST 2013
    Last accessed:  Thu Jan  9 14:28:05 TAIST 2014
    
    查詢 DHCP Server IP
    # dhclient eth0
    
    # grep dhcp-server-identifier /var/lib/dhclient/dhclient.leases 
    
    檢查 Linux 開機時所使用的 kernel 參數
    #> cat /proc/cmdline
    console=ttyAS0,115200 root=/dev/sdb1  rootfstype=ext3 rw  nwhwconf=device:eth0,hwaddr:24:cf:21:ba:22:46 phyaddr:0,watchdog:5000 mem=120M bigphysarea=2048
    
    數字換算工具 - bc

    // 基本運算

    #> bc
    scale=3     ;設定小數點 3 位
    239/60
    3.983
    quit 
    

    // 16 進制換算成 10 進制

    #> echo "ibase=16;A7" | bc
    167
    

    // 2 進制換算成 10 進制

    #> echo "ibase=2;11111111" | bc
    255
    
    [CentOS] 移除預設的 Apache Test Page
    cd /etc/httpd/conf.d
    mv welcome.conf welcome.conf.disabled
    service httpd restart
    系統帳號管理

    // 建立系統用帳號

    CentOS/RedHat)

    groupadd -r asterisk
    useradd -r -g asterisk -d /var/lib/asterisk -M asterisk
    

    Ubuntu/Debian)

    addgroup --system asterisk
    adduser --system --ingroup asterisk --home /var/lib/asterisk --no-create-home --shell /bin/bash asterisk
    

    // 強迫使用者在第一次登入後,修改他們的登入密碼

    先將帳號鎖定
    # usermod -L <username>
    
    變更帳號期限
    # chage -d 0 <username>
    
    解除帳號鎖定
    # usermod -U <username>

    // 修改既有帳號的設定,如註解 Comment

    # usermod -c "John" john
    

    // 限制某帳號不可遠端登入,但可以由其他允許帳號從遠端登入後,執行 su 切換到該帳號

    以 CentOS 為例:
    1. 編輯 /etc/security/access.conf,加上這幾行

    # The line 'cron crond' is required
    +:devrpt:cron crond tty1 tty2 tty3 tty4 tty5 tty6
    -:devrpt:ALL
    

    TIPs:

    內容格式為 permission : username: origins

    permission + 允許 或 - 拒絕
    username 帳號
    origins 來源,這可以是 tty 名稱'、主機/網域名稱、IP 。

    注意:在此例,必須加上 cron crond 這一行,否則該帳號的 crontab 會無法工作。

    2. 對於不同的登入服務,需要修改相應的安全設定檔

    • telnet : /etc/pam.d/remote
      • 修改後立即生效
    • SSH : /etc/pam.d/sshd
      • 修改後需重新載入 SSHD
    • Local 本機登入 : /etc/pam.d/login

    視需要將以下內容加入其中一項或多項檔案內

    # Limited users for remote login via telnet
    # Check the file /etc/security/access.conf
    account    required     pam_access.so
    

    // 鎖定帳號但不移除

    Lock
    #> passwd -l john
    #> chage -E 0 john
    
    Unlock
    #> passwd -u john
    #> chage -E john 
    

    TIPs:

    passwd 雖然可以鎖定帳號,但仍可以用 SSH-Key 登入。

    SSHFS 透過 SSH 掛載遠端主機目錄

    安裝 sshfs 套件

    for CentOS)
    先安裝 EPEL 套件庫
    yum install fuse sshfs
    modprobe fuse
    lsmod fuse
    
    for Ubuntu)
    apt-get install sshfs 
    

    使用 sshfs

    sshfs user@remote_host:/remote_directory /local_mount_point
    

    設定自動掛載

    1. 確認 module fuse 會自動啟動

    2. 編輯 /etc/fstab

    sshfs#root@10.233.10.212:/ /mnt/ssh fuse defaults 0 0
    
    tar 使用技巧
    不解開檔案的搜尋方式
    tar fzt myapp.tar.gz | grep keyword 
    
    壓縮檔案目錄時,想保留完整原始路徑,但都會出現訊息:tar: Removing leading `/' from member names
    試試這
    tar cf nagios.tar -C/ etc/nagios
    
    
    sudo 使用技巧

    必須先修改 sudoers

    以用戶 john 執行 SHELL
    sudo -u john bash -c "whoami"
    
    以用戶 john 開啟 vnc 服務,-H 可保持用戶的 HOME;否則會是 /root。
    sudo -H -u john bash -c "vncserver" 
    
    以用戶 devrpt 執行 db2_get_tbs_usage.sh -d devrptdb
    sudo -u devrpt -H -s /usr/local/bin/db2_get_tbs_usage.sh -d devrptdb
    或
    sudo -u devrpt -H bash -c "/usr/local/bin/db2_get_tbs_usage.sh -d devrptdb" 
    

    編輯 sudoers

    #> visudo
    
    alang  ALL=(devrpt) /bin/bash,/usr/local/bin/db2_get_tbs_usage.sh 
    

    TIPs:

    內容格式為
    使用者帳號  登入者的來源主機名稱=(可切換的身份)  可下達的指令

    如果要執行 SHELL Scripts,除了 scripts 路徑以外,還要加上 /bin/bash。

    不需修改 sudoers,但只能適用 root 執行

    su -l john -c "whoami"
    

    帳號 user1 需要有 root 權限,但不想讓他知道 root 密碼

    #visudo
    
    user1   ALL=(ALL)       ALL
    

    NOTEs:

    user1 登入後,執行 sudo -i 或 sudo -s ,輸入 user1 密碼後,就可以成為 root。

    Linux 的模組指令
    啟用模組
    modprobe <module name> option=<option name>
    
    列出已啟用的模組
    lsmod
    
    檢查特定模組的參數值
    cat /sys/module/<module name>/<option name>
    
    Perl 使用技巧

    列出已安裝的模組 - instmodsh

    #instmodsh
    
    cmd? l
    Installed modules are:
       Perl
       asterisk-perl
    cmd? quit
    
    rsync 備份/複製目錄

    備份或複製目錄,確保檔案及其屬性完全相同

    rsync -au --delete <source-dir> <target-dir>
    

    --delete 當 <source-dir> 裡的檔案被刪除時,<target-dir> 裡的同個檔案也會被刪除。

    複製目錄下大量檔案,但不要覆蓋原有檔案也不要出現提示(Rsync)

    rsync -avh --ignore-existing source-dir/ target-dir/
    

    複製前先用這指令列出檔案清單

    rsync -anvh --ignore-existing source-dir/ target-dir/ > files.list
    製作目前系統的臨時開機光碟
    mkbootdisk --iso --device ./boot.iso `uname -r`
    

    在 CetOS5.5 執行會出現錯誤:cp: cannot stat `/usr/lib/syslinux/isolinux.bin': No such file or directory
    Ans: 這是因為此版的 mkbootdisk script 內容有一行錯誤

    if [ -n "$isoimage" ]; then
        cfgfile=$MOUNTDIR/isolinux/isolinux.cfg
        bootmsg=$MOUNTDIR/isolinux/boot.msg
    
        # create an iso image; the directory is all we need
        [ -n "$verbose" ] && echo -n "Installing isolinux... "
        mkdir $MOUNTDIR/isolinux
        #cp /usr/lib/syslinux/isolinux.bin $MOUNTDIR/isolinux <----- 改這行
        cp /usr/share/syslinux/isolinux.bin $MOUNTDIR/isolinux
        [ -n "$verbose" ] && echo don

    ↑GO TO TOP↑

    安裝 JRE/JDK 6

    // 下載 jre-6u24-linux-i586-rpm.bin, jdk-6u24-linux-i586-rpm.bin

    chmod u+x jre-6u24-linux-i586-rpm.bin
    ./jre-6u24-linux-i586-rpm.bin 
    
    ## java ##
    alternatives --install /usr/bin/java java /usr/java/jre1.6.0_45/bin/java 20000
     
    ## javaws ##
    alternatives --install /usr/bin/javaws javaws /usr/java/jre1.6.0_45/bin/javaws 20000
     
    ## Java Browser (Mozilla) Plugin 32-bit ##
    alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /usr/java/jre1.6.0_45/lib/i386/libnpjp2.so 20000
     
    ## Java Browser (Mozilla) Plugin 64-bit ##
    alternatives --install /usr/lib64/mozilla/plugins/libjavaplugin.so libjavaplugin.so.x86_64 /usr/java/jre1.6.0_45/lib/amd64/libnpjp2.so 20000
    

    確認安裝

    # java -version
    java version "1.6.0_24"
    Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
    Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)
    
    改善硬碟 I/O 存取效能

    自 2010 年起所製造的硬碟開始使用 4096-byte(4K) sector size,而 Linux 在預設安裝下仍使用 512-byte 的磁區,就網路測試的數據顯示,以 ext3 磁區,2TB 的 SATA 硬碟,樣本檔案大小 1TB,作檔案複製時,使用 4K-byte sector 竟比 512-byte sector 減少 7 小時。

    指令:
    fdisk -> x  extra functionality (experts only) -> setting the start sector("b") to 64

    測試:

    hdparm -tT /dev/sda1

    參考連結:

    Notes: 並不是所有廠牌的硬碟都有支援 4096-byte sector size。

    ↑GO TO TOP↑

    強制更新 partition table - partprobe

    使用 fdisk 變更 partition table 後,若不想作 reboot 但要立即更新,可以使用指令 partprobe。

    Putty 登入 Linux 執行有關 ncurses 的文字介面時會出現亂碼

    Putty 的設定)

    • Terminal > Use background colour to erase screen [check]
    • Window > Translation
      • Received data assumed .... character set: [UTF-8]
      • Treat CJK ambiguous characters as wide [uncheck]
    • Connection > Data > Terminal-type string [linux]
    解決 btmp 紀錄檔案肥大問題

    敘述:/var/log/btmp 檔案有 1.xGB 以上。
    原因:btmp 用來紀錄系統登入的資訊,若出現異常登入現象,會造成此檔增大。
    解決:使用 lastb 指令檢查所有登入紀錄是否正常,要避免異常的登入,可以修改 SSH Port。

    // 清空 btmp 內容

    cat /dev/null > /var/log/btmp
    

    ↑GO TO TOP↑

    刪除包含 dash 符號的檔名
    rm ./-1234567.txt
    
    掛載 Windows 分享目錄

    CentOS 5)
    ( How to mount remote Windows shares )

    mount.cifs //winbox/getme /mnt/win -o ip=123.123.123.123,username=sushi,password=yummy
    

    ※ mount.cifs 指令在 samba-client 套件內。

    關閉 SELinux

    關於 SELinux

    // 永久 Disable SELinux
    重開機後自動關閉

    # sed -i 's/SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config
    

    手動立即關閉

    #setenforce 0
    

    // 檢查 SELinux 的狀態

    #sestatus
    SELinux status:                 disabled 
    

    // 開機時關閉
    編輯開機選單

    grub append> ro root=/dev/VolGroup00/LogVo100 selinux=0 enforcing=0
    

    ↑GO TO TOP↑

    校時(NTPD)及變更系統的時區-timezone

    校時:

    yum install ntp
    ntpdate pool.ntp.org
    chkconfig ntpd on
    service ntpd start 
    

    Crontab:
    /etc/crontab

    10 * * * * root (/usr/sbin/ntpdate tw.pool.ntp.org && /sbin/hwclock -w) &> /dev/null
    

    檢查校時:

    # ntpstat
    synchronised to NTP server (204.9.54.119) at stratum 2
       time correct to within 121 ms
       polling server every 64 s
    
    # ntpq -p
         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
    +w1-wdc.ipv4.got 10.0.77.54       4 u   14   64  377  214.365  -16.459   8.887
     clock02.chil01. 204.9.54.119     2 u   15   64  377  278.195   -1.254   0.427
    *ntp.your.org    .CDMA.           1 u   13   64  377  196.313  -16.884   0.456
     LOCAL(0)        .LOCL.          10 l   14   64  377    0.000    0.000   0.001 
    

    變更時區:
    for CentOS 5)

    # ln -s /usr/share/zoneinfo/Asia/Taipei /etc/localtime
    

    或者

    # system-config-date
    

    設定時間:

    # date -s "2 OCT 2006 18:00:00"
    # /sbin/hwclock --systohc 
    
    WGET 技巧

    // Proxy 設定

    $ export http_proxy=http://username:password@this.is.proxy.ip:port
    $ export http_proxy=http://windomain\\username:password@this.is.proxy.ip:port

    或 修改 /etc/wgetrc

    http_proxy=http://windomain\username:password@this.is.proxy.ip:port/
    這裡的 domain 與 username 之間不用雙反斜線。

    // 解決:有些下載時,檔名會包含有 URL 字串

    wget 'HTTP URL Link'

    // 下載整個網頁 HTML 檔(必須開啟 Index of)

    wget -r --no-parent http://xxx.xxx.xxx/aaa/
    
    YUM 套件管理技巧

    // 各種舊版本的套件庫位址

    http://vault.centos.org/

    // 如果想將多個 CD 的 ISO 檔合併成一個 DVD ISO,可以使用附件區的 mkdvdiso.sh,這只能使用在 RedHat/CentOS 版本,使用方法如下

    yum install anaconda-runtime mkisofs
    
    ./mkdvdiso.sh cd/ /tmp/CentOS-5.5-i386-bin-DVD.iso

    TIPs:

    所有 CD ISO 檔放在 cd/ 目錄內

    必須關閉 SELinux

    輸出檔路徑必須是絕對路徑

    // 清除最新套件庫清單及暫存的套件檔

    yum clean all
    

    // 搜尋套件的某一個檔案

    yum whatprovides <*/xxx.so>
    

    // 下載 RPM 套件

    yum -y install yum-utils.noarch
    yumdownloader <package-name>
    
    ; Extract downloaded RPM
    rpm2cpio dekiwiki-10.0.1-3.1.noarch.rpm | cpio -idmv 
    

    // 安裝時臨時啟用一個不常用的套件庫位址

    yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel
    

    // 使用光碟 ISO方式來升級系統

    # vi /etc/yum.repo.d/CentOS-Media.repo
    
    [c6-local]
    name=CentOS-$releasever - Media
    baseurl=file:///mnt/iso/
    gpgcheck=0
    enabled=0
    
    NOTE: enabled=0,不是 1。將 DVD 掛載為 /mnt/iso。 
    
    # yum --disablerepo=\* --enablerepo=c6-local upgrade
    

    // 安裝本機端的 RPM 套件

    yum --nogpgcheck install htop-1.0.2-1.el5.rf.x86_64.rpm
    

    // 列出所有套件庫位址

    yum repolist
    

    // 列出已安裝套件

    yum list installed
    yum list installed |tail -n +3|cut -d' ' -f1 > installed_packages.lst
    或
    rpm -qa > installed_packages.lst
    
    yum -y install $(cat installed_packages.lst) 
    

    // 安裝 EPEL 套件庫
    EPEL - Extra Packages for Enterprise Linux

    rpm -ivh http://mirror01.idc.hinet.net/EPEL/5/i386/epel-release-5-4.noarch.rpm
    
    rpm -ivh http://mirror01.idc.hinet.net/EPEL/6/i386/epel-release-6-8.noarch.rpm 
    

    // 安裝 ELRepo 套件庫
    ELRepo - The Community Enterprise Linux Repository

    rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org
    
    for RHEL-5, CENTOS-5
    rpm -Uvh http://elrepo.org/elrepo-release-5-2.el5.elrepo.noarch.rpm
    
    for RHEL-6, CENTOS-6
    rpm -Uvh http://elrepo.org/elrepo-release-6-3.el6.elrepo.noarch.rpm
    

    // 安裝 RPMforge/RepoForge 套件庫
    RPMforge 是由 Dag 及其他包裝者合作維護的。他們為 CentOS 提供超過 5000 個套件,包括 wine、vlc、mplayer、xmms-mp3 及其他受歡迎的媒體工具。它並不是 Red Hat 或 CentOS 的一部份,但卻是為那些發行版本而設計的。

    // CentOS 如何補安裝套件組
    系統在第一次安裝時,都可以選擇要安裝哪些套件組,假使之後系統要補裝某套件組,例如 GNOME 視窗套件,可以使用這些指令,而不用一一找出有哪些相依性的套件名稱。

    列出有哪些套件組可安裝
    # yum grouplist
    安裝 GNOME 視窗套件組
    # yum groupinstall "GNOME Desktop Environment"
    移除套件組
    # yum groupremove "Office Suite and Productivity" "Dial-up Networking Support"
    

    // 設定 proxy
    編輯 /etc/yum.conf

    proxy=http://<username>:<password>@<this.is.proxy.ip:<port>/
    proxy=http://windowsad\username:password@proxy.server:port/

    // 安裝本機上的 RPM

    # yum localinstall my.rpm
    

    // 建立 YUM 套件庫主機

    安裝套件 createrepo

    createrepo /source/path/reas5
    

    ↑GO TO TOP↑

    DNS 除錯指令 dig 用法

    很早以前 nslookup 就被 dig 所取代,看看這個新工具的用法:

    // 以系統所設的 DNS server(resolv.conf) 查詢網域
    # dig www.osslab.org.tw

    // 以指定的 DNS server(8.8.8.8)查詢網域,並且列出所有 type 紀錄
    # dig @8.8.8.8 osslab.org.tw ANY

    type 可以設 ANY, A, MX, SIG, etc...

    變更 hostname,無需重啟主機

    以 RedHat/CentOS 為例)
    http://kbase.redhat.com/faq/docs/DOC-8646

    1. 編輯 /etc/sysconfig/network
      HOSTNAME=A.B.C.D
    2. 編輯 /etc/hosts
      111.222.333.444     A.B.C.D    A
    3. 執行指令 hostname
      # hostname A.B.C.D
    4. 重啟 Syslog
      # service syslog restart
    5. Reboot

    如果按照上述的 SOP 仍是改不了目前的主機名稱,可能是其他地方有作設置,檢查下列的項目:

    • 檢查 /etc/sysconfig/networking/profiles/default
      這裡是透過 XWindows 網路設定產生的檔案
    • 檢查 /etc/sysctl.conf
      kernel.hostname=xxxx.xxxx.xxxx.xxxx
       

    Ubuntu/Debian)

    # vi /etc/hostname
    [my_host_name]
    
    # sudo /etc/init.d/hostname.sh start 
    

    其他 Linux)

    # sudo echo [my_host_name] > /proc/sys/kernel/hostname
    

    ↑GO TO TOP↑

    CPU/Memory Benchmark

    軟體名稱:nbench
    官網連結:http://www.tux.org/~mayer/linux/bmark.html

    安裝方式
    #>tar -xzf nbench-byte-2.2.3.tar.gz
    #>cd nbench-byte-2.2.3
    #>make

    使用方法
    #>./nbench

    軟體名稱:SysBench
    官網連結:http://sysbench.sourceforge.net/
    應用範例:http://poller.se/2010/01/rackspace-c...vs-amazon-ec2/

    Linux 系統作燒機/壓力測試(stress test)的工具

    軟體名稱:stress-1.0.2

    RPM 安裝檔下載
    http://dag.wieers.com/rpm/packages/stress/

    使用方法

    stress --cpu 2 --io 4 --vm 1 --vm-bytes 128M --timeout 10s
    

    軟體名稱:SysBench
    官網:http://sysbench.sourceforge.net/index.html

     

    ↑GO TO TOP↑

    RedHat/CentOS 安裝時如何載入 Raid Card 驅動程式

    主機有 floppy 時,將下載的驅動程式磁碟片映像檔,使用 dd 指令寫入空白磁碟片,在使用安裝光碟開機後,輸入

    linux dd
    

    主機沒有 floppy 時,將下載的驅動程式磁碟片映像檔,上傳到 FTP/NFS/HTTP 主機,在使用安裝光碟開機後,輸入

    linux dd=ftp://ftp.server.domain/this/is/driver.img
    

    詳細教學:http://www.redhat.com/docs/manuals/e...DRIVERDISK-WHY

    CentOS 5 無法使用 4GB 以上 RAM

    CentOS 在 v5 以後版本,kernel 的套件作了些改變,如果要使用 4GB 以上 RAM,系統必須安裝有 kernel-PAE 套件檔,這個套件安裝後系統會新增一個可支援 4GB 以上 RAM 的 kernel,系統在重新開機後若使用這個 kernel 進行開機,系統就可以正常使用 4GB 以上 RAM 了。

    #> yum install kernel-PAE

    官網相關討論串  

    ↑GO TO TOP↑

    遠端桌面管理-VNC

    設定VNC作遠端連接時的桌面與本地端桌面為同一個,且每次重開機時自動生效。

    //檢查模組 vnc.so 是否存在
    shell>locate vnc.so

    //開機啟動圖形介面時自動載入 vnc.so
    shell>vi /etc/X11/XF86Config

    Section "Module"
            Load  "dbe"
            Load  "extmod"
            ...
            Load  "vnc"

    //設定 VNC 的連接認證
    shell>vi /etc/X11/XF86Config

    Section "Screen"
            ...
            Option "SecurityTypes" "VncAuth"
           Option "UserPasswdVerifier" "VncAuth"
           Option "PasswordFile" "/root/.vnc/passwd"
            ...

    // 修改啟動設定檔 xstartup
    $ vi ~/.vnc/xstartup

    使用 GNOME 為桌面時

    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot -solid grey
    #vncconfig -iconic &
    xterm -geometry 80×24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    #twm &
    gnome-session –sm-disable
    gnome-session
    

    使用 KDE 為桌面時

    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot -solid grey
    #vncconfig -iconic &
    xterm -geometry 80×24+10+10 -ls -title "$VNCDESKTOP Desktop" &
    twm &
    startkde &
    

    //變更 VNC 密碼
    shell>vpcpasswd /root/.vnc/passwd

    PS. 如果連接時不想作認證,可以修改為

    Section "Screen"
      ...
      Option "SecurityTypes" "None"
    EndSection
    

    ↑GO TO TOP↑

    RPM 套件管理

    // 查詢未安裝的rpm套件的詳細資訊
    shell> less something.rpm

    // 查詢已安裝的套件的詳細資訊
    shell> rpm -qi <rpm_name>

    // 查詢已安裝套件是 32 或 64 bit

    shell> rpm -qa --qf "%{n}-%{v}-%{r}.%{arch}\n" | grep -i <package-name>

    // 查詢未安裝的套件資訊
    shell> rpm -qpi your.rpm

    // 列出一個尚未安裝的 RPM 所包含的檔案列表
    shell> rpm -qlp your.rpm

    // 查詢檔案所屬的套件名稱
    shell> rpm -qf /usr/bin/ksh

    // 編譯 source rpm
    安裝 rpmbuild 套件
    CentOS5.5) yum install rpm-build

    // 不解開直接編譯
    rpmbuild --rebuild something.src.rpm

    // 建立 RPM 套件

    如何找出device名稱(/dev/sda)與LUN channel的對應列表?

    使用工具 sg_utils,下載位置  http://sg.torque.net/sg/sg3_utils.html

    執行指令 sg_map -i

    root@oradb2 ~]# sg_map -i
    /dev/sg0  /dev/sda  ServeRA   rootvg            V1.0
    /dev/sg1  /dev/sdb  ServeRA   datavg            V1.0
    /dev/sg2  IBM-ESXS  VPBA073C3ETS11 N  A2E8
    /dev/sg3  IBM-ESXS  VPBA073C3ETS11 N  A2E8
    /dev/sg4  IBM-ESXS  VSC7160           1.07
    /dev/sg5  /dev/sdd  i-Raid    gtnas02--VOL#01   R001
    /dev/sg6  /dev/sdc  i-Raid    x3650---VOL#00    R001
    /dev/sg7  /dev/nst0  HP        Ultrium 2-SCSI    F6AW
    /dev/sg8  HP        NS E1200-160      5929
     

      

    執行指令 sg_scan -i

     [root@oradb2 ~]# sg_scan -i
    /dev/sg0: scsi0 channel=0 id=0 lun=0 [em]
        ServeRA   rootvg            V1.0 [rmb=0 cmdq=1 pqual=0 pdev=0x0]
    /dev/sg1: scsi0 channel=0 id=1 lun=0 [em]
        ServeRA   datavg            V1.0 [rmb=0 cmdq=1 pqual=0 pdev=0x0]
    /dev/sg2: scsi0 channel=1 id=0 lun=0 [em]
        IBM-ESXS  VPBA073C3ETS11 N  A2E8 [rmb=0 cmdq=1 pqual=0 pdev=0x0]
    /dev/sg3: scsi0 channel=1 id=1 lun=0 [em]
        IBM-ESXS  VPBA073C3ETS11 N  A2E8 [rmb=0 cmdq=1 pqual=0 pdev=0x0]
    /dev/sg4: scsi0 channel=3 id=0 lun=0 [em]
        IBM-ESXS  VSC7160           1.07 [rmb=0 cmdq=0 pqual=0 pdev=0xd]
    /dev/sg5: scsi1 channel=0 id=0 lun=0
        i-Raid    gtnas02--VOL#01   R001 [rmb=0 cmdq=1 pqual=0 pdev=0x0]
    /dev/sg6: scsi1 channel=0 id=0 lun=1
        i-Raid    x3650---VOL#00    R001 [rmb=0 cmdq=1 pqual=0 pdev=0x0]
    /dev/sg7: scsi1 channel=0 id=1 lun=0
        HP        Ultrium 2-SCSI    F6AW [rmb=1 cmdq=0 pqual=0 pdev=0x1]
    /dev/sg8: scsi1 channel=0 id=1 lun=1
        HP        NS E1200-160      5929 [rmb=0 cmdq=0 pqual=0 pdev=0xc]

     

    ↑GO TO TOP↑

    Apache 網頁認證與  Windows Active Directory 整合

    在要作限制存取的網頁子目錄下,新增一個隱藏檔 .htaccess,內容如下:

    範例一

    AuthMySQLEnable off
    AuthType Basic
    AuthName "USE YOUR WINDOWS ACCOUNT"
    AuthLDAPURL "ldap://myad.mydomain.com.tw/ou=IT,dc=mydomain,dc=com,dc=tw?sAMAccountName?sub?(objectClass=*)"
    # Using this to bind
    AuthLDAPBindDN "CN=John,OU=IT,DC=mydomain,DC=com,DC=tw"
    AuthLDAPBindPassword "123456"
    # When checking for group membership, use the DN of the user, not the HTTP entry
    AuthLDAPGroupAttributeIsDN on
    
    #require valid-user
    #require user Bob
    require valid-user 

    註:
    myad.mydomain.com.tw ; AD 主機名稱
    mydomain.com.tw ; 網域名稱
    ou=IT ; 僅對 IT 單位以內的帳號作認證,若想對所有網域帳號作認證,可刪除這。
    AuthLDAPBindDN ; 設定一組存在的AD帳號作連結依據,尤其對那些有設定限制來賓連結的AD。
    AuthLDAPBindPassword ; 前面所提的帳號的密碼。

    範例二

    AuthMySQLEnable off
    
    AuthType Basic
    
    # What the users will see as a "title" of the login prompt:
    #AuthName "Domain Credentials Required"
    AuthName "Your Domain AD's account required"
    
    # use plain LDAP authentication:
    AuthzLDAPMethod ldap
    
    # FQDN resolvable hostname (or IP) of the Windows
    # AD domain controller:
    AuthzLDAPServer myad.mydomain.com.tw
    
    # Distinguished Name (DN) of the user that mod_authz_ldap should
    # bind to the LDAP server as when searching for the domain user
    # provided by the web client (Active Directory does not allow
    # anonymous binds).  Note, the cn attribute corresponds to the
    # "Display Name" field of a user's account in the Active Directory
    # Users and Computers tool, not their login username:
    AuthzLDAPBindDN "cn=John,ou=IT,dc=mydomain,dc=com,dc=tw"
    
    # the BindDN user's password:
    AuthzLDAPBindPassword "123456"
    
    # LDAP Attribute where the user's domain login username is stored in:
    AuthzLDAPUserKey sAMAccountName
    
    # Base DN to begin searching for users from in the LDAP:
    #AuthzLDAPUserBase "ou=TestOU,dc=mydomain,dc=com,dc=tw"
    AuthzLDAPUserBase "ou=IT,dc=mydomain,dc=com,dc=tw"
    
    # Search in sub-containers below the UserBase DN if
    # necessary (most likely):
    AuthzLDAPUserScope subtree
    
    # Require the username and password provided to be a valid
    # user in the AD:
    require valid-user
    
    # log verbosity level:
    AuthzLDAPLogLevel info 

    要取得 AD 帳號所對應的 LDAP 樹目錄帳號的連結,可以透過 LDAP Browser 這個免費工具(試用30天)。

    延伸閱讀:

    ↑GO TO TOP↑

    編譯安裝 MRTG 流量監控套件

    系統環境:CentOS 5.2

    下載套件:http://oss.oetiker.ch/mrtg/download.en.html

    編譯套件

    ./configure --prefix=/opt/mrtg-2.16.2 \
    --with-gd=/usr/include \
    --with-gd-lib=/usr/lib \
    --with-gd-inc=/usr/include \
    --with-png=/usr/include \
    --with-zlib=/usr/include 

    註:如果出現找不到 GD Library 的錯誤訊息,請安裝 gd-devel  套件

    #yum install gd-devel

    安裝套件

    make
    make install
    

    ↑GO TO TOP↑

    指令 grep 的強化版

    有擔任過 IBM AIX 系統管理員的人,在使用 Linux 的 grep 指令時,一定會不習慣,因為在 AIX 上的 grep 有個 -p 顯示段落的參數,但 Linux 的 grep 卻沒有這功能。這裡教你如何寫一個可顯示段落的 grep 替代指令。

    方法一:pgrep.sh

    reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown. (click for details)

    將它放在 /usr/local/bin,並且 chmod 0755 賦予可執行的權利。

    用法:
    pgrep.sh <file.name> <filter.string>
    cat <file.name> | pgrep.sh - <filter.string>

    另一個選擇,用 perl 也辦得到喔

    cat <file.name> | perl -00 -ne 'print if /<filter.string>/'

    方法二:pgrep.awk

    reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown. (click for details)

    使用方法

    chmod 0755 pgrep.awk
    mv pgrep.awk /usr/local/bin
    cat test.txt | pgrep.awk <keyword> 
    

     

    ↑GO TO TOP↑

    關於 Joomla 1.5.x 網站被駭後所做的因應措施
    1. 升級 Joomla 至最新版。
    2. 關閉 php 參數 allow_url_fopen。

    相關連結:

    解開 RPM內的檔案,但不作安裝

    rpm2cpio xxx.rpm | cpio -idmv

    關閉  USB 儲存裝置的連接但不能影響 USB 鍵盤/滑鼠  

    modprobe -r usb_storage

    vi /etc/modprobe.conf

    alias usb_storage off
    

    ↑GO TO TOP↑

    執行 umount 遇到 device is busy,但又不能重開機,該怎辦?

    //檢查那些程序及用戶使用該目錄

    fuser -m -v <mount_point>
    lsof | grep <mount_point>
    

    //刪除無效的程序

    fuser -i -k <mount_point>
    

    //以上都無效,可重啟 NFS Client daemon,但其他 NFS 目錄也會被迫中斷。

    service netfs stop
    service netfs start
    

    // 網友提供的另一個方法

    umount -l <mount_point>
    

    ↑GO TO TOP↑

    如何使用 patch/diff 指令

    更多教學:http://linux.chinaitlab.com/administer/811248.html
    單一個檔案時)

    //建立更新檔
    #diff -uN old.code new.code > patch.file
    //套用更新檔
    #patch < patch.file
    //回復更新前
    #patch -RE < patch.file
    

    連續多個檔案時)

    //建立更新檔
    #diff -rupN olddir newdir > patch.dir
    //套用更新檔
    #patch -p1 < patch.dir
    //回復更新前
    #patch -RE -p1 < patch.dir
    

    找出兩個目錄的所有原始檔 .c 內容不一致的檔案

    目錄一: asterisk_orig/
    目錄二: asterisk_patched/
    
    $ cd asterisk_orig; find ./ -name "*.c" -exec md5sum -b {} \; > ../asterisk_orig.md5; cd ../
    $ cd asterisk_patched; find ./ -name "*.c" -exec md5sum -b {} \; > ../asterisk_patched.md5; cd ../
    
    $ diff asterisk_orig.md5 asterisk_patched.md5 
    
    273c273
    < 894a111d1efa5901471820e203503039 *./channels/chan_sip.c
    ---
    > 00116baac23473049b5801c9287fb4be *./channels/chan_sip.c
    

    TIPs

    前提是 asterisk_orig 與 asterisk_patched 目錄架構及檔案名稱必須完全一樣,這通常用來找出 asterisk_patched 目錄內被更新過了哪些 .c 檔案。

    編輯器 VI 必學招

    Notes: 指令輸入注意大小寫的不同,輸入大寫的英文是用 shift + 英文字。

     命令執行(注意大小寫不同)  使用說明  使用技巧
     i 以插入字元方式進入編輯模式 與 a 同為進入編輯模式,兩者差別只有游標的起始位置不同
     a 以附加字元方式進入編輯模式  
     h j k l 操控游標的移動,h--向左, j--向下, k--向上, l--向右 當遇到部份作業系統不支援方向鍵使用時,可用此方式代替
     :1 游標移到第一行  
     :22 游標移到第22行 作程式除錯找特定行列時會用到
     gg 游標移至檔首   
     G 游標移至檔尾 編輯大檔案時要移到檔尾不用一頁一頁捲
     :wq 存檔後離開   
     :q! 不存檔離開  如不小心編錯內容,只要沒存檔前就可以用此法離開,保存原始內容
     :set nu 顯示行號  作程式除錯時必用 
     :set nonu 取消行號顯示  
     dd 刪除目前這一行  
     10dd 刪除目前以下10行(含本列)  
     yy 複製目前這一行  
     3yy 複製目前以下3行(含本列)  
     p 貼上  
     :%s/old/new/g 內容包含有old字元的都會取代成new字元   
     /keyword 搜尋文字  
     /\KeyWord 搜尋文字(不分大小寫)  
     ~ 大小寫互換  
     :%s/[ctrl+V and ctrl+M]//g 消除斷行符號 ^M  
     :! ls -l 執行外部 SHELL 指令  :!! 上一個指令
     :vsplit my.file 左右分割視窗且左邊載入 my.file  ctrl + w + w 切換視窗
     :split my.file 上下分割視窗 ctrl + w + w 切換視窗

     

    比對兩個檔案內容

    vim -d file1 file2
    

    啟用 VI Highlight Color

    #> yum install vim-enhanced
    
    NOTE:必須使用 vim 才會有顏色顯示;vi 不支援顏色
    

    Putty 顏色設定優化

    ANSI Blue:         Red:74 Green:74 Blue:255
    ANSI Blue Bold: Red:140: Green:140 Blue:255 
    

    FAQ:

    Q: 錯誤訊息:A line cannot be longer than 2048 characters.
    A: 這是因為 VI 的每一行字數不可超過 2048 字元,遇到時可以將超過字數的行刪除,另存一個檔。

    cut -c1-2047 before.log > after.log
    


    ↑GO TO TOP↑ 

    比 top 還好用的工具 - htop

    下載位置 http://dag.wieers.com/rpm/packages/htop/
    官方網站 http://htop.sourceforge.net/

    畫面預覽

    htop.png 

    指令 dd 的用法
    // 備份MBR
    dd if=/dev/hdx of=/path/to/image count=1 bs=512
    
    // 光碟轉成 iso 檔
    dd if=dev/cdrom of=/root/cd.iso
    
    // 銷毀硬碟資料
    dd if=/dev/urandom of=/dev/hda1
    
    // 備份整個 USB-Flash
    dd if=/dev/sdb | gzip > ./my-usb_flash.img.gz
    
    //還原 USB-Flash
    gzip -dc ./my-usb_flash.img.gz | dd of=/dev/sdb
    
    // 建立一個測試用的大檔案10GB
    dd if=/dev/zero of=/path/to/image bs=1G count=10
    NOTE: 新版 Linux 可以改用指令
    fallocate -l 1G test.img 
    

    ↑GO TO TOP↑

    Can't mount remotely Linux host on AIX

    Q: Can't mount remotely Linux host on AIX ????

    A: To run the following commands on your AIX.
    #nfso -o nfs_use_reserved_ports=1
    #nfso -o portcheck=1

    If the configuration would be enabled automatically on system RESTART, edit the file /etc/rc.nfs , and to add above commands in the bottom.

    分析CPU/Memory使用狀況 - ps command

    // CPU 使用率最高前10排名
    ps aux | head -1; ps aux | sort -rn +2 | head -10
    or
    ps aux | head -1; ps aux | sort -rn -k 3 | head -10

    // Memory 使用率最高前10排名
    ps aux | head -1; ps aux | sort -rn +3 | head
    or
    ps aux | head -1; ps aux | sort -rn -k 4 | head

    // 優先權最高的程序
    ps -eakl | sort -n +6 | head
    or
    ps -eal | sort -n -k 7 | head

    // 程序以 nice 值排序
    ps -eakl | sort -n +7
    or
    ps -eal | sort -n -k 8

    // 程序以執行時間排序
    ps vx | head -1;ps vx | grep -v PID | sort -rn +3 | head -10
    or
    ps vx | head -1;ps vx | grep -v PID | sort -rn -k 4 | head -10

    // 程序以 I/O 排序
    ps vx | head -1; ps vx | grep -v PID | sort -rn +4 | head -10
    or
    ps vx | head -1; ps vx | grep -v PID | sort -rn -k 5 | head -10

    // 等待中的程序
    ps vg | head -1; ps vg | grep -w wait

    指令 ls 技巧

    列出目錄名稱

    ls -l | grep ^d
    
    ls -d */
    
    ls myfile[1,3,5,7,9]
    
    ls myfile[1-9]
    

    ↑GO TO TOP↑

    Powered by MindTouch Core