Linux 操作命令
路是腳踏出來的,歷史是人寫出來的。人的每一步行動都在書寫自己的歷史。
Linux 基礎命令
-
open:打開文件操作,如環境配置文件。
open ~/.zshrc -
vi:vi (visual interface), linux 中最經典的文本編輯器 vim(vi improved)是 vi 發展出來的一個文本編輯器,支持代碼補全、編譯、錯誤跳轉等方便編程的功能非常豐富。
vim /etc/hosts -
echo:輸出、查看相關常量值,打印一個值。
# 查看當前系統正在使用的 shell echo $SHELL # 查看當前進程正在使用的 shell echo $0 -
cat / more / less:獲取輸出文件里的相關內容。cat 是一次性顯示整個文件的內容,more 和 less一般用于顯示文件內容超過一屏的內容,并且提供翻頁(空格)、單行加載(回車鍵)的功能。more 比 cat 強大,提供分頁顯示的功能,less 比 more 更強大,提供翻頁,跳轉,查找等命令。而且 more 和 less 都支持:用空格顯示下一頁,按鍵 B 顯示上一頁。
# 查看系統 hosts 文件內容 more /etc/hosts # 查看當前系統支持的 shell 程序 cat /etc/shells -
touch:創建文件。
touch Profile -
mkdir:創建文件夾。參數 -p 確保目錄名稱存在,如果目錄不存在的就新創建一個。
# 若不加 -p,且原本 File 目錄不存在,則產生錯誤。 mkdir -p File/Test -
rm -f *:清空文件夾內部文件。
-
sudo:Linux sudo 命令以系統管理者的身份執行指令。
# vim 編輯器編輯 hosts 文件 sudo vi /etc/hosts -
env:查看當前所有環境變量。
-
chsh -s /bin/bash:修改當前系統使用的Shell程序。
-
where:查找安裝包所在位置。
where brew -
cp:指令是用于復制文件或目錄的指令,如同時指定兩個以上的文件或目錄,且最后的目的地是一個已經存在的目錄,則它會把前面指定的所有文件或目錄復制到此目錄中。
Linux 重定向
重定向理解:
shell 重定向包含輸出重定向和輸入重定向。何為輸入輸出方向?何為標準輸入輸出方向?
標準輸入方向:從鍵盤讀取用戶輸入的數據,然后再把數據拿到程序(C語言程序、Shell 腳本程序等)中使用;這就是標準的輸入方向,也就是從鍵盤到程序。
標準輸出方向:相反,程序運行產生的數據一般都是直接呈現到顯示器上,這就是標準的輸出方向,也就是從程序到顯示器。
其實,輸入輸出方向就是數據流動的方向,那么輸入重定向就是改變程序數據的來源的。輸出重定向就是改變程序輸出屏幕到其他地方。
硬件設備和文件描述符:
計算機硬件有很多,常見的輸入設備有鍵盤、鼠標、麥克風、手寫板等,輸出設備有顯示器、投影儀、打印機等。不過,在 Linux 中,標準輸入設備指的是鍵盤,標準輸出設備指的是顯示器。
同時,Linux 中一切皆文件,包括標準輸入設備(鍵盤)和標準輸出設備(顯示器)在內的所有計算機硬件都是文件,為了表示和區分已經打開的文件,Linux 會給每個文件分配一個 ID,這個 ID 就是一個整數,被稱為文件描述符(File Descriptor)。
| 文件描述符 | 文件名 | 類型 | 硬件 |
|---|---|---|---|
| 0 | stdin | 標準輸入 | 鍵盤 |
| 1 | stdout | 標準輸出 | 顯示器 |
| 2 | stderr | 標準錯誤輸出 | 顯示器 |
Linux 程序在執行任何形式的 I/O 操作時,都是在讀取或者寫入一個文件描述符。一個文件描述符只是一個和打開的文件相關聯的整數,它的背后可能是一個硬盤上的普通文件、FIFO、管道、終端、鍵盤、顯示器,甚至是一個網絡連接。
Shell 輸出重定向:
| 類 型 | 符 號 | 作 用 |
|---|---|---|
| 標準輸出重定向 | 命令 > 文件 | 以覆蓋的方式,把命令的正確輸出結果輸出到指定的文件或設備中。 |
| 命令 >> 文件 | 以追加的方式,把命令的正確輸出結果輸出到指定的文件或設備中。 | |
| 標準錯誤輸出重定向 | 命令 2> 文件 | 以覆蓋的方式,把命令的錯誤信息輸出到指定的文件或設備中。 |
| 命令 2>> 文件 | 以追加的方式,把命令的錯誤信息輸出到指定的文件或設備中。 | |
| 正確輸出和錯誤信息同時保存 | 命令 > 文件 2> &1 | 以覆蓋的方式,把正確輸出和錯誤信息同時保存到同一個文件中。 |
| 命令 >> 文件 2> &1 | 以追加的方式,把正確輸出和錯誤信息同時保存到同一個文件中。 | |
| 命令 &> 文件 | 以覆蓋的方式,把正確輸出和錯誤信息同時保存到同一個文件中。 | |
| 命令 &>> 文件 | 以追加的方式,把正確輸出和錯誤信息同時保存到同一個文件中。 | |
| 命令 >> 文件1 2>> 文件2 | 把正確的輸出追加到文件1中,把錯誤信息追加到文件2中。 |
在輸出重定向中,>代表的是覆蓋,>> 代表的是追加。注意,在類似 命令 2> 文件這樣的寫法中,2 是文件描述符,它對應的是 stderr。
對于重定向中的標準輸出文件,可以省略文件描述符 1 不寫,而標準錯誤輸出文件,必須要寫上文件描述如 2。如果你愿意,也可以將 命令 > 文件 寫作 命令 1> 文件,但這樣做是多此一舉。
另外還要注意,2 和 > 之間不能有空格,也就是說,不能將 命令 2> 文件 寫作 命令 2 > 文件。
Shell 輸入重定向:
輸入重定向就是改變輸入的方向,不再使用鍵盤作為命令輸入的來源,而是使用文件作為命令的輸入。
| 符號 | 說明 |
|---|---|
| 命令 < 文件 | 將指定的文件作為命令的輸入。 |
| 命令 << 分界符 | 從標準輸入(鍵盤)中讀取數據,直到遇見分界符才停止。 |
| 命令 < 文件1 > 文件2 | 將文件1作為命令的輸入,并將命令的處理結果輸出到文件2。 |
示例:
# 統計文件中有多少行文本:readme.txt
$ cat readme.txt # 預覽一下文件內容
$ wc -l < readme.txt # 輸入重定向
我們使用輸入重定向符號 <<,這個符號的作用是使用特定的分界符作為命令輸入的結束標志,而不使用 Ctrl+D 鍵。
$ wc -l << END
> 123
> 456
> 789
> qwe
> END
4
# wc 命令會一直等待用輸入,直到遇見分界符 END 才結束讀取
diff 命令解析
diff 是文件及目錄對比命令,具體解析應用如下,其 shell 中 $? 是一個特殊的 shell 變量,用于存儲上一個命令的執行狀態。當一個 shell 命令執行完畢后,它會返回一個狀態值,表示該命令執行的結果。
# diff 對比文件內容是否一致 > /dev/null 代表把 diff 的輸出重定向到 null,不會在終端顯示。
diff "${PODS_PODFILE_DIR_PATH}/Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null
# $? 代表上一句命令,也就是 diff 命令的返回值。如果是0,說明文件內容相同。不是 0 說明文件內容不一致。
if [ $? != 0 ] ; then
# print error to STDERR
echo "error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation." >&2
exit 1
fi
# This output is used by Xcode 'outputs' to avoid re-running this script phase.
echo "SUCCESS" > "${SCRIPT_OUTPUT_FILE_0}"
Shell 中條件判斷
if [條件語句1]; then
# 條件成立執行語句
elif [條件語句2]; then
# 條件成立執行語句
else
# 以上條件都不滿足時候執行
fi # 結束條件語句

浙公網安備 33010602011771號