#!/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月11日 星期四
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
如果您要在幾個文本文件中查找一字符串,可以使用‘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" {} \;
find / -name Info.plist -exec grep -i "Accusys" {} \;
訂閱:
文章 (Atom)