前言
程式設計師:“我要跑路了,告訴我命令列是rm -rf /*
的那個人你小心點。”
“rm -rf
” 引發的血案都在菜鳥程式設計師中經常出現,初初入行的前後端們基礎不紮實。
容易出現沒有圖形使用者介面 (GUI
)就無從下手,連部署應用都不會的尷尬局面。
竊以為,熟悉掌握Linux
下的Vim
和常用的命令是每個程式設計師的必修課。
而且,連微軟都擁抱Linux terminal
,推出了Windows Terminal
。你還有 什麼理由不學?
1. grep
:查詢檔案中的關鍵字
$ grep "string" [選項] file
複製程式碼
使用grep
命令查詢檔案中的所有React
關鍵字:
-i
選項可以在檔案中不區分大小寫地搜尋字串。它匹配"REACT
","REact
"和"react
"等詞。$ grep -i "REact" file 複製程式碼
-c (count)
選項,可以找到給定字串/模式匹配的行數$ grep -c "react" index.js 複製程式碼
更多的選項可以檢視下圖:
2. ls
:列出當前路徑中的檔案和目錄。
$ ls
複製程式碼
ls
列出當前路徑中的檔案和目錄。
- 如果為資料夾,則顯示成藍色。
- 如果為檔案,則顯示成灰色
3. pwd
: 顯示工作目錄
$ pwd
複製程式碼
4. cat
:檢視檔案的內容
$ cat somefile.js
複製程式碼
cat主要有三大功能:
- 一次顯示整個檔案。
$ cat filename
複製程式碼
- 建立一個檔案,並將前面命令的輸出內容填充進去
$ cat > filename
複製程式碼
只能建立新檔案,不能編輯已有檔案。 3. 將幾個檔案合併為一個檔案。
$cat file1 file2 > file
複製程式碼
以下例子,將index.js
拷貝一份為index2.js
5. echo
:字串的輸出
$ echo "some text"
複製程式碼
這是一個內建命令,主要用於Shell指令碼和批處理檔案中,以將狀態文字輸出到螢幕或檔案。
6. touch
:建立檔案
$ touch somefile
複製程式碼
touch
命令用於建立沒有任何內容的檔案。
touch
建立檔案和cat
檢視檔案內部的。由於新建立的index2.js
檔案為空,因此cat
不返回任何內容。
以下是cat
和touch
之間的主要區別:
cat
,用於建立包含內容的檔案。touch
,建立一個沒有任何內容的空檔案。
7. mkdir
:建立一個新的空目錄
$ mkdir some-directory
複製程式碼
mkdir
在當前路徑中建立一個新的空目錄
8.rm
:刪除檔案/目錄
$ rm [選項] someFile
複製程式碼
rm
命令用於刪除一個檔案或者目錄。
選項:
-i
刪除前逐一詢問確認。-f
即使原檔案屬性設為唯讀,亦直接刪除,無需逐一確認。-r
將目錄及以下之檔案亦逐一刪除。
8.1 rmdir
:刪除空目錄
$ rmdir some-directory
複製程式碼
如果目錄中沒有內容,該命令將刪除目錄。否則返回提示xxx not empty
:
9. tail
:檢視文件的內容
$ tail [選項] somefile
複製程式碼
預設顯示文件的最後 10 行
幾個常用的引數:
-f
,迴圈讀取。
此命令顯示tail -f notes.log 複製程式碼
notes.log
檔案的最後 10 行。當將某些行新增至notes.log
檔案時,tail
命令會繼續顯示這些行。 顯示一直繼續,直到您按下(Ctrl-C
)組合鍵停止顯示。+
,從xx行到結尾
顯示檔案tail +20 notes.log 複製程式碼
notes.log
的內容,從第 20 行至檔案末尾。-c
,最後xx行。
顯示檔案tail -c 10 notes.log 複製程式碼
notes.log
的最後 10 個字元:
tail
命令在檢視崩潰報告或以前的歷史記錄日誌時很有用:
# tail /var/log/messages
Mar 20 12:42:22 hameda1d1c dhclient[4334]: DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x280436dd)
Mar 20 12:42:24 hameda1d1c avahi-daemon[2027]: Registering new address record for fe80::4639:c4ff:fe53:4908 on eth0.*.
Mar 20 12:42:28 hameda1d1c dhclient[4334]: DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x280436dd)
Mar 20 12:42:28 hameda1d1c dhclient[4334]: DHCPACK from 10.76.198.1 (xid=0x280436dd)
Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: Joining mDNS multicast group on interface eth0.IPv4 with address 10.76.199.87.
Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: New relevant interface eth0.IPv4 for mDNS.
Mar 20 12:42:30 hameda1d1c avahi-daemon[2027]: Registering new address record for 10.76.199.87 on eth0.IPv4.
Mar 20 12:42:30 hameda1d1c NET[4385]: /sbin/dhclient-script : updated /etc/resolv.conf
Mar 20 12:42:30 hameda1d1c dhclient[4334]: bound to 10.76.199.87 -- renewal in 74685 seconds.
Mar 20 12:45:39 hameda1d1c kernel: usb 3-7: USB disconnect, device number 2
複製程式碼
10. find
:搜尋檔案
$ find path -name filename
複製程式碼
find
命令可以快速查詢檔案或目錄。當你正在處理具有數百個檔案和多個目錄的大型專案時,此功能很有用。
查詢所有名為index.js
的檔案:
查詢指定型別的檔案:
$ find . -name "*.js"
複製程式碼
11. mv
:移動檔案
$ mv somefile /to/some/other/path
複製程式碼
該mv命令將檔案或目錄從一個位置移動到另一個位置。
支援移動單個檔案,多個檔案和目錄。
12. wget
:下載檔案的工具
$ wget someurl
複製程式碼
Wget
是一個免費軟體包,用於使用HTTP,HTTPS,FTP和FTPS
(最廣泛使用的Internet
協議)檢索檔案。
這是一個非互動式的命令列工具,因此可以很容易地從指令碼,CRON作業,不支援X-Windows
的終端等中呼叫它。
Wget
具有許多使檢索大型檔案或映象整個Web或FTP站點變得容易的功能,包括:
- 可以使用
REST
和RANGE
恢復中止的下載。 - 可以使用檔名萬用字元並遞迴映象目錄
- 基於NLS的訊息檔案,適用於多種語言
- 可將下載的文件中的絕對連結轉換為相對連結,以便下載的文件可以在本地連結。
- 在大多數類似
UNIX
的作業系統以及Microsoft Windows
上執行 - 支援
HTTP
代理,cookie
和持久的HTTP
連線. - 無人值守/後臺操作。
13. tree
:以樹狀圖列出目錄的內容
常在寫文件時需要列一下檔案目錄結構,這個時候tree
命令就能幫個忙了。某些Linux
、macOS
上沒有tree
命令,需要執行安裝:
- 先確保安裝了
Homebrew
,若沒有則執行:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 複製程式碼
- 安裝
tree
命令
brew install tree
複製程式碼
效果:
(base) xxx$ tree
.
├── djangoStudy
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
1 directory, 5 files
複製程式碼
14. |
:管道命令
通常情況下,我們在終端只能執行一條命令,然後按下回車執行,那麼如何執行多條命令呢?
- 順序執行多條命令:
command1;command2;command3;
簡單的順序指令可以通過;
來實現。 - 有條件的執行多條命令:
which command1 && command2 || command3
&&
: 如果前一條命令執行成功則執行下一條命令,和JavaScript
中用法一致- || :與
&&
命令相反,執行不成功時執行下一個。
$?
: 儲存上一次命令的返回結果
// 栗子:
$ which git>/dev/null && git --help // 如果存在git命令,執行git --help命令
$ echo $?
複製程式碼
而管道命令則可以銜接各種命令的輸出輸入,使得連鎖操作變得簡單。
管道是一種通訊機制,通常用於程式間的通訊(也可通過socket進行網路通訊),它表現出來的形式將前面每一個程式的輸出(stdout)直接作為下一個程式的輸入(stdin)
$ 指令1 | 指令2 | …
複製程式碼
管道命令的注意事項:
- 只能處理前一條指令的正確輸出,不能處理錯誤輸出;
- 後一條指令,必須能夠接收標準輸入流命令才能執行。
例子:
1、分頁顯示 /etc
目錄 中內容的詳細資訊
$ ls -l /etc | more
複製程式碼
2、將一個字串輸入到一個檔案中
$ echo "Hello World" | cat > hello.txt
複製程式碼
後記 & 引用
❤️ 看完三件事
如果你覺得這篇內容對你挺有啟發,我想邀請你幫我三個小忙:
- 點贊,讓更多的人也能看到這篇內容(收藏不點贊,都是耍流氓 -_-)
- 關注公眾號「前端勸退師」,不定期分享原創知識。
- 也看看其它文章
- Chrome Devtools 高階除錯指南(新)
- JavaScript 工具函式大全(新)
- 「React Hooks」120行程式碼實現一個互動完整的拖拽上傳元件
- 「React Hooks」160行程式碼實現動態炫酷的視覺化圖表 - 排行榜
GitHub
部落格裡拿所有文章的原始檔:
前端勸退指南:github.com/roger-hiro/…