【Linux】常見指令(下)
- 通配符 '*'
- man指令
- cp指令
- echo指令
- cat指令(簡單介紹)
- cp指令
- mv指令
- alias指令
- which
- ctrl + c
- cat指令
- linux下一切皆文件
- more指令
- less指令
- head指令
- tail指令
- 管道
通配符 ‘*’
- 通配符’ *‘,'是可以匹配匹配任意名字的文件。
例如:
ls *.c 可以找到該目錄下的所有.c文件
ls test.*可以找到該目錄下的所有test開頭的文件。
同時,也可以使用其他指令搭配通配符’*'。
關于rm指令,一般推薦rm -rf XXX 這樣的方式進行指令操作,不推薦 rm XXX -rf的原因是這種指令在其他Linux環境中可以不適應。
【注意】關于rm指令在root賬號和普通用戶的使用可能會不同:
1.如果是root賬號在使用rm指令時,一般會去詢問,所以對于root賬號來說,rm選項中的-i選項是沒有意義的。
2.但是對于普通賬戶來說,直接使用rm指令,一般不會詢問,這是系統默認普通用戶所建立和刪除的文件或者目錄不重要,如果想要在刪除時被詢問,需要在rm后面添加選項 -i。
man指令
Linux的命令有很多參數,我們一般都很難記住,我們可以通過查看聯機手冊來獲取幫助。訪問Linux手冊頁的命令是man
【語法】:man [選項]命令
【常用選項】:
- -k 根據關鍵字搜索聯機幫助
- num 只在第num章節找
- -a 將所有章節的都顯示出來,比如 man printf 它缺省從第一章開始搜索,默認會停留在第一章節;當使用-a選項,當按下q時退出,他會繼續往后面搜索,知道所有章節都搜素完畢。
【解釋手冊】手冊被分為八章(重點在前三章):
1.是普通的命令
2.是系統調用,如open,write,之類的(通過這個,至少可以很方便的查到調用這個函數,需要加什么頭文件)
3.是庫函數,如printf,fread
4.是特殊文件,也就是/dev下的各種設備文件
5.是指文件的格式,比如passward,就會說明這個文件各個字段的含義
6.是給游戲留的,由各個游戲自己定義
7.是附件還有一些變量,比如向environ這種全局變量在這里就有說明
8.是系統管理用的命令,這些命令只能由root使用,如ifcoming
- Linux操作系統由于是使用C語言寫的,所以Linux操作系統的很多接口都是C的。
我們使用man man指令更加詳細的了解指令(部分截圖)(按q離開):
man ls指令(部分截圖):
man pwd指令(部分截圖):
man rm指令(部分截圖)
在man man指令中的八章中,現階段需要注意的就是前三章:
- 在使用man指令查詢時,上下建進行翻閱,按q離開。
【注意】我們在使用man指令查看printf的時候,可能會進入第一章(普通的命令)或者進入第三章(是庫函數),系統會按照順序默認進入第一章。
這是因為printf在Linux操作系統中不僅是作為C語言的一種庫函數,同是Linux中的一種命令,用于打印無換行符的數據。
- 使用man printf默認會進入第一章查看printf這個命令
- 想要特定查看printf的庫函數,可以添加選項 man 3 printf
【注意】可以部分操作系統沒有添加關于C的庫函數,此時可以更新一下man手冊:yum install man-pages
cp指令
在了解cp指令之前需要先對echo和cat倆個指令有一定的了解:
echo指令
- echo 指令,可以將后面的字符串原生打印。
現在可以執行echo “hello linux”,將字符串打印在屏幕上。
使用輸出重定向,將輸出到顯示屏上的內容輸出到文件上。
echo “hello linux” > test.txt
- 輸出重定向:現階段的理解,就是本來應該顯示到顯示器的內容,打印到文件中去。
【注意】指令echo與指令printf倆個指令都是輸出到一定位置,但是printf是沒有換行符的,而echo是有換行符的。
cat指令(簡單介紹)
- cat:打印文件內容
我們可以將上面echo輸出重定向文件的內容打印出來:
我們可以注意到,這個數據已經被寫入到文件中了。
cp指令
【語法】:cp [選項] 源文件或目錄 目標文件或目錄
【功能】:復制文件或目錄
【說明】:cp指令用于復制文件或目錄,如同時指定倆個以上的文件或目錄,且最后的目的地是一個已經存在的目錄,則它會把前面指定的所有文件或者目錄復制到此目錄中。若同時指定多個文件或者目錄,而最后的目的地并非一個已存在的目錄,則會出現錯誤信息。
【常用選項】:
- -f 或 - -force 強行復制文件或目錄,不論目的文件或目錄是否已經存在。
- -i 或 - -ineractive 覆蓋文件之前先詢問用戶
- -r 遞歸處理,將指定目錄下的文件與子目錄一并處理。若源文件或目錄的形態,不屬于目錄或符號鏈接,則一律視為普通文件處理。
- -R 或 - -recursive遞歸處理,將指定目錄下的文件及子目錄一并處理。
【例子】
將test.txt文件備份一份
./test_backup1.txt 與 test_backup.txt的位置相同,系統會默認將文件拷貝該目錄下。
也可以將文件拷貝到上級目錄下。
我們發現,在上次目錄中可以設置和此目錄中相同的文件名,經過我們對Windows系統的了解,同一個目錄下,不能出現同名文件,不同目錄下,可以出現同名文件,這在Linux操作系統中同樣適用。
進行選項操作-p可以進行遞歸處理。
同樣的,-i 與 -f 的選項操作只對普通用戶起作用
mv指令
mv命令是move的縮寫,可以用來移動文件或者將文件改名(move(rename)files),是Linux系統下常用的命令,經常用來備份文件或者目錄。
【語法】:mv [選項] 源文件或目錄 目標文件或目錄
【功能】:
1.視mv命令中第二個參數類型的不同(是目標文件還是目標目錄),mv命令將文件重命令或將其移至一個新的目錄中。
2.當第二個參數類型是文件時,mv命令完成文件重命名,此時,源文件只能有一個(也可以是源目錄名),它將所給的源文件或目錄重命名為給帝國的目標文件名。
3.當第二個參數是已存在的目錄名稱時,源文件或目錄參數可以有多個,mv命令將各個參數指定的源文件均移至目標目錄中。
【常用選項】:
- -f:force 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋
- -i:若目標文件(destination)已經存在,就會詢問是否滿意
【詳解】:
首先,mv指令是可以進行重命名的。
同時,mv指令也可以進行剪切,下面將tt.txt剪切到上級目錄中去。
下面將上級目錄中的tt.txt文件截切到當前目錄中去。
那么,mv指令到底是重命名還是剪切呢?可以觀察下面這個例子:
通過這種方式,我們可以了解到,mv的作用是重命名,剪切,剪切并重命名。
怎么理解這樣的操作呢?
mv的所有指令行為都可以理解為剪切并重命名,如果指令后面有文件名和文件名后面的. .,可以看作是將文件剪切到上級目錄中去,并將名字設置成默認名字,即mv后面的第一個名字;
如果mv和后面不僅有文件名,還有路徑加文件名,可以看作是將文件剪切到該路徑目錄上,并設置為路徑后面的名字;
而所謂的重命名行為。可以看作是將文件剪切到該目錄下,并設置成修改的文件名。
仔細觀察上面指令:mv d1 …/d1/dd1
這條指令是將該目錄下的d1剪切到上一級目錄下的d1目錄下,并重命名為dd1,同時此條指令也可以寫成:mv d1 d1/dd1
【例子】:
我們知道,在Windows中刪除之后,可以將垃圾放在回收站中,而我們現階段所學的rm是直接刪除,沒有回收站保留刪除的數據。而實際上,回收站也是一種目錄,只不過在Windows環境下,將回收站這個目錄設置成圖形化界面進行美化;在Linux中,我們也可以設置一個回收站的目錄,并將rm指令設置成mv,這樣就可以在Linux環境中設置一個類似回收站的目錄。
將rm改造成mv
vim ~/.bashrc #修改這個文件
mkdir -p ~/.trash
alias rm=trash
alias ur=undelfile
undelfile() {
mv -i ~/.trash/$@ ./
}
trash() {
mv $@ ~/.trash/
}
【注意】在現階段,先不做嘗試,因為現在我們所處在root賬戶,且未學vim等指令。
alias指令
在上述例子中,我們現在除了了解已經學過的mv和rm指令,也需要對alias指令有一定的了解。
- alias指令:重命名,起別名
我們都知道,執行一個指令時,可以有多個選項,而多個選項也可以進行簡寫,例如:ls -l 可以簡寫成 ll。
那么,為什么可以這樣簡寫呢?
我們可以使用man指令查詢一下是否有ll指令:
可以了解到,man手冊中并沒有ll指令。
-
我們應該如何看待指令?
當我們寫出一個.c文件并生成一個.out的可執行文件,直接在命令行輸入可執行程序,可以發現可以被運行,所以指令和可執行程序都是可以被執行的——指令本質上就是可執行程序。 -
我們在執行指令之前,應該先進行什么操作?
我們應該在系統中查找對應的指令,如果隨意輸入一段指令,則會顯示command not found,意思是沒有發現該條指令,所以指令一定是在系統中的某一個位置存在的。
當我們在命令行輸入ls /usr/bin指令,可以顯示出系統所有的指令。
【結論】所以指令是在系統中特定的路徑中存在的,這些指令一定是某種可執行程序——C/C++/python/shell(腳本語言)。
我們可以在命令行設置:cp mycmd /usr/bin指令來設置屬于自己專屬指令,但是不推薦這樣做。
【指令的本質】指令的本質就是可執行程序,和我們自己寫的代碼編譯成功的程序沒有本質區別,指令的本質就是文件,只不過是可執行文件,就是將這種可執行文件直接安裝到系統的某種路徑下面。
我們回到剛才的話題,系統中只有ls指令,沒有ll指令。
在這里我們可以新學習一個指令which
which
- which指令:可以查看指令的路徑。
那么我們可以使用which指令來查看ll指令是怎么來的。
我們通過觀察可以發現,指令ll是通過alias指令將ls -l縮寫成ll的。
即alias將ls -l進行重命名的;后面–color=auto是配色方案。
這里教大家設置重命名:
假設我需要設置lsl為ls -l -i -a -n選項的指令,可以在命令輸入:alias lsl=‘ls -l -i -a -n’;。如果想要取消重命名,可以在命令行輸入:alias lsl=’ ';。 如果想撤銷該重命名,可以在命令行輸入:unalias lsl;
ctrl + c
- ctrl + c是用來終止因為程序或者指令異常,而導致我們無法進入輸出。
當我們出現問題時,先無腦ctrl+c。
如果對某條指令不想繼續進行此操作,除了可以使用刪除鍵,也可以使用ctrl+c,執行下一條指令。
就例如上述例子,在執行mv指令時,感覺輸入不對或者輸入錯誤可以無腦ctrl+c跳過此條指令。
cat指令
【語法】:cat [選項] [文件]
【功能】:查看目標文件的內容
【常用選項】:
- -b 對非空輸出行編號
- -n 對輸出的所有行編號
- -s 不輸出多行空行
linux下一切皆文件
在介紹下一條指令前,需要先有一個這樣的概念:
- Linux下一切皆文件——例如:顯示器,鍵盤,普通文件…
顯示器:向顯示器寫入數據->fwrite,而顯示器并沒有讀取數據的功能,所以fread(){ }是空的。
鍵盤:可以從鍵盤中進行讀取數據->fread,而鍵盤并沒有其他設備向鍵盤寫入數據的功能,所以fread(){ }是空的。
普通文件:普通文件時可以進行讀取數據,和寫入數據的。
我們以這樣的角度再次了解一下echo指令和輸出重定向:
通過觀察這倆句指令,echo指令本來應該將字符串寫道顯示屏上面的,但是通過輸出重定向 > 寫到test.txt文件中去,這種方式叫做重定向。
- echo 與cat的區別:
在echo看來,其后面所跟的都是字符串,不過你寫什么。
而cat后面跟的只能是文件名。
- cat 與 ll 指令的區別:
cat 指令可以打印文件內容,而ll指令打印的是文件的屬性:
【注意】cat是將文件內容寫到顯示器文件中;而ll是將文件屬性寫到顯示器文件中。
- 輸出重定向:向目標文件進行寫入的時候覆蓋寫入,其主要的方式分成倆種,第一步:清空文件;第二步:寫入新內容。
如果只在命令行輸入指令:> test.txt指令,可以達到清空文件的效果。
【擴展】:
如果我們在輸入文件時,并不是想清空文件,而是在原有文件的內容下,繼續輸入文件,可以使用追加重定向。
- 追加重定向: >>
同時,使用echo是可以將輸入的數據直接進行換行處理的,如果想不換行處理,可以使用printf指令。
cat指令后面如果什么都不跟,那么就會默認從鍵盤上讀取數據(使用ctrl+c結束操作)
- 輸入重定向:輸入重定向 < ,是本來應該從鍵盤文件讀取,現在不用從鍵盤讀取,從指定的文件讀取,這種方式叫做輸入重定向。
【注意】cat test.txt 與cat > text.txt雖然在現階段二者都是讀取數據,但是在后續的學習中還是有所差距的。
假設使用重定向時,目標文件原本并沒有出現在目錄中,即沒有新文件,此時可以新建一個文件,然后再向該文件中寫入字符串。
那么,如果沒有輸出字符串,僅僅是使用重定向,就可以被用來創造新文件,但里面的內容是空的。
了解了這些知識,我們也就基本可以了解如何使用cat指令。
cat指令 用來打印文件內容
cat -n可以對打印的數據進行編號
more指令
【語法】:more [選項] [文件]
【功能】:more命令,功能類似cat
【常用選項】:
- -n 對輸出的所有行編號
- q 退出more
我們在了解這些指令之前,現需要有一個非常大的文本:可以執行下面這條指令:
cnt=1; while [ $cnt -le 10000 ]; do echo “hello linux $cnt”; let cnt++; done > test.txt
當使用cat指令去查看這個大本文時會發現,cat指令不適合看這類型的大文本。
- 我們為什么需要有一個大文本呢?什么也屬于大文本?
在實際的使用過程中,我們所見到的項目和日志都屬于大文本。
cat指令會直接到文本的底本,這會導致當我們想要查看中間內容變得復雜。
而more指令會打印一面的數據:
然后后面可以選擇性的看第幾行
執行選項,可以找到文本前num行
但是,more的使用也是有缺點的,more只能向下翻閱。
less指令
【語法】:less [參數] [文件]
【功能】:less與more類似,但使用less可以隨意瀏覽文件,而more僅能向前移動,卻不能向后移動,而且less在查看之前不會加載整個文件。
【常用選項】:
- -i :忽略搜索時的大小寫
- -N:顯示每行的行數
- /字符串:向下搜索“字符串”的功能
- ?字符串:向上搜索“字符串”的功能
- n:重復前一個搜索(與/或?有關)
- N:反向重復前一個搜索(與/或?有關)
- q:quit
【說明】:
- less 工具也是對文件或其它輸出進行分頁顯示的工具,應該說是Linux正統查看文件內容的工具,功能及其強大。
- less 的用法比起more 更加的有彈性。在more的時候,我們并沒有辦法向前翻閱,只能往后看。
- 但若使用了less時,就可以使用[pageup][pagedown]等按鍵的功能來往前往后翻看文件,更加容易用來查看一個文件的內容。
- 除此之外,在less里面可以擁有更多的搜索功能,不止可以向下搜索,也可以向上搜索。
【注意】less的使用較more來講更加合適,也是可以進行上下翻閱的。
head指令
head與tail就像它的名字一樣的淺顯易懂,它是來顯示開頭或結尾某個數量的文字區塊,head用來顯示檔案的開頭至標準輸出中,而tail就是看檔案的結尾。
【語法】:head [參數]…[文件]…
【功能】:head用來顯示檔案的開頭至標準輸出中,默認head命令打印其相應文件的開頭10行。
【常用選項】:
- -n< 行數 > 顯示的行數
head的指令可以查看前n行
tail指令
taii命令從指定點開始將文件寫到標準輸出,使用tail命令的-f選項可以方便的查閱正在改變的日志文件,tail -f filename 會把filename里最尾部的內容顯示在屏幕上,并且不但刷新,使你看到最新的文件內容。
【語法】:tail [必要參數] [選擇參數] [文件]
【功能】:用于顯示指定文件末尾內容,不指定文件時,作為輸入信息進行處理。常用來查看日志文件。
【常用選項】:
- -f 循環讀取
- -n< 行數 >顯示行數
tail指令可以查看后n行
合理利用head指令和tail指令可以很好的查看中間某行的內容。
如果要查找第1000行-第1020行,可以用head指令將前1020行保存在一個tmp.txt文件中,然后在tmp.txt文件中使用tail指令查找后21行即可找到第1000行-第1020行。
管道
在上述例子中,我們需要建立一個文件來存儲前1020個數據,這樣會比較繁瑣。
可以執行這條指令:head -1020 test.txt | tail -21
’ | ':這條豎線就是管道,這是一種符號,后面會被“系統”解釋稱為管道文件(內存級的文件)。
- 管道文件將管道左邊的程序輸出到管道文件中,讓右側的程序將管道文件中的數據讀到程序中,這種被稱為管道。
怎么理解管道呢?
自來水管道,天然氣管道,下水管道等等,類似于這些有入口,而且有出口的管道。計算機中的管道時資源數據的輸入和輸出。