使用的電腦為 mac 。
參考:Learn Enough Command Line to Be Dangerous
目錄結(jié)構(gòu)
在 Unix 中的所有目錄都是 /
的子目錄洋丐。目錄以 /
開頭和分隔目錄焰盗。
/Users/yourname/ruby/projects
和 ~/ruby/projects
是一樣的难捌。
除了用戶目錄之外链烈,每個 Unix 系統(tǒng)都有用于計算機正常操作的程序的系統(tǒng)目錄。超級用戶才能修改系統(tǒng)文件或者系統(tǒng)目錄兼犯,root。以root身份登錄的超級用戶很強大集漾,以至于被認(rèn)為是一種不好的形式; 被替代的做法是作為 root 執(zhí)行的任務(wù)通常應(yīng)該使用 sudo 命令切黔。
sudo !!
會以 sudo 形式運行上一個命令。
!ls
會運行 上一個 ls 命令具篇。
sudo
命令讓普通的用戶可以像超級yo可以執(zhí)行命令
創(chuàng)建目錄
mkdir 是 make directory
的縮寫.
$ mkdir text_files
創(chuàng)建過目錄纬霞,我們可以使用通配符把所有的文本文件都轉(zhuǎn)移到這個目錄里面。
$ mv *.txt text_files/
我們可以通過 ls
確認(rèn)一下:
$ ls text_files/
ls
一個目錄驱显,可以把它包含的所有內(nèi)容都展示出來诗芜,我們可以用 -d
來僅僅展示目錄。
$ ls -d text_files/
這個常常和 -l
一起使用埃疫。
$ ls -ld text_files/
我們可以通過 cd
切換目錄伏恐。
cd
支持 Tab
自動補全。
可以只輸入部分栓霜,再按 Tab
鍵即可自動補全翠桦。如 cd tex?
cd
輸入之后,我們可以用 print working directory
命令叙淌,縮寫 pwd
秤掌,還有 ls
一起配合使用來看我們是否進(jìn)入了正確的目錄。
$ pwd
看看你是否在正確的目錄結(jié)構(gòu)
$ ls
看看目錄中的內(nèi)容鹰霍,就可以確定您是都正確進(jìn)入
切換目錄
使用 cd
是最主要的切換目錄的方式闻鉴,但還有很多別的形式值得我們了解。想去上級目錄茂洒,可以使用 cd ..
如:
$ pwd
/Users/mhartl/text_files
$ cd ..
$ pwd
/Users/mhartl
如果只輸入 cd
孟岛,將會進(jìn)入用戶的根目錄。和 cd ~
是一樣的督勺。
如果我們在其他的目錄下渠羞,使用 cd ~/text_files
這種形式可以快速進(jìn)入這個目錄中。
cd .
代表當(dāng)前目錄智哀。最常用的是移動文件或者復(fù)制文件到當(dāng)前目錄中次询。
如:
$ pwd
/Users/mhartl/text_files
$ cd ~/second_directory
$ ls
$ cp ~/text_files/sonnets.txt .
$ ls
sonnets.txt
在上面,第一次輸入 ls
沒有東西輸出瓷叫,是因為屯吊,剛剛創(chuàng)建的 second_directory
里面還是空的送巡。
另外一個用 .
的是和 find
一起使用。想 grep
一樣的強大盒卸。
如:
$ cd
$ find . -name '*.txt'
./text_files/sonnet_1.txt
./text_files/sonnet_1_reversed.txt
./text_files/sonnets.txt
這是找到當(dāng)前目錄下以及它們的子目錄中所有匹配 *.txt
的文件骗爆。
還有使用 .
的地方是 open .
,在 mac 系統(tǒng)中總是可以生效蔽介。
open
命令可以打開目錄或者文件摘投,比如 open foo.pdf
將會用默認(rèn)的 pdf 預(yù)覽器打開 foo 這個 PDF 文件, open .
則是在 finder 中打開虹蓄。
最后一個切換命令是 cd -
, 它會切換到上一個目錄中犀呼。
如:
$ pwd
/Users/mhartl/second_directory
$ cd ~/text_files
$ pwd
/Users/mhartl/text_files
$ cd -
/Users/mhartl/second_directory
混合命令。
如:
$ ./configure ; make ; make install
這個混合命令武花,會先執(zhí)行 make
在執(zhí)行 make install
更好一點的寫法是:
$ ./configure && make && make install
一個用 ;
分隔開圆凰,一個用 &&
分隔開。使用 &&
的話体箕,只有上一個命令執(zhí)行成功了才會執(zhí)行下一個命令专钉。而使用 ;
分隔,不管上一個命令是否執(zhí)行成功累铅,都會執(zhí)行下一個命令跃须。
重命名,復(fù)制和刪除目錄
重命名:
$ mkdir foo
$ mv foo/ bar/
$ cd foo/
-bash: cd: foo: No such file or directory
$ cd bar/
把 text_files
目錄及所有內(nèi)容 復(fù)制到 foobar 中:
$ cd
$ mkdir foobar
$ cd foobar/
$ cp -r ../text_files .
$ ls
text_files
如果僅僅是復(fù)制目錄下的所有內(nèi)容到此目錄中娃兽,要加上 /
,如:
$ cp -r ../text_files/ .
$ ls
sonnet_1.txt sonnet_1_reversed.txt sonnets.txt text_files
如果你只是想復(fù)制文件菇民,使用 *
來表示,如:
$ cp ../text_files/* .
把 text_files 下的所有文件復(fù)制到當(dāng)前目錄下投储。
刪除目錄 rmdir
第练,很難執(zhí)行成功。如:
$ cd
$ rmdir second_directory
rmdir: second_directory/: Directory not empty
當(dāng)刪除目錄的時候玛荞,99% 的記錄會出現(xiàn)上面這個錯誤娇掏,因為 rmdir
目錄必須要是空的⊙校可以使用一個更強大婴梧,但同時也更危險的命令 remove recursive force
,即 rm -rf
客蹋,這會刪除這個目錄塞蹭,以及這個目錄里的所有文件及子目錄,而且沒有再次的確認(rèn)提示讶坯。
如:
$ rm -rf second_directory/
$ ls second_directory
ls: second_directory: No such file or directory
如果你想找到含有 sesquipedalian
這個詞的文件番电,但是你又忘記了文件的名字了,你可以使用:
$ grep -r sesquipedalian text_files
text_files/foo/long_word.txt:sesquipedalian
由于大小寫不重要辆琅,建議在遞歸的情況下添加 -i
選項漱办,如下:
$ grep -ri sesquipedalian text_files
text_files/foo/long_word.txt:sesquipedalian
總結(jié)
Command | Description | Example |
---|---|---|
mkdir <name> | Make directory with name | $ mkdir foo |
pwd | Print working directory | $ pwd |
cd <dir> | Change to <dir> | $ cd foo/ |
cd ~/<dir> | cd relative to home | $ cd ~/foo/ |
cd | Change to home directory | $ cd |
cd - | Change to previous directory | $ cd && pwd && cd - |
. | The current directory | $ cp ~/foo.txt . |
.. | One directory up | $ cd .. |
find | Find files & directories | $ find . -name foo*.* |
cp -r <old> <new> | Copy recursively | $ cp -r ~/foo . |
rmdir <dir> | Remove (empty) dir | $ rmdir foo/ |
rm -rf <dir> | Remove dir & contents | $ rm -rf foo/ |
grep -ri <string> <dir> | Grep recursively (case-insensitive) | $ grep -ri foo bar/ |