概述
簡介
- Linux是現在服務器上最常用的操作系統(OS - Operating system) - 所謂的操作系統本質上也是一個軟件,是一個可以運行其他軟件的容器
- 如果一臺服務器,沒有安裝操作系統,此時稱之為裸機。裸機可以使用,在使用的時候需要使用機器語言或者匯編語言;為了提高可讀性,采用了操作系統,可以才能使用通用的編程語言操作
- 經常使用的操作系統:Windows、Linux、Unix、Harmony、Mac、Android、IOS等
- Linux官網:www.linux.org
- Linux之父:Linus(林納斯),還開發了Git - 名言:
Talk is cheap, show me your code!
發展歷程
- 1970年左右,貝爾實驗室(曾經是全球最頂級的實驗室之一,曾經也是在通信領域最頂級的實驗室)在肯.湯普森(Unix之父)的主導和帶領下,試圖開發一套分時操作系統Unix,Unix是利用B語言開發的 - Unix也是眾多分時操作系統的鼻祖
- 由于B語言無法直接解釋為機器碼,所以導致Unix的效率一直不高。后來,肯.湯普森和丹尼斯.里奇改進了B語言 - new B語言,改名為了C語言,利用新的語言重新設計了Unix系統,大大的提升了操作系統的執行效率。到此,Unix正式面世
- 各大公司,紛紛針對Unix系統進行了改進和適配,都產生了各自公司的Unix系統(Unix和硬件的耦合度非常高):IBM-AIX、HP-UX等
- 荷蘭阿姆斯特丹大學的教授xxx(《計算機網絡》的一書的作者)為了教學安排,仿照Unix設計了一個擁有教學的操作系統MINIX(mini unix)。由于MINIX系統是用于教學操作,本身存在非常多的問題
- Linus在上大學期間,學習MINIX系統的時候,產生了非常濃厚的興趣,試圖解決MINIX系統存在的問題(打補丁),打補丁的過程中,發現代碼量已經超過了一萬行,到此,Linus決定放棄MINIX,試圖開發獨立的操作系統 - 1991年6月份
- 同年9月份,Linux系統面世 - Linux0.01版本
- 1991年底,Linus將Linux系統公布并開源,此后各個機構和組織都針對Linux進行了不同程度的開發,也因此Linux系統是20世紀最偉大的發明之一
發行版
- Red Hat系列(紅帽系列 - 紅帽認證)
- RHEL(Red Hat Enterprise Linux):Red Hat公司(2018年被IBM收購)推出的開源的收費版的Linux系統,也是目前最穩定的Linux系統,收費不菲,不面向個人用戶
- Fedora:Fedora社區維持,紅帽公司贊助的免費版本。紅帽公司將最新版的系統發布到Fedora上,免費公開給用戶使用,每6個月進行一次強制更新
- CentOS:Centos社區維持,將RHEL中的付費部分去掉,剩余的部分開源,就是Centos系統。Centos已經被紅帽收購,也因此Centos前后發生了較大的變化:Centos8作為分水嶺,CentOS8及以前的版本更新穩定,Centos8以后的版本更名為Centos Steam,也是每6個月已更新,可以認為Centos Stream是另一個版本的Fedora
- Rockey Linux(巖石系列):其實就是原來的Centos,開源、免費、穩定
- Debian系列
- Debian:Debian社區維護,開源、免費。分為穩定版、不穩定版和測試版
- Ubuntu:以桌面應用為主的Linux系統,相對其他的Linux系統,Ubuntu提供了更友好的界面操作
- 國產Linux
- Deepin(深度):基于Debian開發,提供個人版和企業版,提供了較多的應用,并且兼容安卓應用
- KylinOS(麒麟):國防科技大學基于Ubuntu研發,更多的應用于軍工領域
- UOS(統信):以Deepin系統為基礎做的二次開發,跟為個人版、家庭版、企業版和專業版,更多的應用于政府領域
- SUSE系統
- SLES:德國SUSE公司開發的商用版Linux系統,也號稱是最華麗的Linux系統,銀行領域偏多
- Open SUSE:類似于RHEL和Centos的關系
目錄結構
-
在Linux中,一切皆文件
-
在Linux中,根路徑是
/
。路徑分為絕對路徑和相對路徑- 絕對路徑:以根路徑為起始路徑,例如:
/var/lib/log
- 相對路徑:不以根路徑為起始路徑,例如
tmp
,lib/log
.
:當前路徑。lib/log
和./lib/log
表示當前路徑下的lib目錄下有一個log..
:上一層路徑。../lib
表示返回上一層目錄,然后在上一層中尋找lib。
- 實際開發中,相對路徑使用偏多
- 絕對路徑:以根路徑為起始路徑,例如:
-
目錄結構
- bin:binary的縮寫,存放的是Linux常用的指令
- boot:Linux用于存放系統引導文件
- dev:device的縮寫,用于管理Linux的設備文件
- etc:存放系統環境配置和環境變量,不同于Windows,Linux中環境變量也是在文件中配置
- home:其他用戶的家路徑。Linux本身是一個多用戶操作系統,允許創建多個用戶,其中超級用戶是root,除此之外的其他用戶的根路徑都是在home下。例如創建了一個tom用戶,那么此時就會產生一個
/home/tom
用于存放tom用戶的數據 - lib和lib64:library的縮寫,存放的是Linux的系統文件
- media:臨時掛在外在媒介
- root:root用戶的數據目錄
- tmp:臨時目錄,系統運行產生的緩存和日志都是在tmp目錄下,當系統磁盤空間不足時,會自動清理tmp目錄下的文件,所以自己的文件一定不能放在tmp下!
- var:軟件運行產生的日志數據會存在這個路徑下
- opt:operation的縮寫,Linux系統提供的,希望用戶在此進行操作的目錄
vi和vim
-
vi
是Linux提供的用于編輯文件的命令,但是沒有格式和高亮顯示 -
vim
的功能和vi
一致,只是提供了高亮顯示 -
需要注意:Linux中默認內置了
vi
命令,vim
需要安裝 -
安裝
vim
yum -y install vim
-
存在三種模式:一般模式、編輯模式和指令模式
-
當
vi
或者vim
一個文件的時候,默認進入一般模式,在這種模式下,無法對數據進行修改或者插入 -
如果需要對數據進行修改或者插入,那么進入編輯模式
-
案例
-
編輯文件
# 切換到opt下 cd /opt # 創建空文件 # 命令格式:touch 文件名 touch a # 編輯文件 # 命令格式:vim 文件名 # 或者:vi 文件名 vim a
-
進入編輯模式:按
i, I, o, O, a, A, r, R, Insert
-
退出編輯模式:按
esc
,默認進入的是一般模式 -
進入命令模式:輸入
:
參數 解釋 w write的縮寫,表示寫入/保存 q quit的縮寫,表示退出 ! 表示強制執行
-
-
一般模式操作
操作 解釋 yy 復制當前一行數據 p 粘貼數據 y數字y 例如y3y,表示復制3行 dd 刪除一行 d數字d 例如d3d,表示刪除3行 u 撤銷上一步 x 向后刪除一個字母,等價于del X 向前刪除一個字母,等價于Backspace yw 復制一個單詞 dw 刪除一個單詞 shift+$ 挪到行尾 shift+^ 挪到行首 shift+g 挪到頁尾 數字+shift+g 挪到指定行,例如3+shift+g。如果需要挪到頁頭,那么就是1+shift+g -
命令模式操作
參數 解釋 :set nu 顯示行號 :set nonu 關閉行號 /單詞 或者 ?單詞 查找單詞 1. n向下尋找 2. N向上尋找 :noh 關閉高亮
常用命令
幫助命令
-
man
:獲取幫助信息# 命令格式 man 命令/配置文件 # 獲取cd命令的幫助信息 man cd
字段 解釋 NAME 命令的名稱和單行描述 BASH BUILTID COMMANDS 命令之后可以添加的參數 -
help
:獲得shell內置命令的幫助信息# 命令 help 命令 # 獲得cd命令的幫助信息 help cd
-
whatis
:確定這個命令是干什么的# 命令格式 whatis 命令
目錄文件類
-
pwd
:print working directory,查看當前所在的絕對路徑 -
ls
:list(列出)的縮寫ls [參數] [路徑]
-
案例
# 查看當前路徑下所有的文件和目錄 ls # ls 路徑 # 表示查看指定路徑下所有的子文件和子目錄,不包含隱藏文件 # 在Linux中,.開頭的文件是隱藏文件,默認不被ls發現 ls /var # ls -a [路徑] # -a是all的縮寫,表示所有,因此這個命令表示查看指定路徑下的所有子文件和子目錄,包含隱藏文件 ls -a ls -a /root # ls -l [路徑] # -l是list的縮寫,ls -l表示列出指定路徑下所有子文件和子目錄的詳細信息 ls -l /var # drwxr-xr-x. 2 root root 19 Feb 27 00:28 account # 文件類型和權限 鏈接數 所有者 所有者所在的用戶組 文件大小,單位是字節 文件的修改日期 文件名 # -開頭表示這是個文件,d開頭表示這是個目錄,l開頭表示這是個軟鏈接(可以理解為Windows中的快捷方式) # ls -l可以縮寫為ll
-
權限解釋
文件 目錄 r - read 可以被讀取 可以查看這個目錄下的子文件和子目錄 w - write 可以被修改 對這個目錄下的子目錄和子文件進行創建、刪除、重命名、復制操作 x 可執行,只要這個文件能被打開、能被修改等,就算是可以被執行 這個目錄可以被打開 -
在Linux中,一個文件能否被看到,由它的父目錄的權限決定
-
權限每三位一組,決定用戶、用戶組和其他用戶的權限
-
-
cd
:change directory,切換目錄cd [參數] 路徑 # 回到上一層目錄 cd .. # 回到上一次所在的路徑 cd - # 回到當前用戶所在的用戶數據目錄 # 如果當前是tom用戶,對應的數據目錄就是/home/tom # 如果當前是root用戶,對應的數據目錄就是/root cd ~
-
mkdir
:make directory,創建目錄# 創建空目錄 mkdir test # -p:表示創建多層目錄 mkdir -p bigdata/a2312
-
rmdir
:remove directory,只能刪除空目錄rmdir bigdata/a2312/
-
rm
:remove,移除文件/目錄# 刪除a文件 rm a # -r,recursive(遞歸)的縮寫,遞歸刪除 mkdir a rm -r a # -f,force(強制)的縮寫 mkdir -p test/bigdata/a2312 rm -rf test/bigdata/a2312 # -v,verbose,顯示刪除的詳細過程 mkdir -p test/bigdata/a2312 rm -rfv test/bigdata/a2312
溫馨提示:在Linux中慎重刪除文件/目錄,因為Linux沒有回收站!!!刪除就無法恢復!!!
-
touch
:創建空文件 -
cp
:copy的縮寫,復制文件或者目錄# 格式 cp [參數] 原文件 目的地 # 復制文件 cp /root/original-ks.cfg /opt # 在復制文件的時候,如果發現目的地中有同名文件,會詢問是否覆蓋 # 復制的時候修改文件名 cp /root/original-ks.cfg /opt/test.cfg # 復制的時候,如果有同名文件,就強制覆蓋 \cp /root/original-ks.cfg /opt # cp如果要復制目錄,要求是空目錄 # -r,表示遞歸復制。如果目錄非空,需要使用-r cp -r /var/log ./
-
mv
:move的縮寫,剪切或者重命名文件/目錄# 重命名 mv test.cfg a.cfg # 剪切 mv a.cfg /root # 剪切并重命名 mv /root/a.cfg /opt/b.cfg
-
head
:查看文件頭部的內容,默認是10行數據# 查看頭部數據,默認10行 head test # 查看指定行數 head -n 3 test
-
tail
:查看文件尾部的內容,默認是10行數據# 查看尾部數據,默認10行 tail test # 查看指定行數 tail -n 3 test
-
cat
:查看文件的所有的數據# 查看文件所有的數據 cat test # 查看數據的時候顯示行號 cat -n test
-
more
:分屏查看# 分屏查看 more /var/log/boot.log # 回車表示查看下一行 # 空格或者Ctrl+F表示查看下一頁 # Ctrl+B表示回滾一頁 # =表示查看當前是第幾行 # :f表示查看的是哪一個文件,查看的是第幾行 # q表示退出
-
less
:分屏查看# 分屏查看 less /var/log/boot.log # 空格或者pagedown表示查看下一頁 # pageup表示查看上一頁 # /單詞 或者 ?單詞 要搜索這個單詞,n表示查找下一個,N表示查找上一個 # q表示退出
-
more和less的區別:
- less的功能會更加強大:less支持搜索,more不支持
- more是先將整個文件讀取出來,然后再進行分屏,因此會占用更大的內存空間;less根據屏幕來進行分屏讀取,也就意味著如果結束查看,未查看到部分數據不讀取。也就意味著,讀取大文件更適合于用less
-
ln
:建立軟鏈接# 命令格式 ln -s [源文件] [目的地] # 建立軟鏈接 # 將/var/log目錄鏈接到/opt下 ln -s /var/log /opt cd log # 進入的/opt/log # 刪除軟鏈接 mkdir test ln -s test a rm -rf a # 刪除軟鏈接,但是不刪除源目錄/文件 rm -rf a/ # 命令無效 # 進入軟鏈接對應的實際路徑 cd -P log # 此時進入的是/var/log
echo
-
echo
是Linux提供的用于輸出的命令,類似于Java中的printecho a echo 'a' echo "a"
-
在Linux中,數據默認就是字符串!
echo 2+3 # 輸出就是2+3
-
需要使用轉義字符
echo "hello\tworld" # 打印hello\tworld echo -e "hello\tworld" # 打印hello world
>和>>
-
>表示覆蓋寫入;>>表示追加寫入
-
案例
# 將打印結果覆蓋到a.txt中 echo "abc" > a.txt # 將打印結果追加到a.txt中 echo "def" >> a.txt
-
監控指定文件(a.txt),如果文件中追加了新數據,能自動發現并打印這個數據
tail -f a.txt
-
合并兩個文件
cat a.txt >> b.cfg
復習:轉義字符、編碼
-
轉義字符:鍵盤上部分鍵的效果無法直接體現,所以才采用轉義字符來表示
字符 解釋 \t table的縮寫,制表符,補齊字節,用于對齊!!!默認Windows中是4個字節,Linux是8個字節 \r return的縮寫,回車符,現在使用的較少,Linux不支持 \n newLine的縮寫,換行符 \f 分頁符 -
編碼:將字符按照指定規則映射成數字,這個過程就叫編碼,記錄映射過程的表格稱之為編碼表
- ASCII(阿斯克碼表):不完全碼表,1個字符占用1個字節
- ISO-8859-1(西歐碼表):一共有256個字符,1個字符占用1個字節
- GB2312(國標碼,后來擴展成了GBK):1個字符占用2個字節,收錄的是大部分的簡體漢字和少部分的繁體漢字,GBK在大陸內范圍通用,港澳臺不適用
- Unicode編碼體系:規定了一系列碼表,UTF-8,UTF-16,UTF-32等。常用的是UTF-8,規定1個字符占用3個字節。UTF-8中收錄的是常見語言的基本字符
| newLine的縮寫,換行符 |
| \f | 分頁符 |
-
編碼:將字符按照指定規則映射成數字,這個過程就叫編碼,記錄映射過程的表格稱之為編碼表
- ASCII(阿斯克碼表):不完全碼表,1個字符占用1個字節
- ISO-8859-1(西歐碼表):一共有256個字符,1個字符占用1個字節
- GB2312(國標碼,后來擴展成了GBK):1個字符占用2個字節,收錄的是大部分的簡體漢字和少部分的繁體漢字,GBK在大陸內范圍通用,港澳臺不適用
- Unicode編碼體系:規定了一系列碼表,UTF-8,UTF-16,UTF-32等。常用的是UTF-8,規定1個字符占用3個字節。UTF-8中收錄的是常見語言的基本字符
- 所有碼表的前256位一模一樣 - 英文在所有字符集/碼表中都只占用1個字節!