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