Linux 命令與 Shell 腳本

Linux 命令與 Shell 腳本

【Linux文件處理 Day1】

前幾天主要介紹了正則表達(dá)式的使用方法淀歇,這一期打算介紹一些 Linux 命令和 Shell 腳本,這些知識(shí)雖然不是我們必須要掌握的蛮浑,但是它可以提高工作效率,而且這些知識(shí)對(duì)于開發(fā)者來(lái)說(shuō)都是通用的,Android香嗓,iOS垛叨,后端伦糯,前端等,都需要一些 Linux 和正則表達(dá)式的知識(shí)嗽元。對(duì)于iOS開發(fā)者來(lái)說(shuō)敛纲,Linux 的一些操作命令是薄弱環(huán)節(jié),作者打算花費(fèi)幾天時(shí)間總結(jié)一下這方面的知識(shí)剂癌,旨在能夠幫助更多同學(xué)不再害怕“命令”淤翔。如果在文中有不正確的地方,希望同學(xué)們能指點(diǎn)小弟一下佩谷。

【特別說(shuō)明】下文提到所有的命令行的根路徑均為:/Users/wangsuyan/desktop/linux旁壮,使用 man 某個(gè)命令 ,比如 man rm谐檀,可以查看詳細(xì)使用抡谐。

  • 絕對(duì)路徑:從根目錄開始的全路徑,一定是以 "/" 開頭的稚补;
    pwd : 當(dāng)前所在的目錄童叠,pwd:/Users/wangsuyan/desktop/linux,這個(gè)路徑也稱為絕對(duì)路徑;
  • . : 表示當(dāng)前目錄厦坛,pwd 可以顯示當(dāng)前所在的目錄五垮;
  • .. : 上一級(jí)目錄,/Users/wangsuyan/desktop/linux 的上一級(jí)目錄為:/Users/wangsuyan/desktop杜秸;
  • touch : 創(chuàng)建文件放仗,touch lefe.js,創(chuàng)建文件 lefe.js撬碟,如果當(dāng)前目錄下已經(jīng)有文件 lefe.js 文件诞挨,將修改 lefe.js 文件的創(chuàng)建時(shí)間;創(chuàng)建文件所在的目錄不能包含沒有創(chuàng)建的文件夾呢蛤;
  • rm:移除文件惶傻,rm lefe.js 將移除 lefe.js 文件;
  • mv: 移動(dòng)文件其障,mv lefe.js ../lefe2.js 將 lefe.js 文件移動(dòng)到上一級(jí)目錄银室,并重命名為 lefe2.js,lefe.js 文件將不在原目錄下励翼;
  • cat: 查看文件內(nèi)容蜈敢,cat lefe.js 查看 lefe.js 的內(nèi)容;
  • head: 查看文件的內(nèi)容汽抚,默認(rèn)為前 10 行抓狭,head lefe.js 查看文件的前 10 行內(nèi)容;
  • head -n 20 lefe.js 查看文件的前 20 行內(nèi)容造烁;
  • tail: 查看文件的內(nèi)容否过,默認(rèn)為末尾 10 行,tail lefe.js 查看文件的末尾 10 行內(nèi)容膨蛮;tail -n 20 lefe.js 查看文件的末尾 20 行內(nèi)容叠纹;
  • cd(change directory): 進(jìn)入文件目錄;
  • mkdir(make directory): 創(chuàng)建目錄敞葛,mkdir lefe 創(chuàng)建文件夾 lefe誉察,mkdir -p lefe/lefe2/lefe3 創(chuàng)建多個(gè)目錄;
  • rmdir(remove directory): 移除目錄惹谐,rmdir lefe 刪除 lefe 目錄持偏,將提升
  • rmdir: lefe: Directory not empty ,rmdir 只能刪除目錄中無(wú)文件的時(shí)候氨肌,使用 rm -r lefe 可以刪除 lefe 目錄及其所有的子目錄鸿秆;
  • cp: 復(fù)制目錄到指點(diǎn)目錄中,cp lefe.js ../ 復(fù)制 lefe.js 文件到指定的目錄中怎囚,cp -r lefe ../ 復(fù)制目錄到指點(diǎn)目錄卿叽;
  • ls: 顯示當(dāng)前目錄下的目錄桥胞,ls -l : 顯示文件的詳細(xì)信息,ls -a 顯示目錄下所有文件或文件夾考婴,包含隱藏的文件;
  • chmod: 改變文件的權(quán)限贩虾,chomd +x ./lefe.sh 改 lefe.sh 的添加執(zhí)行權(quán)限,一般運(yùn)行腳本前需要給腳本添加此權(quán)限沥阱;
  • file: 查看文件的類型缎罢,file lefe: lefe: directory,是目錄文件考杉;
  • find: 查找文件策精;
  • gzip: 壓縮文件,gzip lefe.js 壓縮 lefe.js 文件崇棠;
  • gunzip: 解壓文件咽袜,gunzip lefe.js.gz;
  • tar: 壓縮文件及其子文件枕稀,tar -zcvf lefe.tgz ./lefe 壓縮文件夾 lefe 為 lefe.tgz, tar -zxvf ./lefe.tgz 解壓 lefe.tgz 文件酬蹋;

【Linux字符處理 Day2】

  • |:管道,兩個(gè)命令之間可以使用管道符“|”鏈接抽莱,它可以把一個(gè)命令的輸入作為下一個(gè)命令的輸出;
  • grep: 搜索文本,
  • grep day lefe.js 搜索 lefe.js 文件中的 day骄恶;
  • grep -n day lefe.js 搜索 lefe.js 文件中的 day食铐,可以顯示文本所出現(xiàn)的行;
  • grep -i day lefe.js 搜索 lefe.js 文件中的 day僧鲁,忽略大小寫虐呻;
  • grep -c day lefe.js 搜索 lefe.js 文件中的 day 出現(xiàn)的次數(shù);
  • grep -v day lefe.js 搜索 lefe.js 文件中不包含 day 的行寞秃;
  • sort: 文本排序
  • cat sort.js | sort 對(duì)文本進(jìn)行排序斟叼;
  • cat sort.js | sort -r 對(duì)文本進(jìn)行反向排序;
  • cat sort.js | sort -n 對(duì)文本進(jìn)行排序春寿,指定為數(shù)字朗涩,比如: 2,12绑改,3 如果不使用參數(shù) -n 排序結(jié)果為 12, 2, 3谢床;反之為 2, 3, 12:
  • uniq: 刪除重復(fù)的行,一般與 sort 配合使用厘线,先排序识腿,然后多結(jié)果進(jìn)行去重;
  • cat lefe.js | sort | uniq 顯示沒有重復(fù)的行造壮;
  • tr: 文本轉(zhuǎn)換
  • cat lefe.js | tr -d 'day':刪除 lefe.js 文件中的 'd','a' 和 ‘y’渡讼;
  • paste: 文本合并
  • paste -d '>' lefe.js sort.js:合并 lefe.js 和 sort.js 文件,是以行合并的,使用 '>' 鏈接兩個(gè)文件中的行成箫;
  • find: 查找文件展箱,find 查找路徑 -name 文件名
  • find ~/Desktop/linux -name 'lefe.js':查找 ~/Desktop/linux 下文件名為 lefe.js 的文件;
  • find ~/Desktop/linux -name '*.js':查找 ~/Desktop/linux 下后綴為 ‘js’ 的文件伟众;

【Shell 腳本 Day3】

經(jīng)過(guò)前幾天對(duì) Linux 命令的學(xué)習(xí)析藕,已經(jīng)掌握了大部分常用的命令,但是如果想要做的更好凳厢,可以學(xué)習(xí)一下 Shell 腳本账胧,它可以把多條命令按自己的方式來(lái)執(zhí)行。它可以提高我們的工作效率先紫。比如最常見的是 pod install 命令治泥,每次需要在終端輸入:

cd /Users/wangsuyan/Desktop/project/Kmart
pod install

這種輸入需要我們切換到項(xiàng)目的根目錄,我們往往不記得自己項(xiàng)目的目錄遮精,查找時(shí)比較耗時(shí)居夹。我們完全可以使用一個(gè)腳本(podlgsk.sh),直接執(zhí)行(./podlgsk.sh)本冲。

#!/bin/bash
cd /Users/wangsuyan/desktop/project/Kmart
pod install

執(zhí)行(執(zhí)行前需要給腳本執(zhí)行權(quán)限准脂,chmod +x podlgsk.sh):

$ ./podlgsk.sh

感受到腳本的“魅力”后,我們可以感受一下 @唐巧_body 查找未使用的圖片的 shell 腳本檬洞。關(guān)于查找項(xiàng)目中未使用的圖片也可以參考這里的 Python 腳本狸膏,用了你就會(huì)愛上它(開玩笑呢,別當(dāng)真)添怔。

#!/bin/sh

cd /Users/wangsuyan/Desktop/project/Kmart
PROJ=`find . -name '*.xib' -o -name '*.[mh]'`

for png in `find . -name '*.png'`
do
    name=`basename $png`
    if ! grep -qhs "$name" "$PROJ"; then
        echo "$png is not referenced"
    fi
done

【解析】

  1. cd /Users/wangsuyan/Desktop/project/Kmart湾戳,進(jìn)入項(xiàng)目所在的目錄;
  2. 查找項(xiàng)目中所有 png 圖片广料;
  3. 遍歷所有的 png 圖片砾脑,使用 grep 命令查找項(xiàng)目中是否使用過(guò)該圖片,如果未使用將打印出 xxx is not referenced艾杏;

【知識(shí)點(diǎn)】
cd 命令(進(jìn)入項(xiàng)目的根目錄)韧衣;
find 命令(查找符合要求的文件,這里注意查找 xib购桑,.h 和 .m 文件)汹族;
grep 命令(查找文本內(nèi)容);
正則表達(dá)式其兴,比如:'.[hm]' 和 '.xib'顶瞒。 關(guān)于正則表達(dá)式的使用,上一期已經(jīng)專門介紹了元旬;
Shell 腳本中的 for 循環(huán)榴徐,if 條件判斷守问。

了解了 Shell 腳本的使用后,下一次將介紹一些它的基本語(yǔ)法坑资,幫助讀者可以看懂 Shell 腳本耗帕。

【Shell 腳本 Day4】

使用 Pod 的同學(xué)經(jīng)常會(huì)遇到 "error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation." 錯(cuò)誤,其實(shí)是 [CP] Check Pods Manifest.lock 這個(gè)腳本所起的作用袱贮。

Pod 中有 Manifest.lock 和 Podfile.lock 這兩個(gè)文件仿便,只要這兩個(gè)文件的內(nèi)容不一樣就會(huì)報(bào)錯(cuò)上面這個(gè)錯(cuò)誤。Podfile.lock 是大家共用的文件(用來(lái)保證我們每個(gè)人的Pod庫(kù)版本一樣)攒巍,而Manifest.lock是本地的文件(自己用)嗽仪。而【圖2】中這個(gè)腳本正是做這樣的事情。

解釋下這個(gè)腳本:
shell 腳本總是以:#!/bin/bash 或者 #!/bin/sh 開頭柒莉,它主要告訴系統(tǒng)執(zhí)行這個(gè)文件需要那個(gè)解釋器闻坚,進(jìn)入 /bin 目錄下可以看到 bash 和 sh 解釋器;

  • diff 命令:判斷兩個(gè)文件的不同兢孝,比如 diff /Users/lefe/Desktop/project/Kmart/Podfile.lock /Users/lefe/Desktop/project/Kmart/pods/Manifest.lock >~/Desktop/shell.log 比較兩個(gè)文件的不同窿凤,并重定向到 shell.log 文件中;
  • > 重定向符號(hào)跨蟹,可以把輸出命令輸出到某個(gè)文件中而不是控制臺(tái)雳殊;
  • echo 是腳本的輸出,相當(dāng)于 printf窗轩;
  • exit 1 退出相种,有了這個(gè)命令 Xcode 就會(huì)報(bào)錯(cuò),你可以在 Xcode 中新建一個(gè)腳本品姓,試試下面這個(gè)腳本:
echo "This is a test shell created by Lefe_x"
exit 1
  • $?: 指上條命令執(zhí)行的結(jié)果,也就是 diff 執(zhí)行的結(jié)果箫措;

  • 下面是 shell 中的 if 語(yǔ)句:

if 條件 ; then
fi

如何在終端執(zhí)行腳本:
假如有個(gè)叫 podlgsk.sh 的腳本腹备,只要給予它執(zhí)行權(quán)限(chmod +x podlgsk.sh),注意只需要給一次執(zhí)行權(quán)限就行斤蔓,下次運(yùn)行腳本時(shí)就不需要給予執(zhí)行權(quán)限了植酥,然后直接 ./podlgsk.sh 即可。

===== 我是有底線的 ======
喜歡我的文章弦牡,歡迎關(guān)注我的新浪微博 Lefe_x友驮,我會(huì)不定期的分享一些開發(fā)技巧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市驾锰,隨后出現(xiàn)的幾起案子卸留,更是在濱河造成了極大的恐慌,老刑警劉巖椭豫,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耻瑟,死亡現(xiàn)場(chǎng)離奇詭異旨指,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)喳整,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門谆构,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人框都,你說(shuō)我怎么就攤上這事搬素。” “怎么了魏保?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵熬尺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我囱淋,道長(zhǎng)猪杭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任妥衣,我火速辦了婚禮皂吮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘税手。我一直安慰自己蜂筹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布芦倒。 她就那樣靜靜地躺著艺挪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兵扬。 梳的紋絲不亂的頭發(fā)上麻裳,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音器钟,去河邊找鬼津坑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛傲霸,可吹牛的內(nèi)容都是我干的疆瑰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼昙啄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼穆役!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起梳凛,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤耿币,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后韧拒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掰读,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秘狞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蹈集。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烁试。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拢肆,靈堂內(nèi)的尸體忽然破棺而出减响,到底是詐尸還是另有隱情,我是刑警寧澤郭怪,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布支示,位于F島的核電站,受9級(jí)特大地震影響鄙才,放射性物質(zhì)發(fā)生泄漏颂鸿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一攒庵、第九天 我趴在偏房一處隱蔽的房頂上張望嘴纺。 院中可真熱鬧,春花似錦浓冒、人聲如沸栽渴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闲擦。三九已至,卻和暖如春场梆,著一層夾襖步出監(jiān)牢的瞬間墅冷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工或油, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寞忿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓装哆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親定嗓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蜕琴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,134評(píng)論 2 34
  • Ubuntu的發(fā)音 Ubuntu恃逻,源于非洲祖魯人和科薩人的語(yǔ)言雏搂,發(fā)作 oo-boon-too 的音藕施。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 99,156評(píng)論 9 467
  • 1.Linux下如何用命令查看實(shí)時(shí)日志(完整命令) tail -f 路徑.log查看前多少行 tai-200f 路...
    qianyewhy閱讀 2,249評(píng)論 0 11
  • 建立一個(gè)腳本 Linux中有好多中不同的shell,但是通常我們使用bash (bourne again shel...
    某人在閱讀 2,002評(píng)論 0 0
  • 吃到食傷凸郑! 酸香脆爽的水腌菜拌油香酥肉裳食,配以瞬間就能激活味覺細(xì)胞的油辣子,一碗光吃芙沥,第二碗用酸辣透著甜...
    爻言之閱讀 432評(píng)論 0 0