linux】1 Shell
1. 語錄
計算機不僅僅用來開發個網站或軟件,更是我們手中的利器,我們的tools。
shell是我們與計算機交互的主要方式,可視化的圖形界面其實很受限,你只能通過預設的按鈕去做一些事情。
2. Shell
2.1 程序
大多數操作系統都擁有一個“shell”,比如windows中的PowerShell。它們之間可能有些區別,但總的來說差不多。通過安裝git,Windows系統也能夠使用類似于Linux的Git bash。(windows 下的git bash有時也不太一樣,更建議真正的linux系統)
shell中可以通過輸入程序名來執行程序,比如有個程序叫date,就之間輸入($是命令提示符,就像windows中的>)
$?date Sat?Mar?18?20:52:33?????2023
可以給程序傳遞參數,例如程序echo的運行效果就是把傳遞給它的參數打印出來,
$?echo?hello hello
此外,如果有多個參數,參數之間是使用空格分開的,如果傳多單詞組成的參數,可以使用(轉義字符),例如下面其實只給echo傳了一個參數,
$?echo?hello?world hello?world
系統可以找到你輸入的程序,是通過?Path(路徑),可以查看環境變量中的所有路徑
$?echo?$PATH /c/Users/ThinkPad/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/ThinkPad/bin:/c/Program?Files/Common? ...(我省略了)
在你輸入一個程序名,比如echo時,shell就會在系統的所有路徑的目錄中搜索該程序,你可以這樣查看一個程序所在的路徑
$?which?echo /usr/bin/echo
補充:關于程序(命令)的參數,我們使用-后面接單個字母,使用–后面接單詞。例如-a,–all。
2.2 目錄
程序默認會在當前目錄下運行。下面是一些常用的目錄操作
命令 | 介紹 |
---|---|
pwd(print work Directory) | 打印當前目錄路徑 |
ls | 列出當前目錄下的文件,使用-l參數將顯示更多詳細信息 |
cd | 切換目錄到指定目錄,使用cd -可回到剛才所在的目錄,方便在兩個目錄間切換。.表示當前目錄,..表示父目錄,~表示用戶目錄,/開頭表示根目錄。 |
通過–help參數,可以查看某個命令的用法,例如
$?ls?--help
想一想:ls -l列出的目錄列表及其信息,如何解讀?
為了對文件進行相應的操作,必須擁有整個路徑的權限。下面是一些和文件操作有關的命令介紹。
2.3 文件
2.3.1 簡單文件操作
你可以使用mv命令給文件重命名,即使它是move(移動)的意思。假設你在當前的目錄下已經有個文件hello.txt,那么你可以使用命令
$?mv?hello.txt?hello2.txt
將它重命名為hello2.txt。cp命令可以復制文件,它的意思是copy?(很顯然),你可以接著剛才的命令使用
$?cp?hello2.txt?hello.txt
那么你的hello.txt文件又回來了!現在你有了兩個相同內容的文件,卻有著不一樣的名字。但估計你會覺得這有些多余,但好在你可以使用命令rm刪掉其中一個,就像下面這樣
$?rm?hello2.txt
好了,現在我們又回到了剛剛開始的樣子,但我們剛剛的操作已經在終端留下了雜亂的信息,使用clear命令清除它們!
$?clear
如果你想新建文件,可以使用touch命令,比如新建一個空hello2.txt文件
$?touch?hello2.txt
有時你會感覺命令的名字有些奇怪,為什么創建文件要是touch?其實它就像前面的mv命令,重命名僅僅對它的一種使用方式,而它能做的不止于此,它其實可以將文件移動到你計算機的任何一個地方!
touch是一個時間戳命令,當操作的文件不存在時就會自動新建一個文件——而不是它本身只有新建文件的功能。當你感到疑惑時可以使用touch –help看看幫助文檔。而我使用echo命令同樣達到新建文件的目的
$?echo?''?>?hello3.txt
它將新建一個空文件hello3.txt?。你可能看著這些linux命令就像回到了高中背單詞的時候,同一個單詞有著相互略微聯系的多種用法——也確實如此,單詞是語言的基礎。
至于剛剛命令中的>>符號,相信大家一看就懂,我們后面也將會進一步介紹。
2.3.2 重定向
你可以使用重定向來將程序的輸出保存到文件中,而不是直接顯示在屏幕上。這里有個流的概念,每個程序都有自己的輸入流與輸出流,程序從自己的輸入流中讀取數據,并將運行結果寫入到輸出流中。而程序默認從鍵盤輸入獲取數據,并將運行結果寫到屏幕上,我們將鍵盤輸入稱為標準輸入流,將屏幕稱為標準輸出流。而重定向將助你獲得修改程序輸入、輸出方向的能力——而不總是鍵盤和屏幕。
echo命令將輸入流中的數據傳遞到輸出流,但我現在不想輸出到屏幕,我要將輸入的內容保存到文件里,那么可以使用>——重定向輸出流。
$?echo?hello?>?hello.txt
想一想:為什么echo
類似地可以使用
$?cat?hello.txt hello
現在我們通過重定向,可以將hello.txt文件的內容復制到另一個文件hello2.txt中
$?cat??hello2.txt $?cat?hello2.txt hello
cat程序從hello.txt中獲得輸入,并將輸出寫入了hello2.txt中——而不是屏幕上。
>重定向的輸出流是覆蓋模式,對應到文件操作中,就是先清空文件中原有的內容,然后寫入新內容。如果你是想在原來的基礎上添加一些內容,那么>>很適合你,它將以追加模式寫入新內容。
$?echo?world?>>?hello.txt $?cat?hello.txt hello world
命令 | 介紹 |
---|---|
重定向輸入流 | |
> | 重定向輸出流,以覆蓋模式寫入 |
>> | 重定向輸出流,以追加模式寫入 |
2.4 管道
一個程序的輸出可以保存到文件里,也可以直接傳遞給另一個程序。管道符號 | 的作用就是將左側程序的輸出直接傳遞作為右側程序的輸入。
tail命令通過-n參數,可以輸出它輸入中的最后n行。要僅顯示ls -l /命令結果的最后兩行,可以使用以下命令
$?ls?-l?/?|?tail?-n?2 -rw-r--r--??1?ThinkPad?197121???24183?Nov?28?12:20?unins000.msg drwxr-xr-x??1?ThinkPad?197121???????0?Nov?28?12:20?usr/
tee命令可以將輸入同時輸出到屏幕和指定的文件中,那么加上管道你可以像下面這樣
$?echo?linux1234?|?tee?hello.txt linux1234