柚子快報(bào)激活碼778899分享:初學(xué)Linux(學(xué)習(xí)筆記)
柚子快報(bào)激活碼778899分享:初學(xué)Linux(學(xué)習(xí)筆記)
初學(xué)Linux(學(xué)習(xí)筆記)
前言
本文跳過了Linux前期的環(huán)境準(zhǔn)備,直接從知識(shí)點(diǎn)和指令開始。
知識(shí)點(diǎn):
1.目錄==文件夾(Windows)
2.文件=內(nèi)容+屬性
3.在Windows當(dāng)中區(qū)分文件類型是通過后綴,而Linux是通過ls -l后顯示的所有信息中第一個(gè)信息的首字母來區(qū)分,如果是d表示是目錄(directory);**-開頭的是普通文件;.**開頭的文件是隱藏文件。
4.Windows中反斜杠,也就是\,稱為路徑分割符;Linux下斜杠,也就是/是路徑分割符。
兩個(gè)斜桿之間的一定是目錄,但最后一個(gè)可能是目錄也可能是普通文件。
5.在Linux中任何一個(gè)目錄(即使空)默認(rèn)自帶.和…目錄。.為當(dāng)前目錄;…為上級(jí)目錄。
6.整個(gè)路徑最開始的那個(gè)/,不是路徑分割符,而是Linux根目錄。
7.Linux的文件結(jié)構(gòu),是一顆從根目錄/開始的一個(gè)多叉樹。葉子結(jié)點(diǎn)是普通文件或者空目錄,非葉子結(jié)點(diǎn)一定是一個(gè)非空目錄。
找到一個(gè)文件必須找到一個(gè)路徑。路徑有兩種:絕對(duì)路徑和相對(duì)路徑。
絕對(duì)路徑就是從根目錄開始的路徑。/home/litao/linux/ : 絕對(duì)路徑
以非根目錄為參照點(diǎn)(起點(diǎn))來定位一個(gè)文件的就是相對(duì)路徑?!?day02/ : 相對(duì)路徑
不過,比如當(dāng)我們要ls指定文件時(shí),其實(shí)可以直接跟文件名就行,不用絕對(duì)路徑和相對(duì)路徑那么復(fù)雜。
使用場景的不同:
絕對(duì)路徑一般用于配置文件,因?yàn)槁窂讲粫?huì)失效(萬一相對(duì)路徑中為參照點(diǎn)的路徑不存在了就會(huì)出錯(cuò));相對(duì)路徑一般日常操作用得多(方便)。
8.所有的操作系統(tǒng)全都是目錄結(jié)構(gòu),文件結(jié)構(gòu)全都是多叉樹。在Windows中的C、D盤并不是根目錄,它們其實(shí)不是盤符,其實(shí)是文件夾,真正的根目錄是此電腦。
9.命令本質(zhì)上就是系統(tǒng)當(dāng)中的文件,而且是普通文件。更進(jìn)一步說,命令的本質(zhì)就是可執(zhí)行文件,也就是我們寫的C/C++程序。
我們把自己寫的程序拷貝到/usr/bin/后,也能像ls這樣不需要寫出路徑,像命令一樣使用了:cp mycmd /usr/bin/
10.cat顯示的是文件里面的內(nèi)容,echo是后面的內(nèi)容當(dāng)作字符串,printf類似echo但有格式化控制。
11.文件:
我自己建的文件;
鍵盤;
顯示器;
顯示器
printf是往顯示器打印,也就是說本質(zhì)上往文件里打印。
任何文件操作必須先被打開。所以這些設(shè)備文件也必須先被打開。但是我們沒有手動(dòng)打開就能直接用printf等,因?yàn)橄到y(tǒng)在啟動(dòng)程序時(shí)自己打開了。
如何理解系統(tǒng)幫我們打開?為什么要幫我們打開?為什么不打開其他文件?
? 程序在啟動(dòng)時(shí),默認(rèn)要打開3個(gè)文件:stdin/stdout/stderr(鍵盤、顯示器、顯示器)(類型是FILE*)。為什么在使用printf等時(shí)沒有使用到這幾個(gè)文件?因?yàn)閜rintf等函數(shù)進(jìn)行了封裝。而fprintf就可以指定流。
? 程序在系統(tǒng)運(yùn)行起來時(shí)要做很多工作。(學(xué)進(jìn)程時(shí)理解)系統(tǒng)執(zhí)行時(shí)在main函數(shù)之前會(huì)調(diào)用一些接口……
? 為什么幫我們打開?方便操作。否則要自己打開顯示器鍵盤等。
? 為什么只打開這三個(gè)?因?yàn)橐话銇碚f就夠用,其他的自己打開。
12.重定向操作——只看操作
比如echo “helloworld” > hello.txt
本來應(yīng)該寫入到顯示器文件的內(nèi)容寫到了我們指定的一個(gè)普通文件(創(chuàng)建出了我們指定的這個(gè)文件)。
這就是輸出重定向。
而且如果我們此時(shí)再echo “hello” > hello.txt,hello.txt里的內(nèi)容就會(huì)被替換成hello,也就是說>的特點(diǎn):如果后續(xù)文件不存在,就新建;如果后續(xù)文件已存在,把原始內(nèi)容先清空再寫入。
而這說明了很關(guān)鍵的一點(diǎn),也就是后續(xù)我們?cè)傩陆ㄆ胀ㄎ募r(shí)不用再touch,可以直接用>:>log.txt, 這樣就創(chuàng)建出來log.txt了。如果我們想把文件清空,就可以>hello.txt(一個(gè)已經(jīng)存在的文件)
如果我們不想情況再寫入,而是想新增到后面,就改為兩個(gè)大于符號(hào)>>。這種叫做追加重定向。
<則是輸入重定向(往下看cat部分)
通過man fopen,我們可以看到文件相關(guān)的內(nèi)容:
w方式叫做寫入,不存在就新建,存在的話就清空。所以echo寫入文件其實(shí)就是相當(dāng)于C語言用w或w+的方式把文件打開。
a方式就是在后面追加。
通過man fopen,我們可以看到文件相關(guān)的內(nèi)容:
w方式叫做寫入,不存在就新建,存在的話就清空。所以echo寫入文件其實(shí)就是相當(dāng)于C語言用w或w+的方式把文件打開。
a方式就是在后面追加。
ll /dev/pts可以看到登錄時(shí)對(duì)應(yīng)的文件,dev即設(shè)備,pts一般是字符設(shè)備。當(dāng)我們打開一個(gè)設(shè)備時(shí),就會(huì)在這個(gè)目錄下新建一個(gè)文件。
文件名叫0,文件類型是c,也就是字符文件。
終端也是文件,如果多打開終端,就會(huì)多出這個(gè)文件。
有意思的是:假如我們現(xiàn)在新打開一個(gè)終端,echo “hello” >/dev/pts/1可以寫給自己,echo “hello” >/dev/pts/0可以寫給另一個(gè)終端。
終端的本質(zhì)就是文件,/dev/pts/xxx,系統(tǒng)幫我們把這個(gè)文件打開就可以在鍵盤、顯示器上讀寫了。
我們還可以nano redir.c,寫一段程序:
然后在我們要寫入的目標(biāo)終端:
因?yàn)樵贚inux中一切皆文件,所以在Linux中的很多操作最后都變?yōu)槲募僮鳌?/p>
15.文件類型
-開頭,普通文件;
d開頭,目錄文件;
c開頭,字符文件,鍵盤,顯示器,終端。字符文件的特點(diǎn)是:輸入的數(shù)據(jù)有順序性。
b開頭,塊設(shè)備文件,磁盤
l開頭,鏈接文件
p開頭,管道文件
……
b:
通過ll /dev/vda*,我們可以查看磁盤
把這個(gè)文件打開寫東西就相當(dāng)于把物理盤直接打開,很危險(xiǎn)。
其實(shí)在Windows中只有一塊磁盤,C、D是分區(qū)。
l:
Windows下的快捷方式就有點(diǎn)像鏈接文件。
p:
mkfifo pipe就可以建立一個(gè)管道文件pipe。
-:
普通文件都有哪些呢?文本、可執(zhí)行程序、庫、圖片、視頻等。
雖然Linux下區(qū)分文件類型不看后綴,但并不代表禁止使用后綴。
同時(shí),系統(tǒng)不關(guān)心后綴不代表工具比如gcc不關(guān)心。
16.軟件領(lǐng)域,大型文件,必須有日志。
不同層面的日志記錄的內(nèi)容不同。
17.補(bǔ)充小知識(shí):
計(jì)算機(jī)已經(jīng)關(guān)機(jī)了為什么開機(jī)之后時(shí)間還是對(duì)的?
并不是從網(wǎng)上查的,也不是因?yàn)殡娔X有電池。是因?yàn)橹靼迳嫌幸粋€(gè)紐扣電池。可以維持上兩周。讓系統(tǒng)主板一直記錄時(shí)間。
XShell 下的復(fù)制粘貼
復(fù)制: ctrl + insert (有的 insert可能需要配合 fn 來按)
粘貼: shift + insert。ctrl + c / ctrl + v 是不行的.
clear
顧名思義,就是清理屏幕。
Alt+Enter(回車)
這個(gè)操作可以進(jìn)入或退出全屏。
stat
可以看到文件詳細(xì)的屬性介紹。
可以看到文件的三種時(shí)間:access modify change,簡稱ACM時(shí)間。access是最近訪問時(shí)間,modify和change有什么區(qū)別?以后再說。
which
基本作用是查找并顯示給定命令的完整路徑?。
alias
作用是給命令取別名。其實(shí),ll就是ls -l的別名:
但注意是一次性的。
ctrl+C
如果在命令行中出現(xiàn)了異常情況,統(tǒng)一嘗試ctrl+C來終止異常
*****
ls test.*代表查看test.開頭的所有文件
ls *.c代表查看.c結(jié)尾的所有文件
要小心 rm -rf *,即把當(dāng)前目錄下所以文件(隱藏文件除外)刪掉(尤其是在根目錄時(shí))。
printf
可以輸出我們指定的內(nèi)容
比如:
printf “hello %d,hello %s,hello %f\n” 100 “hello momo” 3.14
打印結(jié)果:
hello 100,hello hello momo,hello 3.140000
上下鍵
可以用這個(gè)找到我們的歷史命令,不用重新輸入。
echo
把后續(xù)的內(nèi)容當(dāng)作字符串直接打印。建議打印內(nèi)容用單引號(hào)括起來。
tac
和cat類似,也是顯示文件內(nèi)容,但是是倒著顯式文件內(nèi)容(從下往上),使用寫法如tac redir.c
比如aaaa bbbb會(huì)打印成bbbb aaaa
cat的使用場景在哪?
有時(shí)我們只想看一下配置文件,并不想修改,所以不用nano,直接用cat看一下,太長的文件不行。
tac的使用場景在哪?
比如日志。因?yàn)閏at打印日志會(huì)從頭往后打完,而有時(shí)我們想看最開始的時(shí)候,就可以用tac來反向打印。
history
可以看歷史命令。
ls
語法: ls [選項(xiàng)] [目錄或文件]
只有l(wèi)s,就只顯示文件名。
ls -l則是顯示更多的屬性。
ls后面可以跟指定的目錄,就會(huì)打印指定目錄里的內(nèi)容。
ls的選項(xiàng)
ls -l
列出文件的詳細(xì)信息。
ls -a
a就代表all。列出目錄下的所有文件,包括以 . 開頭的隱含文件。
我們可以發(fā)現(xiàn)比起ls,多出了.和…文件。**.**開頭的文件是隱藏文件。
注意,可以寫成ls -a -l,ls -l -a,ls -al,ls -la(給了ls兩個(gè)選項(xiàng)),都不影響。
ls -d
將目錄像文件一樣顯示,而不是顯示其下的文件。 如:ls –d 指定目錄
pwd
這個(gè)指令就是顯示用戶當(dāng)前所在的目錄。
如果是以root登錄,那么打印出來此時(shí)應(yīng)該是/root;如果是以zhangsan用戶登錄,那么打印出來應(yīng)該是/home/zhangsan。
cd
change directory
改變工作目錄。將當(dāng)前工作目錄改變到指定的目錄下。
語法:cd 目錄名
cd … : 返回上級(jí)目錄
cd /home/litao/linux/ : 絕對(duì)路徑
cd …/day02/ : 相對(duì)路徑
cd ~:進(jìn)入用戶家目錄。任何一個(gè)Linux用戶,用特定的用戶名登錄系統(tǒng)時(shí),默認(rèn)在什么路徑下呢?家目錄下。
Windows下是否有家目錄的概念呢?其實(shí)在Windows下可以新建用戶。(在C盤的用戶目錄下可以看)
cd -:返回最近訪問目錄。可以在最近兩個(gè)目錄之間來回跳轉(zhuǎn)。
mkdir
語法:mkdir [選項(xiàng)] dirname…
功能:在當(dāng)前目錄下創(chuàng)建一個(gè)名為 “dirname”的目錄
常用選項(xiàng):
-p, --parents 可以是一個(gè)路徑名稱。此時(shí)若路徑中的某些目錄尚不存在,加上此選項(xiàng)后,系統(tǒng)將自動(dòng)建立 好那些尚不存在的目錄,即一次可以建立多個(gè)目錄
比如 mkdir -p a/b/c/d/e
除了一層層進(jìn)去查看外,可以用tree來查看樹形結(jié)構(gòu)。
touch
新建一個(gè)普通文件。
touch后面跟一個(gè)文件名。如touch hello.txt
touch還能去更新一個(gè)文件的時(shí)間。如touch hello.txt,通過ll可以看到文件時(shí)間更新了。
rmdir
刪除目錄(只能刪空目錄)
rm
remove
在root賬號(hào)下,它會(huì)詢問是否要?jiǎng)h除,y代表yes,n代表no。
rm默認(rèn)只能刪普通文件。
rm -f
f代表force,所以這代表強(qiáng)制刪除。
這樣就可以避開刪除時(shí)的詢問。
rm -r
r代表遞歸,這樣就能把目錄刪掉。
rm -rf 加上目錄名
就能強(qiáng)制刪除一個(gè)目錄。
rm -rf /
這個(gè)是把根目錄強(qiáng)制刪除,如果真的刪除了,就只能重裝系統(tǒng)了。
man
Linux的命令有很多參數(shù),我們不可能全記住,我們可以通過查看聯(lián)機(jī)手冊(cè)獲取幫助。訪問Linux手冊(cè)頁的命令是man
man的語法: man [選項(xiàng)] 命令
比如我們現(xiàn)在不知道which指令怎么用,就可以使用man which
按q可以退出這個(gè)界面
手冊(cè)像書一樣,分好幾章,如果不指定,默認(rèn)查的是1里的內(nèi)容(也就是指令)
如果想查找C語言函數(shù),可以用man 3,比如man 3 printf
cp
普通文件:
同一個(gè)目錄下不能存在同名文件,所以cp hello.txt nohello.txt,就可以把hello.txt的內(nèi)容拷貝到nohello.txt
也可以拷貝到不是該目錄,而是其他路徑下,如cp hello.txt …/nohello.txt,就是拷貝到上級(jí)目錄下。
拷貝到指定路徑時(shí),可以不指定拷貝后的文件名,這樣就會(huì)使用原本相同的文件名。
目錄拷貝:
要帶上-r選項(xiàng),比如cp -r dir dirbackup
如果后面跟的是一個(gè)已存在的目錄,就會(huì)拷貝到這個(gè)目錄內(nèi)部。比如cp -r dir dirbackup(此時(shí)dirbackup已存在,且拷貝結(jié)果是在dirbackup內(nèi)拷貝了一個(gè)同樣名為dir的目錄)
如果不帶-f,有重復(fù)的會(huì)進(jìn)行詢問。而對(duì)于超級(jí)用戶(root),即使帶了-f,也可能還是會(huì)詢問。
cat
默認(rèn)是把文件內(nèi)容往顯示器里寫。
**如果后面什么也不跟,**就會(huì)讓當(dāng)前命令行阻塞在這,然后輸入什么內(nèi)容馬上就回顯什么內(nèi)容(使用ctr+c來結(jié)束):
也就是默認(rèn)從鍵盤里讀,然后寫到顯示器里。
cat <
這是輸入重定向,后面跟的什么就是從哪里讀。
cat后面直接跟文件名
看起來結(jié)果和cat<文件名一樣,其實(shí)并不相同。以后再深入理解。
cat適合去看短文件。
mv指令
1.剪切
mv命令是move的縮寫,可以用來移動(dòng)文件。比如mv redir.c …(移動(dòng)到上級(jí)目錄)
mv srcfile dstfile
如果想將整個(gè)目錄移動(dòng)到某個(gè)目錄下:mv dir /(移動(dòng)到根目錄下)
所以srcfile可以是目錄也可以是文件,其實(shí)在Linux下一切皆文件。
2.重命名
mv src dst
比如mv test.c notest.c
如何區(qū)別剪切和重命名,如果dst不是目錄,那就是重命名?;蛘吣夸沝st不存在,也是重命名,所以也可以對(duì)目錄重命名。
more
more的功能類似于cat,在使用時(shí)它會(huì)先把一個(gè)屏幕打滿,然后回車再逐行查看。
但是more不能支持上翻下翻。
按q可以退出。
less
然而比起more,現(xiàn)在我們更推薦使用的是less。
less和more一樣,less /var/log/messgaes后也可以查看日志,也是先打滿一個(gè)屏幕,但是less可以支持上翻和下翻,所以使用更加方便。
head
如果文件太大,我們使用cat,刷到最后的時(shí)候,可能都過去5分鐘了,如果只想看開頭內(nèi)容,可以使用head。
head /var/log/messages
如果只想看開頭的一行內(nèi)容,可以head -1 /var/log/messages
如果只想看開頭的兩行內(nèi)容,可以head -2 /var/log/messages
tail
使用和規(guī)則同上。
拿中間部分
怎么查中間?比如我們現(xiàn)在想拿501-510這10行。
可以先把前510行拿到,然后重定向放到文件temp.txt:head -510 log.txt >temp.txt
然后再tail -10 temp.txt
這樣我們就拿到了501-510行。
整合成一行版:head -510 log.txt | tail -10
也就是把前一句指令的結(jié)果交給后一句處理。
這個(gè)豎劃線就是管道。一端是灌水的,一端是出水的。這個(gè)管道就是文件,前面這句往這個(gè)文件里寫,后面這句從這個(gè)文件里讀。
head -510 log.txt | tail -10 | tac
這樣我們還可以把這10行進(jìn)行逆序打印。
head -510 log.txt | tail -10 | tac | wc -l
w代表word,l代表line。
這樣我們還可以看結(jié)果有多少行
時(shí)間相關(guān)的指令
date
date
date +%Y——年
date +%Y:%m——年:月
date +%Y-%m——年-月
date +%Y:%m:%d——年:月:日
date +%Y-%m-%d_%H:%M:%S——年-月-日__時(shí):分:秒
date+%s——這是一個(gè)很大的數(shù)字,隨著查看不斷增加。大概間隔1s。
這個(gè)數(shù)字叫做格林威治時(shí)間戳。格林威治即世界時(shí)間的約定點(diǎn)。
它在每個(gè)計(jì)算機(jī)內(nèi)部會(huì)維持一個(gè)線性遞增的計(jì)數(shù)器。每隔一秒讓這個(gè)計(jì)數(shù)器++
這個(gè)時(shí)間會(huì)溢出嗎?(千年蟲)
不用太擔(dān)心。
這個(gè)有什么用呢?
可以通過算法轉(zhuǎn)化成我們平時(shí)看的時(shí)間。
在用戶級(jí)別上,日志不想寫年月日時(shí)間,不是給人讀的,是做數(shù)據(jù)處理的,就用時(shí)間戳。每條日志都帶上時(shí)間戳。就可以按時(shí)間戳去查找一個(gè)區(qū)間的日志。(區(qū)間查找)
時(shí)間戳怎么轉(zhuǎn)化成標(biāo)準(zhǔn)時(shí)間?(以1725974749為例)
date +%Y-%m-%d_%H:%M:%S -d @1725974749
結(jié)果:
2024-09-10_21:25:49
date +%Y-%m-%d_%H:%M:%S -d @0
我們就可以得到1970-01-01_08:00:00(這個(gè)8點(diǎn)是因?yàn)闀r(shí)差,因?yàn)槲覀冊(cè)跂|八區(qū))
cal(少用)
可以查看日歷:
cal:
cal 2024:
cal -3
就是查看這個(gè)月、上個(gè)月和下個(gè)月的日歷:
查找相關(guān)的命令
之前的which就是查找相關(guān)的命令。
但是which只是用于在指定的目錄下去查找指定的命令。一般都是去/usr/bin/
whereis(少用)
whereis man
用于查找文件。
該指令會(huì)在特定目錄中查找符合條件的文件。這些文件應(yīng)屬于原始代碼、二進(jìn)制文件,或是幫助文件。
該指令只能用于查找二進(jìn)制文件、源代碼文件和man手冊(cè)頁。
也就是,會(huì)去系統(tǒng),非自己文件地方查找。
find
是在Linux的樹形結(jié)構(gòu)里去查。
find ~ -name *.c
就可以去找根目錄下以.c結(jié)尾的文件:
find ~ -name ls
就會(huì)很卡,因?yàn)闀?huì)拿著給的名字,在整個(gè)系統(tǒng)從根目錄開始去查。是一種深度和廣度遍歷的方式,不斷去做字符串匹配。
find選項(xiàng)很多,先掌握-name
本文到此結(jié)束。
柚子快報(bào)激活碼778899分享:初學(xué)Linux(學(xué)習(xí)筆記)
文章鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。