寫(xiě)在前面
今天我們繼續(xù)學(xué)習(xí)Linux的基本指令,
這里是上一篇博客的鏈接:http://t.csdn.cn/9AgHP
接下來(lái)我會(huì)繼續(xù)講解Linux指令相關(guān)內(nèi)容。
目錄
寫(xiě)在前面
1. man
描述:
用法:
例子:
例1:
例2:
2. cp
描述:
用法:
例子:
例1:
例2:
例3:
例4:
3. mv
描述:
用法:
例子:
例1:
例2:
例3:
4. 擴(kuò)展?
4.1 出現(xiàn)奇怪的問(wèn)題咋辦
4.2 如何理解指令?
4.3 別名
4.4 補(bǔ)充內(nèi)容:(重定向)
輸出重定向:
追加重定向:
補(bǔ)充:
輸入重定向
5. cat
描述:
用法:
例子:
例1:
例2:
6. more?
描述:
用法:
例子:
例1:
例2:
7. less
描述:
用法:
例子:
例1:
?8, 9. head 和 tail
描述:
用法:
例子:?
例1:
例2:
補(bǔ)充內(nèi)容:(管道)?
總結(jié):
寫(xiě)在最后:
1. man
描述:
Linux的命令千千萬(wàn),我們不可能全部都記住。
man手冊(cè)可以用來(lái)查詢(xún)一些我們忘記或者不了解的指令/接口。
用法:
man + (數(shù)字) +?指令名稱(chēng)
例子:
例1:
比如說(shuō)我們可以用man手冊(cè)學(xué)習(xí)一下ls命令:
?我們可以看到有很多選項(xiàng):
?注:(如果man手冊(cè)不起作用,可以輸入:yum install -y man-pages )
例2:
既然man手冊(cè)可以查看系統(tǒng)的指令,我們當(dāng)然也可以用man手冊(cè)學(xué)習(xí)如何使用man手冊(cè):
?我們可以看見(jiàn),man手冊(cè)有很多選項(xiàng):
?這里我們只需要了解最常用的前3個(gè):
1. 第一個(gè),也就是直接使用man可以查詢(xún)Linux自帶指令
2. 第二個(gè),使用 man 2 選項(xiàng)可以查詢(xún)系統(tǒng)調(diào)用接口
例:
fork就是一個(gè)系統(tǒng)調(diào)用接口,可以創(chuàng)建一個(gè)子進(jìn)程:
3. 第三個(gè),使用 man 3 選項(xiàng)可以查看C語(yǔ)言的接口
例:
相信大家對(duì)printf并不陌生:
?這就是我們需要學(xué)習(xí)的三個(gè)選項(xiàng)。
2. cp
描述:
這是一個(gè)拷貝指令,可以拷貝文件、目錄。
用法:
cp + 選項(xiàng) +?源文件或目錄 目標(biāo)文件或目錄????????
常用選項(xiàng):-r (遞歸拷貝)
例子:
例1:
?拷貝文件到當(dāng)前的目錄下。
例2:
拷貝目錄到當(dāng)前文件下。
?例3:
可以把文件拷貝到上級(jí)目錄,
所以,我們可以通過(guò)相對(duì)路徑,將文件拷貝到我們想要的地方:
?我們拷貝了一個(gè)文件進(jìn)test目錄里面。
例4:
當(dāng)然,我們也可以驗(yàn)證一下,這個(gè)拷貝是否真的把整個(gè)文件拷貝了:
我們可以觀察到,test.txt文件里面的內(nèi)容,
copy.txt里面也有,可以得出結(jié)論,cp確實(shí)拷貝了這個(gè)文件。
注:(補(bǔ)充一點(diǎn):同一個(gè)目錄下不能存在同名文件)
注:(echo 是輸出指令,可以向屏幕輸出)(舉個(gè)例子)
例:(我們往屏幕輸出了 hello Linux )
注:( >?是輸出重定向,我們將echo輸出的內(nèi)容重定向到了test.txt文件里面 )
注:(cat 指令可以查看文件內(nèi)容)?
3. mv
描述:
可以用來(lái)移動(dòng)文件或者給文件改名。
用法:
mv + 文件原名 + 新的名字
mv + 文件名 + 目錄
例子:
例1:
修改名字:
把test.txt 改名成name了。?
例2:
移動(dòng)文件:
?我們把test目錄移動(dòng)到了上級(jí)目錄。
例3:
移動(dòng)并改名:
?我們可以發(fā)現(xiàn),移動(dòng)到上級(jí)目錄的test被改名成了name。
以上是mv命令。
4. 擴(kuò)展?
4.1 出現(xiàn)奇怪的問(wèn)題咋辦
比如說(shuō),Linux的命令行輸出命令用不了了:
你好像輸什么他都不停止,這個(gè)時(shí)候,可以:
Ctrl + c?
如果遇到解決不了的問(wèn)題或者死循環(huán)之類(lèi)的,可以用這個(gè)指令殺掉當(dāng)前的進(jìn)程。
注:(可以解決大部分問(wèn)題(但不是萬(wàn)能的!))
4.2 如何理解指令?
1. 我們發(fā)現(xiàn)指令是可以運(yùn)行的,
指令和可執(zhí)行程序都可以運(yùn)行->指令就是可執(zhí)行程序!
那我們的指令放在哪里呢?
我們可以看到,隨便輸入的字符,當(dāng)前的shell跟我們說(shuō) not found 找不到指令,
那系統(tǒng)是在哪找我們的指令的?
2. 指令在執(zhí)行前,做了什么?
先在系統(tǒng)中查找對(duì)應(yīng)的指令(指令一定是在系統(tǒng)的某一個(gè)位置存在的?。?/strong>
問(wèn)題來(lái)了:指令究竟在哪里?
?實(shí)際上,指令就在這個(gè)目錄里面:
?我們發(fā)現(xiàn)這些指令都是存在的!
因此我們可以得出這樣一個(gè)結(jié)論,
指令是在系統(tǒng)特定的路徑下存在的!
?而這些指令一定是某種可執(zhí)行程序(而且一定是用C/C++/shell...這些語(yǔ)言寫(xiě)出來(lái)的?。?/p>
那么,現(xiàn)在我們就要做一個(gè)實(shí)驗(yàn)了:
我們用nano(記事本)寫(xiě)一段C語(yǔ)言程序
?
?然后執(zhí)行:
注:(這里是用gcc編譯這段代碼)
然后改名:
?
既然我們這個(gè)是可執(zhí)行程序,如果我們把它放到指令的位置,
只不是也能像指令一樣執(zhí)行呢???
確實(shí)是這樣的?。?!
?(但是把程序放進(jìn)指令的地方需要比較高的權(quán)限,我們這里切換到root用戶(hù))
注:(我用su 命令切換到root用戶(hù)(輸入su,然后輸入root的密碼))
我們將mytest 拷貝進(jìn)指令的位置:
?
?發(fā)現(xiàn)沒(méi)有,mytest真的可以像指令一樣使用了。
結(jié)論:
指令的本質(zhì)就是可執(zhí)行程序,
和我們自己寫(xiě)的代碼編譯好的可執(zhí)行程序沒(méi)有本質(zhì)區(qū)別?。ㄎㄒ坏膮^(qū)別可能是別寫(xiě)的比你好...)
注:(我們把這個(gè)可執(zhí)行程序拷貝到系統(tǒng),這其實(shí)就是一種安裝)
當(dāng)然,最后別亂污染系統(tǒng)的指令:
我們就直接把它刪除了。 (這其實(shí)就是卸載)?
所以:系統(tǒng)的指令其實(shí)就是別人寫(xiě)好的可執(zhí)行程序放到系統(tǒng)里面,僅此而已。
最后總結(jié):指令的本質(zhì)就是一個(gè)文件(一個(gè)可執(zhí)行的文件)安裝到了系統(tǒng)的某種路徑下。
(可以在我們要使用的時(shí)候自動(dòng)查找,僅此而已。)
4.3 別名
那話(huà)又說(shuō)回來(lái),ls -l 為什么可以寫(xiě)成 ll 呢?
例:
我們可以看看 ll 指令是啥:
注:(which 指令可以看一條指令是啥,第二行是該指令的位置)
例:(我們也可以看看其他指令,比如:rm)
這里就不再去看其他指令了,感興趣的話(huà)可以自己去試試。
我們觀察 ll 指令可以發(fā)現(xiàn),他有個(gè):alias ll = 'ls -l -- color=auto'
?這個(gè)意思其實(shí)就是 ll 是 ls -l 的別名,而后面那個(gè) -- color=auto 是配色方案。
注:(有時(shí)候?yàn)榱朔奖闶褂?,就可以給指令設(shè)置別名)
例:(比如說(shuō)我們想起個(gè)別名)
?我給mycmd 起了個(gè)別名,就能直接使用了。(就是 ls -al )
注:(這個(gè)重命名方法只存在于這一次(你關(guān)掉xshell重進(jìn)就會(huì)沒(méi)了))
那為什么 ll 一直都在呢?因?yàn)樗粚?xiě)在了配置文件里面。
注:(不建議自己重命名,學(xué)好系統(tǒng)的指令再說(shuō))
4.4 補(bǔ)充內(nèi)容:(重定向)
我在這里拋出一個(gè)概念:(或者說(shuō)是理解Linux的一種思想)
Linux下一切皆文件 - 比如:顯示器、鍵盤(pán)、普通文件...
比如說(shuō):(我用這三個(gè)例子進(jìn)行說(shuō)明)
1. 我們向顯示器寫(xiě)入,不就是對(duì)顯示器寫(xiě)入嗎:write()(對(duì)顯示器文件進(jìn)行寫(xiě)入操作)
實(shí)際上,我們是不能讀取顯示器文件的信息的,但是我們也認(rèn)為在顯示器文件
里面是存在:read() 這樣的一個(gè)函數(shù)/方法,但是這是個(gè)空方法,無(wú)法使用而已。
2. 系統(tǒng)從鍵盤(pán)讀取數(shù)據(jù),那么可以想見(jiàn),鍵盤(pán)具有:read() 這樣的一個(gè)函數(shù),
系統(tǒng)不可能往鍵盤(pán)里寫(xiě)入什么數(shù)據(jù),總不可能系統(tǒng)給鍵盤(pán)寫(xiě)入一個(gè)a,你鍵盤(pán)的a建就跳起來(lái)吧,
所以我們可以推斷出鍵盤(pán)文件中:write() 寫(xiě)入函數(shù)是一個(gè)空函數(shù),無(wú)法使用。
3. 而普通文件,我們可以對(duì)文件進(jìn)行讀取 read() 和 寫(xiě)入 write()。
根據(jù)這三個(gè)例子,我們可以發(fā)現(xiàn)他們都可以具有讀寫(xiě)方法,所以我們當(dāng)然可以把他們當(dāng)文件!
注:(當(dāng)然,文件操作的方法肯定不止讀寫(xiě),這里我使用讀寫(xiě)方法作為例子舉例。)
注:(系統(tǒng)里面還有很多很多東西,還有硬件設(shè)備,在Linux下,他們都是文件嗎?是?。。?/strong>)
總結(jié):Linux下一切皆文件!(初步理解)
輸出重定向:
?所以:(我們使用 echo 指令往顯示器上打印這串字符)
?現(xiàn)在我們把這句話(huà)說(shuō)成:echo 指令將這串字符寫(xiě)入到顯示器文件中。
而我們使用 > 重定向,顯示器上就沒(méi)有顯示出這段話(huà)了,
將原本應(yīng)該寫(xiě)入到顯示器文件的內(nèi)容寫(xiě)入到out.txt文件里面,
這種操作就叫做重定向。
而 cat out.txt 就相當(dāng)于把out.txt文件的數(shù)據(jù)寫(xiě)入到顯示器文件里面。
輸出重定向有一個(gè)特點(diǎn):
例2:
?實(shí)際上進(jìn)行輸出重定向的時(shí)候會(huì)覆蓋原內(nèi)容,具體操作如下:
1. 清空文件
2. 寫(xiě)入新內(nèi)容
例2:
我們發(fā)現(xiàn)如果重定向往文件寫(xiě)入空,文件就清空了(對(duì)應(yīng)上面的操作)
追加重定向:
?我們發(fā)現(xiàn)用 >> 追加重定向,就不會(huì)清空文件,并在文件尾寫(xiě)入。
注:(在C語(yǔ)言文件操作中,使用 -a 選項(xiàng)其實(shí)就是追加(append))
注:(echo 指令自帶換行)(printf 指令不自帶換行(有興趣可以試試))
補(bǔ)充:
如果我們使用cat指令,后面什么都不加會(huì)怎么樣?
?我們輸入什么,他就自動(dòng)輸出什么,
結(jié)合我們剛剛學(xué)的,cat 指令默認(rèn)就是從輸入設(shè)備(鍵盤(pán))讀取,寫(xiě)入到顯示器文件中。
輸入重定向
本來(lái) cat 應(yīng)該從鍵盤(pán)文件讀取數(shù)據(jù),現(xiàn)在變成從指定文件讀取了,
這就是輸入重定向。?
那么補(bǔ)充知識(shí)暫時(shí)到這里了,我們繼續(xù)學(xué)習(xí)指令。
5. cat
描述:
cat 命令可以查看文件內(nèi)容。
用法:
cat + 文件名
例子:
例1:
用cat 查看test.c文件內(nèi)容。
例2:
如果一個(gè)文件內(nèi)容很多會(huì)咋樣?
我們用shell 腳步寫(xiě)一萬(wàn)行hello Linux進(jìn)test.txt文件
注:( cnt=1; while [ $cnt -le 10000 ]; do echo "hello Linux $cnt"; let cnt++; done > test.txt )?
我們發(fā)現(xiàn)用cat 查看該文件內(nèi)容,直接被刷屏了,
如果我們想要看開(kāi)頭咋辦,那就會(huì)很麻煩。
6. more?
描述:
可以查看文件內(nèi)容。
用法:
more + 文件名
選項(xiàng) -n (可以選擇看哪行)
例子:
例1:
用more查看test.txt文件:
會(huì)從頭開(kāi)始查看。
注:(按 enter 下翻)(按 q 鍵退出)?
實(shí)際上,我們沒(méi)辦法上翻(more只支持下翻...)
?
我們可以用 / 查找文件內(nèi)容:
?
例2:
我們可以在用more的時(shí)候就選擇看哪行:
這樣就直接跳轉(zhuǎn)到這里了:?
?
實(shí)際上我們用more用的不多(因?yàn)槠鋵?shí)不太好用)
7. less
描述:
可以查看文件內(nèi)容的命令。
用法:
less + 文件名
例子:
例1:
用less指令查看test.txt文件:
?
less 命令也支持用 / 查找內(nèi)容:
這樣就能找到999出現(xiàn)的地方:
?
注:(less 支持上下翻(直接用鍵盤(pán)的上下鍵即可))
?8, 9. head 和 tail
描述:
head可以查看文件頭部?jī)?nèi)容,tail可以查看文件尾部?jī)?nèi)容。
用法:
head -n 文件名
tail -n 文件名
選項(xiàng):n代表你選擇的行數(shù)(也可以不加)
例子:?
例1:
用head查看文件頭:
用head從上往下查看文件指定位置:??
注:(查看頭1000行內(nèi)容)
例2:
用less查看文件尾:
?用tail從下往上查看文件大?。?/p>
?
注:(查看尾5行的內(nèi)容)
補(bǔ)充內(nèi)容:(管道)?
如果有這樣一種場(chǎng)景,
我們想要查看這個(gè)文本的1000~1020行,我們可以怎么做?
我們當(dāng)然可以用less直接去查找,
但是,我們也可以這樣:
?
那么問(wèn)題來(lái)了,這個(gè) |???是什么?
這個(gè) | 就是管道文件。
管道文件是一個(gè)內(nèi)存級(jí)的文件,(我們?cè)撛趺蠢斫膺@個(gè)‘內(nèi)存級(jí)’?)
比如說(shuō):
我們要修改一個(gè)文件,系統(tǒng)是直接在磁盤(pán)了修改,還是先加載到內(nèi)存呢?
答案顯而易見(jiàn),系統(tǒng)需要先把文件加載到內(nèi)存,
換句話(huà)說(shuō),所有的文件都需要被加載到內(nèi)存再進(jìn)行操作,
所以這些文件在一定的生命周期里他們都是內(nèi)存文件,
一個(gè)程序把自己的執(zhí)行結(jié)果寫(xiě)到管道文件里,另一個(gè)文件再把數(shù)據(jù)從管道里讀出來(lái),
這就是管道。
所以上面的那張圖片的工作原理就是這樣的。
注:(管道通??梢灾С至魉€(xiàn)工作(將數(shù)據(jù)一步步加工直到我們滿(mǎn)意))
總結(jié):
我們今天學(xué)習(xí)了Linux一些新的指令,
還加深了對(duì)Linux系統(tǒng)的理解,接觸了Linux下一切皆文件的思想,
認(rèn)識(shí)到指令其實(shí)就是Linux系統(tǒng)下的軟件,一個(gè)可執(zhí)行程序,而且我們能在系統(tǒng)找到他們,
了解了重定向以及管道相關(guān)的知識(shí)。
想要和我一起繼續(xù)學(xué)習(xí)和探索Linux的奧秘,可以訂閱這個(gè)專(zhuān)欄喲~Linux從入門(mén)到精通。
寫(xiě)在最后:
以上就是本篇文章的內(nèi)容了,感謝你的閱讀。
如果感到有所收獲的話(huà)可以給博主點(diǎn)一個(gè)贊哦。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-427500.html
如果文章內(nèi)容有遺漏或者錯(cuò)誤的地方歡迎私信博主或者在評(píng)論區(qū)指出~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-427500.html
到了這里,關(guān)于【Linux常見(jiàn)指令以及權(quán)限理解】基本指令(2)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!