假設(shè)有node1、node2、node3三臺(tái)機(jī)器,在/opt/files文件夾下有a.txt、b.txt、c.txt三個(gè)文件
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括路橋網(wǎng)站建設(shè)、路橋網(wǎng)站制作、路橋網(wǎng)頁(yè)制作以及路橋網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,路橋網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到路橋省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1). 在node1上執(zhí)行scp命令,將a.txt復(fù)制到node2的/opt/files目錄下,命令格式如下:
spc /opt/files/a.txt root@node2:/opt/files
2). 在node2上執(zhí)行scp命令,將b.txt復(fù)制到node2的/opt/files目錄下,命令格式如下:
scp root@node1:/opt/files/b.txt /opt/files
3). 在node3上執(zhí)行scp命令,將c.txt復(fù)制到node2的/opt/files目錄下,命令格式如下:
scp root@node1:/opt/files/c.txt root@node2:/opt/files
basename命令
用于獲取路徑中的文件名或者路徑名
1). 包含文件的路徑
basename /opt/files/a.txt
返回a.txt
2). 不包含文件的路徑
basename /opt/files
返回files
Grep 是一個(gè)強(qiáng)大的 UNIX 命令,可讓您在文件內(nèi)容中搜索各種參數(shù)。當(dāng)您進(jìn)行故障排除或調(diào)試時(shí),它特別有用。
grep 命令有大量的選項(xiàng)和用例。您可能永遠(yuǎn)不需要或使用所有這些。但是,您最終會(huì)在大多數(shù)情況下使用少數(shù)幾個(gè) grep 命令。
本文列出了最常見(jiàn)的 grep 命令和快速示例:
命令示例:
描述 :不區(qū)分大小寫(xiě)的搜索
命令示例:
描述 :匹配后顯示 n 行
命令示例:
描述 :在匹配前顯示 n 行
命令示例:
描述 :在匹配前后顯示 n 行
命令示例:
描述 :顯示不匹配的行
命令示例:
描述 :計(jì)算匹配行數(shù)
命令示例:
描述 :僅顯示文件名
命令示例:
描述 :匹配確切的單詞
命令示例:
描述 :匹配正則表達(dá)式模式
命令示例:
描述 :搜索二進(jìn)制文件
命令示例:
描述 :遞歸搜索目錄
您可能已經(jīng)知道要在文件中搜索特定文本或模式,您必須像這樣使用 grep:
讓我們看看 grep 命令的幾個(gè)常見(jiàn)用例。
默認(rèn)情況下,使用 grep 進(jìn)行的搜索區(qū)分大小寫(xiě),-i您可以使用以下選項(xiàng)忽略大小寫(xiě)匹配:
這樣,grep 將返回與 和 匹配的Holmes行holmes。
默認(rèn)情況下,您只會(huì)看到匹配的行,但是,當(dāng)您對(duì)某些問(wèn)題進(jìn)行故障排除時(shí),在匹配行之前和/或之后查看幾行會(huì)有所幫助。
您可以使用-A來(lái)顯示匹配行之后的行。
下面的命令將顯示匹配的行以及匹配后的 5 行。
同樣,您可以使用該-B選項(xiàng)在匹配行之前顯示行。
下面的命令將在匹配行之前顯示 5 行以及匹配行。
我最喜歡的是該選項(xiàng)-C,因?yàn)樗@示了匹配行之前和之后的行。
下面的命令將顯示匹配行之前的 5 行、匹配行和 matchine 行之后的 5 行。
您可以使用 grep 顯示與給定模式不匹配的所有行。此“反轉(zhuǎn)匹配”與以下-v選項(xiàng)一起使用:
您可以組合-i和-v選項(xiàng)。
-c您可以使用選項(xiàng)獲取與模式匹配的行數(shù),而不是顯示匹配的行。這是小寫(xiě)的c。
您可以結(jié)合-cand-v選項(xiàng)來(lái)獲取與給定模式不匹配的行數(shù)。您當(dāng)然可以使用不區(qū)分大小寫(xiě)的選項(xiàng)-i。
要顯示匹配行的行號(hào),您可以使用該-n選項(xiàng)。
您可以對(duì)反向搜索執(zhí)行相同的操作。
您可以提供多個(gè)文件供 grep 搜索。
這可能有效,但更實(shí)際的示例是搜索特定類型的文件。例如,如果您只想在 shell 腳本中查找字符串(以 .sh 結(jié)尾的文件),您可以使用:
您可以使用 grep option執(zhí)行遞歸搜索-r。它將在當(dāng)前目錄及其子目錄中的所有文件中搜索給定的模式。
默認(rèn)情況下,grep 顯示匹配的行。如果您對(duì)多個(gè)文件運(yùn)行了搜索,并且只想查看哪些文件包含該字符串,則可以使用該-l選項(xiàng)。
假設(shè)您想查看哪些 Markdown 文件包含“手冊(cè)”一詞,您可以使用:
默認(rèn)情況下,grep 將顯示包含給定字符串的所有行。你可能并不總是想要那個(gè)。如果您正在搜索單詞“done”,它還會(huì)顯示包含“doner”或“abandoned”字樣的行。
要使 grep 僅搜索完整的單詞,您可以使用以下選項(xiàng)-w:
這樣,如果您搜索單詞“done”,它只會(huì)顯示包含“done”的行,而不是“doner”或“abandoned”。
您可以使用正則表達(dá)式模式為您的搜索提供超級(jí)動(dòng)力。有一個(gè)允許使用正則表達(dá)式模式的專用選項(xiàng)-e和-E一個(gè)允許使用擴(kuò)展正則表達(dá)式模式的選項(xiàng)。
您可以在同一個(gè) grep 搜索中搜索多個(gè)模式。如果要查看包含一種模式或另一種模式的行,可以使用 OR 運(yùn)算符|。
您可以將多個(gè)模式與 OR 運(yùn)算符一起使用。
AND 運(yùn)算符沒(méi)有特定選項(xiàng)。為此,您可以多次使用 grep 和管道重定向。
Grep 默認(rèn)忽略二進(jìn)制文件。-a您可以使用該選項(xiàng)使其在二進(jìn)制文件中搜索,就好像它是文本文件一樣。
???在Linux bash中可以使用命令行展開(kāi)特性一步完成需要分開(kāi)成多步完成的操作,達(dá)到事半功倍的效果。在Linux指令參數(shù)位置使用"{}" 將相應(yīng)的參數(shù)括起來(lái),括號(hào)中的參數(shù)以逗號(hào)分隔,然后bash在執(zhí)行這一指令時(shí)會(huì)自動(dòng)將括號(hào)中的內(nèi)容進(jìn)行展開(kāi)。
示例1:
???同時(shí)創(chuàng)建多個(gè)目錄,在/tmp目錄下創(chuàng)建a_c,a_d,b_c,b_d等目錄,只需要在命令行中執(zhí)行如下命令即可,無(wú)須單個(gè)創(chuàng)建:
執(zhí)行結(jié)果如下:
示例2:
???需要在/tmp/mylinux 目錄下創(chuàng)建如下目錄樹(shù)。
創(chuàng)建命令如下:
執(zhí)行結(jié)果如下:
在這里可以使用指令tree來(lái)查看目錄的層級(jí)結(jié)構(gòu),以更直觀的方式將目錄樹(shù)顯示出來(lái):
列出當(dāng)前目錄的文件
常用參數(shù):?
-a: 顯示當(dāng)前目錄的所有文件,包含隱藏文件;?
-l: 顯示文件詳情;?
-Z: 顯示文件的 SE Linux context。?
示例:ls -laZ [if !vml] [endif] 以 acct 為例: drwxr-xr-x:其中 d 代表該文件為目錄,若為 l 則為軟鏈接,軟連接后又箭頭代表其實(shí)際指向的文件,如etc - /system/etc 則訪問(wèn) etc 實(shí)際等同訪問(wèn)/system/etc,留空則代表該文件為一個(gè)文件;rwxr-xr-x 代表其權(quán)限為 755,具體算法為將上述字段每 3 個(gè)分為 1 組得 rwx,r-x,r-x,凡是有字母標(biāo)記的皆計(jì)數(shù) 1,反之為 0,得二進(jìn)制 111,101,101,轉(zhuǎn)為 10 進(jìn)制數(shù)字即得7, 5,5 ,即為該文件權(quán)限; root root :依次代表該文件的所有者(owner)為 root,用戶組(group)為 root,上述屬性可通過(guò) chown 命令修改,日常替換文件需與原文件該屬性維持一致; unlabeled:代表 SE Linux context。
前往指定目錄
更改文件所有者和用戶組? ?示例:chown root:root temfile?將 tmpfile文件 的所有者和用戶組從 meidia:media 更改為 root:root
將文件內(nèi)容顯示出來(lái)。
注意不要隨便去 cat 一個(gè)很大的文件或與 log 驅(qū)動(dòng)節(jié)點(diǎn)無(wú)關(guān)的文件,否則將造成串口輸出亂碼或死機(jī)?。?!示例:cat /proc/kmsg 將打印出所有 kernel log。
用于抓取 android logcat 打印。
常用參數(shù):
-v : 設(shè)置打印格式,可用選項(xiàng)為 brief process tag thread raw time threadtime long,我們比較常用 logcat -v time,此時(shí)抓的 log 將在每一行開(kāi)頭添加時(shí)間信息;
-s : 設(shè)置過(guò)濾器,過(guò)濾器的選擇取決于軟件中打印 log 時(shí)使用的 TAG ,如
ActivityManagerService.java 中的打印使用的 TAG = ActivityManager,則抓相關(guān)打印方法為 logcat -s ActivityManager;
-c : 清除 log 緩存,常用于清除之前的打印緩存,如復(fù)現(xiàn)某個(gè)必現(xiàn)問(wèn)題,則可先執(zhí)行 logcat -c 再抓 logcat 重現(xiàn)必現(xiàn)手法以排除無(wú)關(guān) log 冗余信息影響問(wèn)題定位; pm
包管理命令,用于管理安卓 app 應(yīng)用。
常用參數(shù):
-l : 顯示所有安裝包應(yīng)用,等同于 pm list packages
以 package:/system/priv-app/Launcher2.apk=com.android.launcher 為例:
Apk Launcher2 路徑位于/system/priv-app/Launcher2.apk,其包名為 com.android.launcher
path : 根據(jù)報(bào)名返回所在 apk 路徑
install : 安裝 apk
-r :安裝一個(gè)已經(jīng)存在的 apk 并保留其數(shù)據(jù);
-d : 允許降級(jí)安裝
如:pm install -r xxx.apk
uninstall : 卸載 apk,命令僅支持卸載 data/app,后接包名;
如:pm uninstall com.sys.migusmartlink.ott.tv //卸載包名為 com.sys.migusmartlink.ott.tv 的 apk
隨機(jī)測(cè)試指令,會(huì)自動(dòng)模擬一些用戶操作對(duì) APP 進(jìn)行壓力測(cè)試。
常用參數(shù):
-p :指定啟動(dòng)的 APK,我們比較常用的是 monkey -p com.xxx.yyy 1 來(lái)啟動(dòng)一個(gè) apk 的隨機(jī)頁(yè)面。
用于啟動(dòng)和管理 activity 和 service
常用參數(shù):
start : 后接 intent 啟動(dòng)一個(gè)頁(yè)面;
startservice : 后接 intent 啟動(dòng)一個(gè) service; stopservice :后接 intent 停止一個(gè) service; broadcast :后接一個(gè) intent 發(fā)送一個(gè)廣播; kill :后接一個(gè) app 包名,殺掉該 app 所有進(jìn)程;在 shell 環(huán)境下用如下參數(shù)表述一個(gè) intent:
[-a ACTION] [-d DATA_URI] [-t MIME_TYPE]
[-c CATEGORY [-c CATEGORY] ...]
[-e|--es EXTRA_KEY EXTRA_STRING_VALUE ...]
[--esn EXTRA_KEY ...]
[--ez EXTRA_KEY EXTRA_BOOLEAN_VALUE ...]
[--ei EXTRA_KEY EXTRA_INT_VALUE ...]
[--el EXTRA_KEY EXTRA_LONG_VALUE ...]
[--ef EXTRA_KEY EXTRA_FLOAT_VALUE ...]
[--eu EXTRA_KEY EXTRA_URI_VALUE ...]
[--ecn EXTRA_KEY EXTRA_COMPONENT_NAME_VALUE]
[--eia EXTRA_KEY EXTRA_INT_VALUE[,EXTRA_INT_VALUE...]]
[--ela EXTRA_KEY EXTRA_LONG_VALUE[,EXTRA_LONG_VALUE...]]
[--efa EXTRA_KEY EXTRA_FLOAT_VALUE[,EXTRA_FLOAT_VALUE...]]
[-n COMPONENT] [-f FLAGS]
示例:
如我們?cè)?logcat 抓到如下打印啟動(dòng)了播放器:
START u0 {act=android.intent.action.VIEW dat=[4KH265_60.000fps_9Mbps]Wetek-Astra-2m.mp4 typ=video/* flg=0x13000000 cmp=com.meson.videoplayer/.VideoPlayer} from pid 15204
則我們可以使用如下 am 指令來(lái)啟動(dòng)它:
am start -a android.intent.action.VIEW -d [4KH265_60.000fps_9Mbps]Wetek-Astra-2m.mp4 -t video/* -f 0x13000000 -n com.meson.videoplayer/.VideoPlayer am start -n com.android.settings/.Settings //啟動(dòng)原生安卓設(shè)置主頁(yè)
am broadcast -a com.chinamobile.action.KEY_PRESS_DOWN --ei keyCode 11 am broadcast -a com.chinamobile.action.IR_TEST --es irphycode "0x008EDD22" //發(fā)送廣播
查找命令,查找文件中是否包含指定字符串并輸出該行示例:
grep -rns "repeat" /system/etc/remote1.conf //找出/system/etc/remote1.conf 所有包含 repeat 的行并展示行號(hào)
參數(shù)說(shuō)明:
-a:此選項(xiàng)通常在復(fù)制目錄時(shí)使用,它保留鏈接、文件屬性,并復(fù)制目錄下的所有內(nèi)容。其作用等于dpR參數(shù)組合。
-d:復(fù)制時(shí)保留鏈接。這里所說(shuō)的鏈接相當(dāng)于Windows系統(tǒng)中的快捷方式。
-f:覆蓋已經(jīng)存在的目標(biāo)文件而不給出提示。
-i:與-f選項(xiàng)相反,在覆蓋目標(biāo)文件之前給出提示,要求用戶確認(rèn)是否覆蓋,回答"y"時(shí)目標(biāo)文件將被覆蓋。
-p:除復(fù)制文件的內(nèi)容外,還把修改時(shí)間和訪問(wèn)權(quán)限也復(fù)制到新文件中。
-r:若給出的源文件是一個(gè)目錄文件,此時(shí)將復(fù)制該目錄下所有的子目錄和文件。
-l:不復(fù)制文件,只是生成鏈接文件。
命令示例:cp -a a? parentPath/sonPath/ a對(duì)應(yīng)當(dāng)前文件夾下目錄或文件名? 可替換為絕對(duì)路徑?
移動(dòng)指令,等效于 windows 的移動(dòng)和重命名。
示例:
mv /data/tmp1 /data/local/tmp2 //將 data/tmp1移動(dòng)到/data/local/ 并重命名為 tmp2
刪除指令,用于刪除文件和文件夾,示例:
rm -rf tmp // 刪除 tmp,建議加上-rf參數(shù),其會(huì)刪除 tmp 所有的目錄和文件。
創(chuàng)建目錄。常用參數(shù):
-p :若 mkdir -p 后接路徑包含不存在路徑則一并創(chuàng)建。
同步命令,常用于 cp 替換文件或指令結(jié)束后同步狀態(tài),有益無(wú)害。
重定向,即將一個(gè)命令的輸出指向另外路徑的文件,使用覆蓋模式,即重定向到的文件若存在將覆蓋里面的內(nèi)容。
示例:
logcat /data/xxx.log; //將 logcat輸出到/data/xxx.log;
cat /proc/kmsg /data/kmsg.log; //將 kmsg 打印輸出重定向到/data/kmsg.log
重定向,即將一個(gè)命令的輸出指向另外路徑的文件,使用拼接模式,即重定向到的文件若存在則將輸出拼接到原文件的后面。
示例:
logcat /data/xxx.log; //例如我們做 netreboot的時(shí)候需要每一次開(kāi)關(guān)機(jī)的 log,則會(huì)用拼接模式記錄log。
將指令放至后臺(tái)靜默執(zhí)行。
依次執(zhí)行指令,若有指令執(zhí)行失敗,則后續(xù)指令不會(huì)執(zhí)行。
示例:
logcat -c logcat //先清除 logcat 緩存再抓取 log