本內容出自https://github.com/fantasyKing/getting-started-for-mac
1.相對路徑和絕對路徑
絕對路徑
路徑的寫法一定由根目錄/發(fā)起嚣镜,例如:/usr/share/doc
相對路徑
路徑的寫法不是由/寫起损合,例如由/usr/share/doc要到/usr/share/man下面時批狱,可以寫成"cd ../man"硼砰,這就是相對路徑的寫法脱羡。相對路徑意指相對于目前工作目錄的路徑昆汹。
相對路徑和絕對路徑的對比
相對路徑提供了一種能夠快速在各個路徑之間跳轉的方式。
絕對路徑提供了一種精確的文件定位的方式鸯绿。
2.目錄的相關操作
大家可以想到哪些常用的目錄的操作命令呢?例如創(chuàng)建目錄簸淀,刪除目錄之類的楞慈。還有得先知道的,就是有哪些比較特殊的目錄呢啃擦?舉例來說,下面這些就是比較特殊的目錄饿悬,要記下來:
. 代表此層目錄
.. 代表上一層目錄
- 代表前一個工作目錄
~ 代表“目前用戶身份”所在的主文件夾
~account 代表account這個用戶的主文件夾(account是個賬號名稱)
需要注意的是令蛉,在所有的目錄下面都存在兩個目錄,分別是"."和".."狡恬,分別代表此層和上層目錄的意思珠叔。
根目錄下"."和".."代表的是同一個目錄
常見的處理目錄的命令
- cd: 切換目錄
- pwd: 顯示當前目錄
- mkdir: 新建一個新的目錄
- rmdir: 刪除一個空的目錄
cd(切換目錄)
- 當我們登錄我們的Mac時,打開terminal后弟劲,所在的目錄為當前用戶的主目錄祷安。下面我們使用主目錄下/tmp這個目錄,演示cd的使用方法:
cd [相對路徑或者絕對路徑]
打開terminal執(zhí)行下面的幾條命令:
cd /tmp
進入根目錄下/tmp目錄
cd ~
回到主目錄
cd -
回到/tmp目錄
cd .
目錄不變
cd ..
回到上層目錄兔乞,這里的上層目錄不再是當前用戶主目錄汇鞭,而是系統(tǒng)的根目錄,因為/tmp目錄是整個系統(tǒng)的臨時目錄
cd ~
回到用戶根目錄
/tmp目錄為系統(tǒng)臨時目錄庸追,系統(tǒng)會定期的自動清空該文件夾霍骄。
我們使用的zsh,具有文件補齊的功能淡溯,你要經常利用[Tab]鍵快速完整的輸入目錄读整。這是一種好習慣,可以避免你按錯鍵輸入錯字
- cd 是Change Directory的縮寫咱娶,這是用來切換工作目錄的命令米间。注意,目錄名稱與cd命令之間存在一個空格
pwd(顯示目前所在的目錄)
在根目錄下執(zhí)行:
cd ~
回到根目錄
pwd
顯示當前路徑
cd /tmp
pwd
通過上面也可以發(fā)現(xiàn)/tmp并不在用戶的根目錄下
mkdir(新建新目錄)
在用戶根目錄下執(zhí)行
mkdir [-mp] 目錄名稱
參數(shù):
-m: 配置文件的權限膘侮,直接設置不需要看默認權限(unmask)
-p: 幫助你直接將所需要的目錄(包括上層目錄)遞歸創(chuàng)建起來(常用)
范例:請到/tmp 下面嘗試創(chuàng)建數(shù)個新目錄看看:
cd /tmp
mkdir test <==創(chuàng)建一個名為test的新目錄
mkdir test1/test2/test3/test4 <== 沒有辦法直接創(chuàng)建此目錄
mkdir -p test1/test2/test3/test4 <== 目錄創(chuàng)建成功
- 建議大家少使用-p這個參數(shù)來創(chuàng)建目錄屈糊,因為擔心你打錯字,那么目錄就變得亂七八糟的了
rmdir(刪除"空"目錄)
rmdir [-p] 目錄名稱
-p: 連同上層"空的"目錄也一起刪除
cd /tmp
ls -l <== 看看有多少目錄存在
rmdir test <==可直接刪除掉喻喳,沒問題
rmdir test1 <== 因為尚有內容另玖,所以無法刪除
rmdir -p test1/test2/test3/test4
ls -l <== 顯示結果中,test和test1不見了
# 利用-p 這個參數(shù),立刻就可以將test1/test2/test3/test4 一次刪除
# 不過要注意的是谦去,這個rmdir僅能"刪除空的目錄"
- 如果要刪除一個包含內容的目錄要怎么辦呢? 這個時候就需要使用"rm -r test"了
3. 查看文件與目錄
ls [-aAdfFhilnRSt] 目錄名稱
ls [--color={never, auto, always}] 目錄名稱
ls [--full-time] 目錄名稱
參數(shù):
-a: 全部的文件慷丽,連同隱藏文件(開頭為`.`的文件)一起列出來(常用)
-A: 列出全部的文件(連同隱藏文件,但不包括`.`與`..`這兩個目錄)
-d: 僅列出目錄本身鳄哭,而不是列出目錄內的文件數(shù)據(常用)
-f: 直接列出結果要糊,而不是進行排序(ls默認會以文件名排序)
-F: 根據文件,目錄等信息給予附加數(shù)據結構妆丘,例如:
*: 代表可執(zhí)行文件锄俄;/:代表目錄;=:代表socket文件勺拣;|:代表FIFO文件
-h: 將文件容量以人類易讀的方式(例如 GB奶赠,KB等)列出來
-i: 列出inode號碼(很少使用)
-l: 列出長數(shù)據串,包含文件的屬性與權限等數(shù)據(常用)
-n: 列出UID與GID药有,而非用戶與用戶組的名稱(很少使用)
-r: 將排序結果反向輸出
-R: 連同子目錄內容一起列出來毅戈,等于該目錄下的所有文件都會顯示出來
-S: 以文件容量大小排序,而不是文件名排序
-t: 依時間排序愤惰,而不是用文件名
在Mac和linux系統(tǒng)中苇经,ls命令可能是最常被執(zhí)行的命令。因為我們隨時都要知道文件或者目錄的相關信息宦言。不過我們的系統(tǒng)中的文件所記錄的信息實在是太多了扇单,ls沒有需要全部都列出來。所以當你執(zhí)行l(wèi)s時奠旺,默認顯示的只有非隱藏文件的文件名蜘澜,以文件名進行排序以及文件名代表的顏色顯示。
范例一:將主文件夾下的所有文件列出來
ls -al ~
范例二:承上題凉倚,不顯示顏色兼都,但在文件名末顯示出該文件名代表的類型(type)
ls -alF ~
范例三:將文件容量以人類易讀的方式(例如 GB,KB等)列出來
ls -alh ~
無路如何稽寒,ls最常被使用的功能還是那個-l的參數(shù)扮碧。為此,很多系統(tǒng)在默認情況中杏糙,已經將ll
設置為ls -l
的意思了慎王。也就是說,當你在終端中執(zhí)行ll
宏侍,就等于是執(zhí)行ls -l
赖淤。
ls -l 顯示的格式如下:
-rw-r--r-- 1 zhangguojin wheel 58K 10 12 20:22 wifi.log
文件權限 | 連接數(shù) | 文件所有者 | 文件所屬用戶組 | 文件大小 | 文件最后修改時間 | 文件名 |
---|---|---|---|---|---|---|
-rw-r--r-- | 1 | zhangguojin | wheel | 58K | 10 12 20:22 | wifi.log |
第一個字符代表這個文件是“目錄,文件或鏈接文件等”
- 若是[d]則是目錄
- 若是[-]則是文件
- 若是[l]則是軟連接文件
cd /tmp
touch testln <== 創(chuàng)建一個名為testln的文件
ln -s testln testlnsoft <== 為testln文件創(chuàng)建軟鏈接testlnsoft
ll
ln是一個很有意義的命令谅河,它的功能是為某一個文件在另外一個位置建立一個同步的鏈接.當我們需要在不同的目錄咱旱,用到相同的文件時确丢,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄吐限,放上該文件鲜侥,然后在 其它的目錄下用ln命令鏈接(link)它就可以,不必重復的占用磁盤空間诸典。
我們通常使用軟鏈接的形式描函,使用方式為:ln -s [源文件或目錄] [目標文件或目錄]
4. 復制,刪除與移動
cp(復制文件或目錄)
要復制文件狐粱,請使用cp(copy)
這個命令即可舀寓。不過,cp這個命令的用途還有很多肌蜻。除了單純復制之外互墓,還可以創(chuàng)建連接文件(就是快捷方式),對比兩文件的新舊而予以更新蒋搜,以及復制整個目錄等功能呢轰豆。但是,本書僅涉及了如何使用cp這個命令進行復制文件或者目錄齿诞。
- cp(復制文件或目錄)
cp [-adfilprsu] 源文件(source) 目標文件(destination)
cp [options] source1 source2 source3 .... directory
參數(shù):
-a: 相當于`-pdr`的意思,保留文件的結構和屬性(不包括文件夾)
-d: 若源文件為連接文件的屬性(link file)骂租,則復制連接文件屬性而非文件本身
-f: 為強制(force)的意思祷杈,若目標文件已經存在且無法開啟,則刪除后再嘗試一次
-i: 若目標文件(destination)已經存在時渗饮,在覆蓋時會先詢問操作的進行(常用)
-l: 進行硬鏈接(hard link)的連接文件創(chuàng)建但汞,而非復制文件本身
-p: 連同文件的屬性一起復制過去,而非使用默認屬性(備份常用)
-r: 遞歸持續(xù)復制互站,用于目錄的復制行為(常用)
-s: 復制成為符號鏈接文件(symbolic link)私蕾,即“快捷方式”文件
-u: 若destination比source舊才更新destination
最后需要注意的是,如果源文件有兩個以上胡桃,則最后一個目的文件一定要是“目錄”才行
# 范例一: 將主文件下的.bashrc文件復制到/tmp下踩叭,并更名為bashrc
cp ~/.bashrc /tmp/bashrc
cp -i ~/.bashrc /tmp/bashrc
# 重復做兩次操作,由于/tmp下面已經存在bashrc了翠胰,加上-i參數(shù)后容贝,
# 則在覆蓋前會詢問用戶是否確定,可以按下n(否)或者y(是)來二次確認
# 范例二:在/tmp目錄下創(chuàng)建/test/test1/test2/test3目錄之景,將/test2目錄復制到/tmp目錄下
cd /tmp
mkdir -p ./test/test1/test2/test3
cp -r test/test1/test2 test2
ls
-r
參數(shù)在目錄復制過程中經常使用斤富,能夠遞歸的將文件夾內部的內容復制到目標文件夾
- rm(移除文件或者目錄)
rm [-fir] 文件或者目錄
參數(shù):
-f: 就是force的意思,忽略不存在的文件锻狗,不會出現(xiàn)警告信息
-i: 互動模式满力,在刪除前會詢問用戶是否操作
-r: 遞歸刪除焕参,最常用在目錄的刪除了,`這是非常危險的參數(shù)S投睢5住!`
cd /tmp
rm -r test <== 將cp命令的范例二中的test目錄刪除
touch test.txt <== touch 命令能夠創(chuàng)建一個空文件
ls <== 查看剛剛創(chuàng)建的文件
rm -i test.txt
# 輸入n:不刪除悔耘,y:刪除
注意讲岁,刪除任何文件的時候,一定要確認該文件是可以被刪除的衬以。誤刪文件對程序員來說是很致命
- mv (移動文件與目錄缓艳,或重命名)
mv [-fiu] source destination
mv [options] source1 source2 source2 source3 .... directory
參數(shù):
-f: force 強制的意思,如果目標文件已經存在看峻,不會詢問而直接覆蓋
-i: 若目標文件(destination)已經存在時阶淘,就會詢問是否覆蓋
-u: 若目標文件已經存在,且source比較新互妓,才會更新(update)
# 范例一:將某個文件移動到某個目錄中
cd /tmp
touch testmv.txt <== 創(chuàng)建名為testmv.txt的文件
mkdir mvtest
mv testmv.txt mvtest
# 將某個文件移動到某個目錄去溪窒,就是這樣做
# 范例二:將剛才的目錄名稱重命名為mvtest2
mv mvtest mvtest2
# 范例三:再創(chuàng)建兩個文件,移動到/tmp/mvtest2
touch testmv1
touch testmv2
mv testmv1 testmv2 mvtest2
# 注意這邊冯勉,如果有多個源文件或者目錄澈蚌,則最后一個目標文件一定是“目錄”
# 意思是說,將所有的數(shù)據移動到該目錄的意思
mv
就是move灼狰,移動的意思宛瞄。當你要移動文件或者目錄的時候,這個命令就很重要交胚。同樣份汗,你也可以使用-u
(update)來測試新舊文件,看看是否需要移動蝴簇。另外一個用途就是“更改文件名”杯活,我們可以很輕易的使用mv來更改一個文件的文件名。
5. 文件的內容查閱
如果我們要查閱一個文件的內容時熬词,該如何是好呢旁钧?下面給大家介紹幾個常用的查看文件命令的命令。
- cat: 由第一行開始顯示文件內容
- nl: 顯示的時候順便顯示行號
- more: 一頁一頁的顯示文件內容
- less: 與more類似
- head: 只看頭幾行
- tail: 只看結尾幾行
直接查看文件內容
直接查看一個文件的內容可以使用cat, tac, nl這幾個命令
- cat(concatenate[串聯(lián)])
cat [-AbEnTv]
參數(shù):
-A: 相當于-vET的整合參數(shù)互拾,可列出一些特殊字符均践,而不是空白而已
-b: 列出行號,僅針對非空白行做行號顯示摩幔,空白行不標行號
-E: 將結尾的斷行字符$顯示出來
-n: 打印出行號彤委,連同空白行也會有行號,與-b的參數(shù)不同(常用)
-T: 將[Tab]按鍵以^I顯示出來
-v: 列出一些看不出來的特殊字符
# 范例一:查看某個文件的內容
echo "一句話證明你是海迷" >> testcat <== 創(chuàng)建一個名為testcat的文件或衡,同時焦影,向文件寫入內容
echo "我是要成為海賊王的男人" >> testcat <== 向該文件追加寫入內容
cat testcat
一句話證明你是海迷
我是要成為海賊王的男人
# 承上车遂,如果想打印行號呢
cat -n testcat
1 一句話證明你是海迷
2 我是要成為海賊王的男人
cat比較適合查看,大小較小的文件內容斯辰,像一些配置文件
- nl(添加行號打印)
nl [-bnw] 文件
參數(shù):
-b: 指定行號指定的方式舶担,主要有兩種
-b a: 表示無論是否為空行,也同樣列出行號(類似 cat -n)
-b t: 如果有空行彬呻,空的那一行不要列出行號(默認值)
-n: 列出行號的表示方法衣陶,主要有三種
-n ln: 行號在屏幕的最左方顯示
-n rn: 行號在自己字段的最右方顯示,且不加0
-n rz: 行號在自己字段的最右方顯示闸氮,且加0
-w: 行號字段占用的位數(shù)
nl testcat
nl實際上很少使用剪况,這里就不再贅述了
翻頁查看文件內容
- more (一頁一頁的翻動)
cd /tmp
cp /var/log/wifi.log . <== 將wifi.log復制到/tmp目錄下
more wifi.log
如果more后面的文件內容行數(shù)大于屏幕輸出的行數(shù)時,就會以分頁的形式顯示文件內容蒲跨。在more這個程序運行過程中译断,你有幾個按鍵可以按的:
- 空格鍵(Space): 代表向下翻一頁
- Enter: 代表向下滾動一行
- :f : 立即顯示出文件名以及目前顯示的行數(shù)
- q: 退出
- b或者ctrl-b : 代表往回翻頁
- /字符串: 向下查詢字符串這個關鍵字
輸入了/之后,光標就會跑到最下面一行或悲,并且等待你的輸入孙咪,你輸入了字符串并按下[Enter]后,more就會開始向下查詢該字符串巡语,而重復查詢同一字符串翎蹈,可以直接按下n即可。最后男公,不想要看了杨蛋,就按下q即可離開more
- less (一頁一頁翻動)
功能與more幾乎一樣,就不再介紹了
數(shù)據選取
我們可以對輸出的數(shù)據做一個簡單的選取理澎,那就是取出前面(head)與取出后面(tail)文字的功能。不過曙寡,要注意的是糠爬,head與tail都是以“行”為單位來進行選取的。
- head(取出前面幾行)
head [-n number] 文件
參數(shù):
-n: 后面接數(shù)字举庶,代表顯示幾行的意思
# head默認顯示文件的前10行执隧,若要顯示20行,就得指定參數(shù)n的值為20
cd /tmp
head three_days_to_see.txt <== 顯示了文件前10行的內容
head -n 20 three_days_to_see.txt <== 顯示文件的前20行的內容
- tail(取出后面幾行)
tail [-n number] 文件
參數(shù):
-n: 后面接數(shù)字户侥,代表顯示幾行的意思(常用)
-f: 持續(xù)檢測文件的內容變化(常用)
6. 文件的創(chuàng)建
前面大家已經學會如何利用mkdir創(chuàng)建文件夾镀琉,那么如何利用命令行創(chuàng)建一個文件呢?下面將會為大家介紹一個新命令touch
- touch(創(chuàng)建文件)
touch [-acdmt] 文件名
參數(shù):
-a: 僅修改訪問時間
-c: 僅修改文件的時間蕊唐,若該文件不存在則不創(chuàng)建新文件
-d: 后面可以接欲修改的日期而不是目前的日期屋摔,也可以使用--data="日期或者時間"
-m: 僅修改mtime
-t: 后面可以接欲修改的時間而不用目前的時間,格式為[YYMMDDhhmm]
touch testtouch <== 創(chuàng)建一個名為testtouch的文件
7. 環(huán)境變量
在所有Unix
和類Unix
系統(tǒng)中替梨,環(huán)境變量(environment variables)一般是指在操作系統(tǒng)中用來指定操作系統(tǒng)運行環(huán)境的一些參數(shù)钓试,它包含了一個或者多個應用程序所將要使用到的信息装黑。
ok,介紹了環(huán)境變量的概念弓熏,我們知道查看文件屬性的命令ls的完整文件名為:/bin/ls(這是絕對路徑)恋谭,那你會不會覺得很奇快:“為什么我可以在任何地方執(zhí)行l(wèi)s這個命令呢?”這就是因為環(huán)境變量PATH的幫助挽鞠。
當我們在執(zhí)行一個命令的時候疚颊,舉例來說“l(fā)s”好了,系統(tǒng)會按照PATH的設置去每個PATH定義的目錄下查詢文件名為ls的可執(zhí)行文件信认,如果在PATH定義的目錄中含有多個文件名為ls的可執(zhí)行文件材义,那么先查詢到的同名命令先被執(zhí)行。
在Mac(以及Linux)下狮杨,環(huán)境變量是存儲在PATH
的變量里面母截。可以通過在終端中輸入echo $PATH
命令查看當前的環(huán)境變量
現(xiàn)在橄教,讓我們執(zhí)行echo $PATH
這個命令查看本機的環(huán)境變量
echo $PATH
PATH
(一定是大寫)這個變量的內容是由一堆目錄所組成的清寇,每個目錄中間用冒號(:)來隔開,每個目錄是有“順序“之分的护蝶。
8. 命令與文件的查詢
有時候华烟,我需要快速的定位某個文件或者某個字符串的位置,以便我們能快速的對其進行編輯持灰。此時盔夜,就得用到一些查詢命令將要編輯的文件的路徑找出來,這樣才能修改或者查看
腳本文件名的查詢
- which (尋找“執(zhí)行文件”)
which [-a] command
參數(shù):
-a: 將所有PATH目錄中可以找到的命令均列出堤魁,而不只第一個被找到的命令名稱
which ifconfig
這個命令時根據PATH
這個環(huán)境變量所規(guī)范的路徑去查詢“執(zhí)行文件”的文件名喂链。所以,重點是找出執(zhí)行文件而已妥泉!且which后面接的是完整文件名椭微。若加上-a參數(shù),則可以列出所有的可以找到的同名執(zhí)行文件盲链,而非僅顯示一個而已蝇率。
- whereis
whereis [-bmsu] 文件或目錄名
參數(shù):
-b: 只著二進制格式的文件
-m: 只找在說明文件manual路徑下的文件
-s: 只找source源文件
-u: 查找不在上述三個選項當中的其他特殊文件
whereis ifconfig
whereis是一個很方便又快速的查找命令。常用在我們定位某些運行環(huán)境的安裝目錄中刽沾,例如:你想知道本機的java安裝在哪個目錄下了本慕,你可以通過執(zhí)行whereis java
找到
普通文件的查詢
下面,我想給大家介紹一下如何在Mac系統(tǒng)下快速的查找文件侧漓。
雖然锅尘,系統(tǒng)原生提供了find
命令,用來給大家查詢文件使用布蔗,但是find命令比較復雜而且效率低鉴象,速度慢忙菠。因此我推薦大家在Mac系統(tǒng)下使用ack
或者ag(the_silver_searcher)
進行文件搜索
- ack
- 安裝ack程序
第二章中,介紹了Homebrew纺弊,我們將使用Homebrew來安裝ack
brew install ack
- 使用ack進行搜索
按文件名搜索
ack -lg test.js <== 搜索文件名中包含test.js的文件
按字符串搜索
ack test <== 搜索出所有包含test字符串的地方
ack -l test <== 搜索所有包含test字符串的文件
- ag(又名the_silver_searcher)
- 安裝ag程序
使用brew安裝ag
brew install the_silver_searcher
- 使用ag進行搜索
按文件名搜索
ag -g Dockerfile <== 搜索所有文件名中包含Dockerfile的文件
ag -g Dockerfile ./programFile <== 在目錄./programFile下搜索文件名包含Dockerfile的文件
按字符串搜索
ag docker <== 搜索出所有包含docker字符串的地方
ag -l docker <== 搜索所有包含docker字符串的文件
9.Mac下常用開發(fā)軟件推薦
文檔相關
編輯器
- vscode:很好用的代碼編輯器(很好的支持js,golang,python,ruby語言)
- Atom:很好用的輕量的代碼編輯器
- Sublime Text:前端工程師的最愛
- TextMate:文本編輯器牛欢,可以替代系統(tǒng)原生的文本編輯器
工具軟件
- SourceTree:免費的GIT GUI軟件
- Studio 3T:The IDE for MongoDB
- Medis:Beautiful Management Application for Redis
- Sequel Pro:sql數(shù)據庫的GUI管理軟件
- Postman:請求模擬工具