在開始之前,你需要做一些準備工作,去阿里買一臺伺服器,伺服器的具體細節其實並不是十分重要,我也不會在這裡一步一步的教大家如何去買一個伺服器。百度一下足夠了,但是還是要貼一下這篇文章中,我所使用的伺服器系統及其版本:
版本之間應該不會有太大的差異,但是最好不要選太新的版本,因為還不夠穩定。好了,下面我們開始進入正題。
一、目錄
作為一臺電腦,我們首先要知道的就是其目錄的含義及用處,在後面的學習中十分重要,這些都是最基礎的概念。我們可以先來看一下,linux中都有哪些目錄:
我們看到一共有這些目錄,那麼下面我們一一解釋一下:
- /,即系統的根目錄。注意,在linux中並沒有windows中的C盤、D盤這樣的分割槽,所以“/”就可以簡單理解為windows的C盤目錄。用於存放系統檔案。
- /boot,啟動目錄,啟動相關檔案。
- /dev,裝置檔案
- /etc,配置檔案
- /home,普通使用者的家目錄,可以操作
- /lib,系統庫儲存目錄
- /mnt,移動裝置掛載目錄
- /media,光碟掛載目錄
- /misc,磁帶機掛載目錄
- /root,超級使用者的家目錄,可以操作
- /tmp,臨時目錄,可以操作
- /proc,正在執行的核心資訊對映,主要輸出程式資訊、記憶體資源資訊和磁碟分割槽資訊等等
- /sys,硬體裝置的驅動程式資訊
- /var,變數
- /bin,普通的基本命令,如ls、chmod等,一般的使用者也都可以使用。
- /sbin,基本的系統命令,如shutdown、reboot,用於啟動系統,修復系統,只有管理員才可以執行
- /usr/bin,後期安裝的一些軟體的執行指令碼
- /usr/sbin,放置一些使用者安裝的系統管理的必備程式
以上只是簡單地目錄結構,還不夠詳細,但是目前這些足夠了,更細緻的內容會在後面的學習中更加深入。
二、命令的基本格式
1、命令提示符
我們先來看個圖:
上面的圖中實際上有四個關鍵資訊,是這樣的[當前登入使用者@主機名 當前工作目錄]提示符。我們再來看上圖:
- root,即當前登入使用者,
- @後面的一串就是主機名(我買的時候就這樣啊,可以改的)。
- ~即當前使用者的家目錄,root就是/root,普通使用者就是/home/使用者名稱。(這個很簡單,可以自己驗證一下)
- 中括號後面的#就是提示符,超級使用者是#,普通使用者就是$。
2、命令格式
這個我就簡單說下吧,很好理解。命令格式就是這樣的:
命令 [選項][引數]
其中當有多個選項的時候,可以寫在一起,引數呢有簡化和完整寫法,是等效的。
3、ls命令
ls [選項][目錄或檔案],即查詢目錄中的內容,選項有這些:
- -a,顯示所有檔案,包括隱藏檔案。
- -l,顯示詳細資訊。
- -d,檢視檔案本身的屬性,而非子檔案。
- -h,人性化的方式顯示檔案大小。
- -i,顯示inode,也就是i節點,每個節點都有ID號。
以上的命令,其實都不復雜,大家自己要去試一下。
那麼這裡有個需要詳細說明一下的內容,就是當我們使用ls -l命令,顯示的資訊是什麼意思,如下圖所示:
我們先分解下紅框裡的內容:
d rwx r-x r-x . | 2 | root | root | 6 | May 4 19:18 | readbook |
檔案型別和許可權 | 硬連結引用計數 | 所有者 | 所屬組 | 檔案大小 | 最後修改時間 | 檔名 |
這裡面唯一要多解釋一下的就是檔案型別和許可權,表格中的部分我都用空格分割開了,一一解釋一下:
- d,代表檔案的型別,可能的值有這些,其中-和d是最常見的型別:
- -:普通檔案,
- d:目錄檔案,
- l:連結檔案,
- b:裝置檔案,
- c:字元裝置檔案,
- p:管道檔案。
- 後面的三部分其實都由rwx組成:
- r:read、讀、4
- w:write、寫、2
- x:execute、執行、1
- 其中-即代表沒有對應許可權。後面的數字代表著對應的許可權數值。分為的三組,按照順序分別代表著檔案所有者、檔案所屬組、其他使用者。
- 最後的".",代表ACL許可權,簡單來說就是我們給指定的使用者指定目錄分配指定的許可權,也就是 ACL 許可權的分配。
三、檔案處理命令
我們先羅列一下常用命令及其含義:
- mkdir [目錄名],建立目錄,
- -p,允許建立目錄及其子目錄,比如mkdir -p a/b/c。
- cd [目錄名],切換目錄。相對路徑是根據當前所在目錄而言。絕對路徑是從根目錄開始。TAB可以補全命令或目錄。
- ~,家目錄。
- . ,當前目錄
- .. ,上級目錄
- pwd,顯示當前目錄
- rmdir [目錄名],刪除目錄
- rm [檔案或目錄名],刪除檔案或者目錄。
- -r,遞迴刪除目錄
- -f,強制刪除
- -rf,遞迴強制刪除所有目錄。慎用!
- cp [原始檔或目錄名] [目標檔案或目錄名],複製。
- -r,複製目錄,預設是複製檔案
- -p,連帶檔案屬性複製
- -d,若原始檔是連結檔案,則複製連結屬性
- -i,可重新命名檔案,會在複製的時候提示,如果存在同名檔案,是否覆蓋
- -a,相當於-rpd。
- mv [原始檔或目錄名] [目標檔案或目錄名],移動檔案或者改名。
- ln [原始檔] [目標檔案],連結命令,生成連結檔案。可以理解成windows桌面上的快捷方式。
- 硬連結,擁有相同的i節點和儲存block塊,可以看做是同一個檔案,可以通過i節點訪問,不能跨分割槽,不能針對目錄使用,一般不使用。
- 軟連線,-s即建立軟連線,類似windows的快捷方式,軟連線擁有自己的i節點和block塊,但是資料塊中只儲存原始檔的檔名和i節點號,並沒有實際的檔案資料。軟連線的檔案許可權都是777,修改任意一個檔案,另一個都會改變,刪除原始檔,軟連線不可以使用,軟連線原始檔必須寫絕對路徑。
以上,我們已經瞭解了一些基本的檔案處理命令,那麼下面,我們基於此來看一些例子:
ok,我們先執行cd /,來到根目錄
然後,我們執行mkdir a/b/c
哦吼,他報錯了,當然它肯定會報錯的,我們回憶一下,好像缺了點什麼
是的,我們缺了一個“-p”的選項,好了,目錄建立完了,我們進去看看吧。執行cd a
一如我們所料,那...我想把b檔案刪了,該怎麼辦呢?哦對了,rmdir命令。我們來試一下
可惜,又報錯了,好像又缺了點什麼,它說資料夾不是空的,哦對了,剛才我們建立了一個遞迴的目錄,所以b下面還有c,所以以此可以知道rmdir不能刪除非空資料夾,那在怎麼辦呢?
根據上面學習的內容試了下-r和-f,好像都不行,哎?給了提示,試一下--help。哦,好像用-p可以:
終於可以了。
除此以外,還有另外一種方法,rm -r也可以。
但是這樣好像有點麻煩,它會一級一級的讓你去確認,有沒有更舒服一點的方法呢,那我們把刪除掉的b/c復原一下(復原過程省略)。於是我們的目錄又變成這樣了:
我們使用rm -rf
這裡尤其強調一下,如果在實際工作中,你有root許可權,請一定要小心使用這個命令,如上圖所示,刪除了所有的東西又不會有任何提示。
好了,我們上面是刪除的目錄,那我刪除個檔案試試:
刪除檔案會有提示。
以上,我們經歷了簡單地建立資料夾、進入資料夾、刪除資料夾及檔案等內容。下面我們繼續。
首先我們先想一個問題,假設我不是root使用者,我剛進入伺服器,或者我經歷了大量的操作,忘記了當前目錄在哪。怎麼辦呢?
pwd命令可以告訴你所處的位置。
那,我們現在來試試複製一個資料夾或檔案:
我們進入到a目錄,把之前存在的b目錄刪掉,然後建立兩個資料夾b1和b2,所以我們的目錄現在是這樣的:
然後呢,我們進入b1,建立個檔案,名字叫c1.js好了。
最後呢,我們把c1.js複製到b2中去:
這樣就完成了複製。
如果我想複製的時候改名的話,可以試一下-i選項。
ok,我們完成了複製,那我想把c1.js從b1目錄移動到b2目錄怎麼辦呢?我們使用時光機,回到b1資料夾中有c1.js而b2中沒有的那個時刻,然後移動c1.js到b2目錄
很簡單,這樣我們就完成了移動。
最後,我們來看下連結怎麼使用。我們先到b2裡。然後執行命令
這樣,我們就建立了一個硬連結。然後,我們再來建立個軟連線:
那,這也看不出來軟和硬到底有啥區別啊,那我們這樣:
可以看到一點區別了吧,具體的內容跟我上面說過的一樣哦,如果不理解,可以回過頭去看一下之前的內容。
承前一篇,之前我們已經簡單地瞭解了linux的一些基本命令,這一篇文章,我們繼續往下。首先,我們先學習下檔案搜尋命令。
四、檔案搜尋命令
按照我們之前的方式,先把相關的命令羅列一下:
- locate,搜尋檔案所在位置,比如locate 1.js
- 需要依賴mlocate,通過yum install mlocate -y來安裝
- 資料儲存在
/var/lib/mlocate
後臺資料庫,每天更新一次 - 可以
updatedb
命令立刻更新資料庫 - 只能搜尋檔名
- whereis,搜尋命令所在路徑以及幫助文件所在位置,比如 whereis ls
- -b,只查詢可執行檔案
- -m,只查詢幫助檔案
- which,可以查詢別名,比如which ls
- 環境變數,通過echo $PATH命令可以檢視,定義的是系統搜尋命令的路徑
- find,檔案搜尋命令,find [搜尋範圍] [搜尋條件]
- 按名稱搜尋,避免大範圍的搜尋,會十分消耗效能。比如:find / -name 1.js 萬用字元,其實就是類似於js正則。
- *匹配任意內容
- ?匹配任意一個字元
- []匹配任意一箇中括號中的內容
- -i,不區分大小寫,比如find / -iname A.js
- -user,按所有者進行搜尋
- find /root -user root
- find /root -nouser
- 按時間搜尋,find /a/1.js -mtime -5
- mtime:檔案訪問時間,ctime:改變檔案屬性時間,mtime:修改檔案內容時間
- -5:五天內修改的內容,5:五天前當前修改的檔案,+5:五天前修改的檔案。
- 按大小搜尋,-size,find . -size 100k
- -8k:小於8k,8k:等於8k,+8k:大於8k,+8M:大於8M
- -inum,按照i節點搜尋,比如find . -inum 123456,find . 中.的意思是搜尋範圍為當前目錄下的所有檔案
- -a,既and,邏輯與,兩個條件都滿足。-o,既or,邏輯或,滿足一個條件即可。比如:find /tmp -size +10k -a -size -20k
- grep,在檔案當中匹配符合條件的字串,也就是匹配的是檔案中的內容,而不是檔名。
- -i,忽略大小寫
- -v,排除指定字串
我們來實踐一下我們學習過的命令:
1、首先,我們在根目錄建立一個demo資料夾,在demo資料夾內建立一個test.js的檔案,那麼現在我們的目錄結構看起來是這樣的:
然後,要注意的是locate命令需要依賴一個mlocate資料庫。我們通過yum install mlocate -y安裝即可。然後我們使用locate test.js命令:
結果什麼也沒發生,好像不太對勁,哦對了,mlocate是依賴資料庫的,它大概每五分鐘更新一次,所以,剛才我們建立的test.js檔案還未更新,我們可以使用updatedb命令立即更新資料庫,然後再執行查詢命令:
這樣就達到我們的目的啦。
2、whereis是用來查詢我們所使用的命令的相關檔案在哪裡,很簡單:
那麼第一個路徑就是它的執行檔案路徑,第二個就是幫助頁面所在路徑、後面就是它的原始檔。如果只是想檢視它的可執行檔案路徑,可以使用:
3、which比較簡單,就是查詢別名
輸出的結果什麼意思呢,就是我們使用的ls實際上是命令ls --color=auto的別名,執行ls就相當於執行ls --color=auto了。
4、列印環境變數,這個也沒啥好說的
5、find命令的選項比較多,需要大家都試一下。
6、這個要注意,它查詢的是檔案的內容,而不是檔名啊什麼的。那,我們現在test裡面通過vim(下節會講)寫東西:
好了,我們把之前學過的命令都簡單實踐了一遍,我們往下繼續學下壓縮。
五、壓縮與解壓縮命令
- zip格式
- 壓縮檔案,zip [壓縮檔名] [原檔案]
- 壓縮目錄,zip -r [壓縮檔名] [源目錄]
- 解壓,unzip [壓縮檔名]
- gzip格式
- gzip [原始檔],gzip a.txt,壓縮為.gz格式的壓縮檔案,原始檔會消失
- gzip -c [原始檔] > [壓縮檔案],gzip -c yum.txt > yum.txt.gz,壓縮為.gz格式的壓縮檔案,原始檔不會消失
- gzip -r [目錄],gzip -r xx,壓縮目錄下的所有子檔案,但是不壓縮目錄
- gzip -d [壓縮檔名],gzip -d yum.txt.gz,解壓縮檔案,不保留壓縮包
- gunzip [壓縮檔案],gunzip yum.txt.gz,解壓縮檔案,不保留壓縮包
- tar,打包命令,只打包,不壓縮
- -c,打包
- -v,顯示過程
- -f,指定打包後的檔名
- -x,解打包
- bz2格式,不能壓縮目錄
- bzip2 原始檔,bzip2 1.txt,壓縮為.bz2格式的檔案,不保留原始檔
- bzip2 -k 原始檔,bzip2 -k 1.txt,壓縮為.bz2格式的檔案,保留原始檔
- bzip2 -d 壓縮檔名,bzip2 -d 1.txt.bz2,解壓壓縮包
- bunzip2 壓縮檔名,bunzip2 1.txt.bz2,解壓壓縮包
- tar.gz壓縮,zip可以壓縮目錄,但是壓縮效率不高,gzip壓縮效率高但是不能壓縮目錄,所以先通過tar打包後再通過gzip壓縮。
- tar -zcvf book.tar.gz book,壓縮
- tar -zxvf book.tar.gz
我們繼續實踐:
1、我們繼續使用之前的test.js檔案來實踐壓縮命令即可:
多了個zip檔案,那名字是我們隨便寫的麼?
答案是是的。解壓縮的命令,大家可以自己去試一下哦。有驚喜哦。
2、
六、關機和重啟命令
這個就簡單說一下
- shutdown,關機命令
- -c,取消前一個關機命令
- -h,關機
- -r,重啟,shutdown -r 06:00
- init,關機
- init 0,關機
- init 6,重啟
- 系統的執行級別:
- 0 關機
- 1 但使用者
- 2 不 完全多使用者,不包含NFS服務
- 3 完全多使用者
- 4 未分配
- 5 圖形介面
- 6 重啟
- logout,退出登入
七、檢視使用者登入資訊
- w,檢視登入使用者資訊,結果列表中的含義分別是:
- USER 登入的使用者名稱
- TTY 登入的終端 tty1 本地終端 pts/0遠端終端
- FROM 登入的IP
- LOGIN 登入時間
- IDLE 使用者閒置時間
- JCPU 該終端所有程式佔用的時間
- PCPU 當前程式所佔用的時間
- WHAT 正在執行的命令
- who,檢視登入使用者資訊:
- USER 登入的使用者名稱
- TTY 登入的終端 tty1 本地終端 pts/0遠端終端
- LOGIN 登入時間(登入的IP)
- last,檢視當前登入和過去登入的使用者資訊 預設讀取
/var/log/wtmp
檔案- 使用者名稱
- 登入終端
- 登入IP
- 登入時間
- 退出時間(線上時間)
- lastlog,檢視所有使用者的最後一次登入時間
- 使用者名稱
- 登入終端
- 登入IP
- 最後一次登入時間
八、檢視檔案命令
- cat,
- more,
- head,
- tail,tail -f
今天就到此為止了,我們總結一下目前學過的內容:
1、我們簡單學習了linux系統的基本目錄結構。以及/和~都是什麼。
2、還學習了命令的基本格式。
3、然後,我們還學習了一些常用的增刪改查的命令,以及軟硬連結的區別。
4、最後我們一起對學習過的命令進行了實際的操作
好了,今天我們就先到這裡,下集繼續。