2020年6月11日 星期四

Mac loaded driver script

#!/bin/bash
 
# MacOS Catalina (10.15):  Darwin 19.x.0
kernelver=`uname -a | awk '{print $3}'`
kernelver1=$(echo $kernelver | cut -d "." -f 1)
kernelver2=$(echo $kernelver | cut -d "." -f 2)
kernelver=$kernelver1.$kernelver2
echo "Check Mac OS kernel version: Darwin kernel version : $kernelver"


if [ $(echo "$kernelver >= 19.0" |bc) -eq 1 ]; then
    echo "  Mac OS version >= 10.15.x"
   
    kernelpath=`sudo pwd`
    if [ "$kernelpath" != "/Library/Extensions" ]; then
        echo "  In path $kernelpath"
        if [ -d "/Library/Extensions/ACS6x.kext" ]; then
            # 目錄 存在
            echo "  Directory /Library/Extensions/ACS6x.kext exists."
           
            echo "  Remove ACS6x.kext driver"
            sudo rm -rf /Library/Extensions/ACS6x.kext
           
            echo "  Copy driver to system"
            sudo cp -R ACS6x.kext /Library/Extensions/
            sudo cd /Library/Extensions/
           
        else
            # 目錄 不存在
            echo "  Directory /Library/Extensions/ACS6x.kext does not exists."
           
            echo "  Copy driver to system"
            sudo cp -R ACS6x.kext /Library/Extensions/
            sudo cd /Library/Extensions/
        fi
       
    else
        if [! -d "/Library/Extensions/ACS6x.kext" ]; then
            # 目錄 不存在
            echo "  Error: Directory /Library/Extensions/ACS6x.kext does not exists."
            exit 0
        fi
       
    fi
   
    echo "  Change ACS6x.kext driver owner"
    sudo chmod -R 755 ACS6x.kext
    sudo chown -R root:wheel ACS6x.kext
    sudo xattr -d -r ACS6x.kext
   
    driverstat=`sudo kextstat|grep Accusys`
    if [ "$driverstat" != "" ]; then
        echo "  Kextunload ACS6x.kext driver"
        sudo kextunload ACS6x.kext
        sudo kextunload ACS6x.kext
    fi
   
    echo "  Clear system cache"
    sudo kextcache -clear-staging
   
    echo "  Loaded ACS6x.kext driver"
    sudo kextload ACS6x.kext
   
    echo "  Rebiuld system cache"
    #sudo kextcache -system-prelinked-kernel
    #sudo kextcache -system-caches
    sudo kextcache -i /

else
    echo "Mac OS version < 10.15.x"
   
    driverstat=`sudo kextstat|grep Accusys`
    if [ "$driverstat" != "" ]; then
        echo "  Kextunload ACS6x.kext driver"
        sudo kextunload ACS6x.kext
        sudo kextunload ACS6x.kext
    fi
   
    echo "Kextload ACS6x.kext driver"
    sudo chmod -R 755 ACS6x.kext
    sudo chown -R root:wheel ACS6x.kext
    sudo kextload ACS6x.kext
   
    if [ $(echo "$kernelver >= 14.0" |bc) -eq 1 ]; then
        sudo touch /Library/Extensions
    else
        sudo touch /System/Library/Extensions
    fi
   
fi

2020年6月9日 星期二

Linux grep 用法

*** 用‘grep’搜索文本文件
    如果您要在幾個文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。
    假設您正在‘/usr/src/linux/Documentation’目錄下搜索帶字符串‘magic’的文件:
 
    $ grep magic /usr/src/linux/Documentation/*
    sysrq.txt:* How do I enable the magic SysRQ key?
    sysrq.txt:* How do I use the magic SysRQ key?
 
    其中文件‘sysrp.txt’包含該字符串,討論的是 SysRQ 的功能。
 
    默認情況下,‘grep’隻搜索當前目錄。如果此目錄下有許多子目錄,‘grep’會以如下形式列出:
 
    grep: sound: Is a directory
 
    這可能會使‘grep’的輸出難於閱讀。這裡有兩種解決的辦法:
 
    明確要求搜索子目錄:grep -r
    或忽略子目錄:grep -d skip
    當然,如果預料到有許多輸出,您可以通過 管道 將其轉到‘less’上閱讀:
 
    $ grep magic /usr/src/linux/Documentation/* | less
 
    這樣,您就可以更方便地閱讀。
    有一點要注意,您必需提供一個文件過濾方式(搜索全部文件的話用 *)。如果您忘了,‘grep’會一直等著,直到該程序被中斷。如果您遇到了這樣的情況,按 ,然後再試。
 
 
    命令行參數:
    grep -i pattern files :不區分大小寫地搜索。默認情況區分大小寫,
    grep -l pattern files :隻列出匹配的文件名,
    grep -L pattern files :列出不匹配的文件名,
    grep -w pattern files :隻匹配整個單詞,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
    grep -C number pattern files :匹配的上下文分別顯示[number]行,
    grep pattern1 | pattern2 files :顯示匹配 pattern1 或 pattern2 的行,
    grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行。


*** grep OR
    以下幾種方法,也可以實現 or 搜索,會對兩種字串進行搜索,只要符合其中一個條件,即會印出那行的內容:
    $ grep ‘pattern1\|patten2’ file.txt
    $ grep -E ‘pattern1|pattern2’ file.txt
    $ egrep ‘pattern1|pattern2’ file.txt
    $ grep -e pattern1 -e pattern2 file.txt

*** grep AND
    $ grep -E ‘pattern1.*pattern2’ file.txt
    $ grep -E ‘pattern1.*pattern2|pattern2.*pattern1’ file.txt
    $ grep -e pattern1 -e pattern2 file.txt


*** grep 要看前兩行或後一行的資訊,該怎麼找呢?

    $ grep -A1 -B2 "5_keyword" file.txt
    3
    4
    5_keyword
    6
 
    grep 參數說明 OPTIONS
    -A NUM, --after-context=NUM  從關鍵字點往後顯示 NUM 行數
       Print NUM lines of trailing context after matching lines. Places a line containing -- between con-
       tiguous groups of matches.
    -B NUM, --before-context=NUM 從關鍵字點往前顯示 NUM 行數
       Print NUM lines of leading context before matching lines. Places a line containing -- between con-
       tiguous groups of matches.
 
 
*** grep 參數說明 OPTIONS
    -n:顯示行數,顯示關鍵字在文件的第幾行出現
    --color=auto:顯示顏色,顯示符合字串的特徵會以顏色來表示
 
    例:dmesg | grep -n -A3 -B2 --color=auto sda
 
*** 用‘grep’搜索文本文件
    如果您要在幾個文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。
    假設您正在‘/usr/src/linux/Documentation’目錄下搜索帶字符串‘magic’的文件:
 
    $ grep magic /usr/src/linux/Documentation/*
    sysrq.txt:* How do I enable the magic SysRQ key?
    sysrq.txt:* How do I use the magic SysRQ key?

*** find /usr/local/ -name "*.php" -exec grep -l 'function do_action' {} \;

    /usr/local 要尋找的路徑
    *.php 要尋找的檔案類型
    -exec 找到符合的檔案後接著執行那個指令
    -l 顯示檔路路徑
    function do_action 檔案內容有這個keyword的檔名
 
*** 如何殺死defunct殭屍程序
    ps aux | grep defunct ,如果程序為defunct
    ps -ef | grep defunct | grep -v grep | awk '{print "kill -9 " $2,$3}'  //PS. $2 PID $3 PPID

*** linux下find與grep管道命令的組合使用:

    ** 使用find與grep
    
    1.查找所有".h"文件(非組合命令)
    find /PATH -name "*.h"
    
    2.查找所有".h"文件中的含有"helloworld"字符串的文件(組合命令)
    find /PATH -name "*.h" -exec grep -in "helloworld" {} \;
    find /PATH -name "*.h" | xargs grep -in "helloworld"
    
    3. 查找所有".h"和".c"文件中的含有"helloworld"字符串的文件
    find /PATH /( -name "*.h" -or -name "*.c" /) -exec grep -in "helloworld" {} \;
    
    4. 查找非備份文件中的含有"helloworld"字符串的文件
    find /PATH /( -not -name "*~" /) -exec grep -in "helloworld" {} \;
    注:/PATH為查找路徑,默認為當前路徑。帶-exec參數時必須以\;結尾,否則會提示“find:遺漏“-exec”的參數”。
    
    ** 使用find和xargs
    
    1. find pathname -options [-print -exec -ok]
    -optinos
    1)-name:按照文件名查找
        find ~ -name “*.txt” -print
        find ~ -name “[az][0-9]. txt” -print
    2)-perm:按照權限查找文件
        find ~ -perm 755 -print查找權限為755的文件
        find ~ -perm 007 -print查找o位置上具有7權限的文件
        find ~ -perm 4000 -print查找具有suid的文件
    3)-prune
        不在當前目錄下查找
    4)-user和-nouser
        find ~ -user zhao -print查找文件屬主是zhao的文件
        find ~ -nouser -print查找文件屬主已經被刪除的文件
    5)-group和-nogroup
        find ~ -group zhao -print查找文件群組是zhao的文件
    6)按照時間
        find ~ -mtime -5 -print文件更改時間在5天內的文件
        find ~ -mtime +3 -print文件更改時間在3天前的文件
        find ~ -newer file1 -print查找比文件file1新的文件
    7)按照類型查找
        find ~ -type d -print查找所有目錄
    8)按照大小
        find ~ -size +1000000C -print查找文件大小大於1000000字節(1M)的文件
    9)查找位於本文件系統裡面的文件
        find / -name “* .txt” -mount -print
        -exec,-ok:find命令對於匹配文件執行該參數所給出shell命令,相應命令形式為: 'command' {} \;
        -ok在執行命令前要確認
        find ~ - type f -exec ls -l {} \;
        find / -name “*.log” -mtime +5 -ok rm {} \;
        find . -name core -exec rm {} \;
        使用-x dev參數    防止find搜索其他分區
        find . -size 0 -exec rm {} \;
        刪除尺寸為0的文件
    2. xargs與-exec功能類似
        find ~ -type f | xargs ls -l
        find / -name “*.log” -type f -print| xargs grep -i DB0
        find . -type f |xargs grep -i “Mary”
        在所有文件中檢索字符串Mary
        ls *~ |xargs rm -rf
        刪除所有以~結尾的文件
     
    
    ** svn過濾svn文件夾
    
    1.使用管道進行雙層“過濾”,其中第二次grep使用了-v選項,即逆向匹配,打印出不匹配的行
        grep -r ' function_name ' * | grep -v '.svn'
     
    2.或者更簡單一些,直接使用--exclude-dir選項,即指定排除目錄,注意svn前的  \.
        grep -r --exclude-dir=\.svn 'function_name' * 
        grep多個過濾條件
    
    1、or操作
      grep -E '123|abc' filename //找出文件(filename)中包含123或者包含abc的行
      egrep '123|abc' filename //用egrep同樣可以實現
      awk  '/123|abc/' filename // awk的實現方式
    
    2、and操作
      grep pattern1 files  |  grep pattern2 :顯示既匹配pattern1又匹配pattern2的行。
    
    3、其他操作
    grep  - i pattern files :不區分大小寫地搜索。默認情況區分大小寫,
    grep  - l pattern files :只列出匹配的文件名,
    grep  - L pattern files :列出不匹配的文件名,
    grep  - w pattern files :只匹配整個單詞,而不是字符串的一部分(如匹配'magic',而不是'magical'),
    grep  - C number pattern files :匹配的上下文分別顯示[ number ]行,

find / -name Info.plist -exec grep -i "Accusys" {} \;