在linux中,OS是指操作系統(tǒng),是管理和控制計(jì)算機(jī)硬件與軟件資源的計(jì)算機(jī)程序,是直接運(yùn)行在“裸機(jī)”上的最基本的系統(tǒng)軟件,任何其他軟件都必須在操作系統(tǒng)的支持下才能運(yùn)行。OS存在的原因:單純的硬件計(jì)算機(jī),操作起來效率特別低下,難度特別高。
本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。
前言: OS(操作系統(tǒng))的學(xué)習(xí)是很重要的,這里學(xué)習(xí)操作系統(tǒng)先從Linux開始。
Linux是指令操作的,距離OS更近,更便于我們掌握OS。學(xué)習(xí)C++,一般從事后端較多,并且Linux對(duì)于想要從事后端是非常重要,LInux很大概率就是工作的OS。
一.OS(操作系統(tǒng))基本概念
操作系統(tǒng)(Operating System,簡稱OS)是管理和控制計(jì)算機(jī)硬件與軟件資源的計(jì)算機(jī)程序,是直接運(yùn)行在“裸機(jī)”上的最基本的系統(tǒng)軟件,任何其他軟件都必須在操作系統(tǒng)的支持下才能運(yùn)行。
OS存在的原因:單純的硬件計(jì)算機(jī),操作起來效率特別低下,難度特別高。
OS是一款軟件,用來進(jìn)行對(duì)軟硬件資源進(jìn)行管理的軟件,管理目的:對(duì)上,對(duì)下,提高操作效率。
現(xiàn)實(shí)生活中的操作系統(tǒng)
-
win7
-
Mac
-
Android
-
iOS
二.Linux常見指令
我們?yōu)槭裁匆獙W(xué)習(xí)指令呢?
因?yàn)樗械牟僮飨到y(tǒng),剛開始的時(shí)候都是支持指令操作的,圖形化界面是后來才有的,所以指令執(zhí)行距離OS更近,便于我們更好的掌握OS。
1.ls指令
(1)語法:ls [選項(xiàng)] [目錄或文件] (目錄或文件不寫為當(dāng)前目錄)
(2)功能:對(duì)于目錄,該命令列出該目錄下的所有子目錄和文件。
對(duì)于文件,將列出文件名及其他信息。
(3)常用選項(xiàng)
① 直接使用ls 只有子目錄和文件
② -l 列出文件的詳細(xì)信息(可以寫成ls -l,也可以寫成ll )
③ -a 列出目錄下的所有文件,包括以 . 開頭的隱含文件
以 . 開頭的文件我們稱為隱藏文件,在任意目錄下,都會(huì)存在兩個(gè)隱藏文件
.(當(dāng)前路徑) ..(上級(jí)路徑)
④ -i 輸出文件的i節(jié)點(diǎn)的索引信息
⑤ -n 用數(shù)字的 UID,GID 代替名稱
(4)舉例
ls -al
2.pwd指令
(1)語法:pwd
(2)功能:顯示用戶當(dāng)前所在目錄
Linux的路徑分割符是:/(斜杠)
Window的路徑分割符是:(反斜杠)
(3)舉例
pwd
3.cd指令
我們一般定位某個(gè)文件,是通過路徑定位的方式,找到文件的。那為什么我們是通過路徑的方式定位文件的呢?
Linux的目錄結(jié)構(gòu)本質(zhì)是一顆多叉樹(1. 每一個(gè)子節(jié)點(diǎn)既可以是一個(gè)目錄(再放目錄或者普通文件,遞歸式的定義),也可以是一個(gè)普通文件 2. 這顆多叉樹的葉子節(jié)點(diǎn),一定是一個(gè)普通文件或者空目錄)
因此任何一個(gè)節(jié)點(diǎn),可以有多個(gè)子節(jié)點(diǎn),但是任何一個(gè)子節(jié)點(diǎn),都只有一個(gè)父節(jié)點(diǎn)。
所以常規(guī)的路徑定位是具有唯一性的(絕對(duì)路徑具有唯一性)
除了相對(duì)路徑,還有絕對(duì)路徑(相對(duì)于當(dāng)前所處的路徑)
如果是日常使用,推薦相對(duì)路徑 —— 簡單
如果是添加配置文件之類,推薦絕對(duì)路徑 —— 不會(huì)出錯(cuò)
(1)語法:cd [目錄名]
(2)功能:改變工作目錄,將當(dāng)前工作目錄改變到指定的目錄下。(進(jìn)入輸入的目錄)
(3)常用選項(xiàng)
① cd .. 返回上級(jí)目錄(.為當(dāng)前目錄,..為上級(jí)目錄)
② cd 絕對(duì)路徑
③ cd 相對(duì)路徑
④ cd – 返回最近訪問目錄
⑤ cd ~ 進(jìn)入用戶家目錄(/home/hb)
(4)舉例
cd .. :返回上級(jí)目錄
cd /home/hb/code :絕對(duì)路徑
cd ../test :相對(duì)路徑
cd – :返回最近訪問目錄
cd ~ :進(jìn)入用戶家目錄
4.touch指令
如果我們創(chuàng)建了一個(gè)空文件,在磁盤中會(huì)占據(jù)空間嗎?
要占用 文件有屬性數(shù)據(jù),也是數(shù)據(jù)
文件 = 文件內(nèi)容 + 文件屬性
我們要學(xué)的所有的文件操作無非兩類:
①對(duì)文件的內(nèi)容操作
②對(duì)文件的屬性操作
(1)語法:touch [選項(xiàng)] [文件]
(2)功能:touch命令參數(shù)可更改文檔或目錄的日期時(shí)間,包括存取時(shí)間和更改時(shí)間,或者新建一個(gè)不存在的文件,
(3)常用選項(xiàng)
① 直接使用touch 創(chuàng)建一個(gè)文件
(4)舉例
touch test.c
5.mkdir指令
(1)語法:mkdir [選項(xiàng)] [目錄名字]
(2)功能:在當(dāng)前目錄下創(chuàng)建一個(gè)目錄
(3)常用選項(xiàng)
-p [路徑名稱] 可以是一個(gè)路徑名稱,此時(shí)若路徑中的某些目錄尚不存在,加上此選項(xiàng)后,系統(tǒng)將自動(dòng)建立好那些尚不存在的目錄,即一次可以建立多個(gè)目錄
(4)舉例
mkdir dir :創(chuàng)建一個(gè)目錄
mkdir -p dir1/dir2/dir3 :遞歸建立多個(gè)目錄
6.rmdir指令 && rm指令
rmdir是一個(gè)于mkdir相對(duì)于的指令,mkdir是建立目錄,而rmdir是刪除目錄
Ⅰ. rmdir:
(1)語法:rmdir [選項(xiàng)] [目錄名字]
(2)功能:刪除空目錄
(3)常用選項(xiàng)
① -p 當(dāng)子目錄被刪除后如果父目錄也變成空目錄的話,就連帶父目錄一起刪除
(4)舉例
rmdir dir
rmdir -p dir
Ⅱ. rm(一般這個(gè)用的較多)
(1)語法:rm [選項(xiàng)] [目錄名字]
(2)功能:刪除文件或目錄
(3)常用選項(xiàng)
① 直接使用rm 刪除一個(gè)文件或目錄(文件都可以刪除,但只能刪除空目錄)
② -r 刪除目錄及其下的所有文件(可以刪除非空目錄)
③ -f 強(qiáng)制刪除文件,即使文件屬性為只讀(即寫保護(hù))
④ -i 刪除前逐一詢問確認(rèn)
(4)舉例
rm dir :刪除目錄
rm test :刪除文件
rm -r dir :刪除目錄下所有文件
rm -rf dir :強(qiáng)制刪除目錄下所有文件
rm -ir dir :刪除目錄下所有文件時(shí)依次詢問
* 通配符:匹配當(dāng)前目錄下的任何內(nèi)容
rm * :刪除當(dāng)前目錄下的所有文件(等價(jià)于rm ./*)
./ 當(dāng)前目錄:告知系統(tǒng),要訪問的資源在當(dāng)前目錄下,如果省略,部分情況下,默認(rèn)就是當(dāng)前目錄
7.man指令
(1)語法:man [選項(xiàng)] 命令
(2)功能:man相當(dāng)于一個(gè)聯(lián)機(jī)手冊,Linux的命令有很多參數(shù),我們不可能全都記住,這時(shí)候就可以使用man來獲取幫助。
(3)常用選項(xiàng)
① -k 根據(jù)關(guān)鍵字搜索聯(lián)機(jī)幫助
② man man 可以搜索man的相關(guān)操作
③ 數(shù)字 輸入對(duì)應(yīng)的數(shù)字,會(huì)去查找不同的命令
man手冊:
1 是普通的命令
2 是系統(tǒng)調(diào)用,如open(通過這個(gè)可以很方便的查到如何調(diào)用這個(gè)函數(shù),以及需要加說明頭文件)
3 是庫函數(shù),如printf
4 是特殊文件,也就是/dev下的各種設(shè)備文件
5 是指文件的格式,比如password,就會(huì)說明這個(gè)文件中各個(gè)字段的函數(shù)
6 是給游戲留的,由各個(gè)游戲自己定義
7 是附件和一些變量,比如像environ這種全局變量在這里就由有說明
8 是系統(tǒng)管理用的命令,這些命令只能由root使用,如ifconfigman相當(dāng)于一個(gè)聯(lián)機(jī)手冊,Linux的命令有很多參數(shù),我們不可能全都記住,這時(shí)候就可以使用man來獲取幫助。
(4)舉例
man 1 ls
man 3 printf
8.cp指令
(1)語法:cp [選項(xiàng)] 源文件或目錄 目標(biāo)文件或目錄
(2)功能:復(fù)制文件或目錄
(3)常用選項(xiàng)
① 直接使用cp 復(fù)制一個(gè)文件
② -r 遞歸處理,將指定目錄下的文件和子目錄一并復(fù)制
③ -f 強(qiáng)制復(fù)制文件或目錄,不論目的文件或目錄是否已經(jīng)存在
④ -i 覆蓋之前先詢問
(4)舉例
cp file.txt file2.txt
cp -r dir1 dir2
cp -rf dir ..
9.mv指令
mv命令是move的縮寫,可以用來移動(dòng)文件或者將文件改名,經(jīng)常用來備份文件或者目錄。
(1)語法:mv [選項(xiàng)] 源文件或目錄 目標(biāo)文件或目錄
(2)功能:
根據(jù)mv命令中第二個(gè)參數(shù)類型的不同(是目標(biāo)文件還是目標(biāo)目錄),mv命令將文件重命名或?qū)⑵湟浦烈粋€(gè)新的目錄中。
①當(dāng)?shù)诙€(gè)參數(shù)類型是源文件(源目錄)時(shí),mv命令完成文件重命名,此時(shí),源文件只能有一個(gè),它將所給的源文件或目錄重命名為給定的目標(biāo)文件名
②當(dāng)?shù)诙€(gè)參數(shù)類型是已存在的目錄名稱時(shí),源文件或目錄參數(shù)可以有多個(gè),mv命令將各參數(shù)指定的源文件均移至目標(biāo)目錄中
(3)常用選項(xiàng)
① 直接使用mv 移動(dòng)或重命名一個(gè)文件或目錄
② -f 如果目標(biāo)文件已經(jīng)存在,不會(huì)詢問直接覆蓋
③ -i 若目標(biāo)文件已經(jīng)存在時(shí),會(huì)詢問是否覆蓋
(4)舉例
mv file.txt a.txt
mv file.txt ..
mv dir1 dir2 dir
10.cat指令
(1)語法:cat [選項(xiàng)] [文件]
(2)功能:查看目標(biāo)文件的內(nèi)容
(3)常用選項(xiàng)
① -n 輸出行編號(hào)
(4)舉例
cat file.txt
cat -n file.txt
除了cat,還有tac,從后往前查看
tac file.txt
重定向:
這里先介紹一個(gè)echo,類似于printf,輸出信息到顯示器上。
例如:echo "hello world"
(1)輸出重定向
創(chuàng)建一個(gè)文件touch file.txt,然后可以通過echo "hello world" > file.txt,使本來應(yīng)該寫入到顯示器的內(nèi)容,把它寫入到文件中(每次都會(huì)情況原始文件的內(nèi)容,進(jìn)行重新寫入)
(2)追加重定向
echo "hello Linux" >> file.txt,類似上面的輸出重定向,但是這里是兩個(gè)>,并且它不會(huì)清空原始內(nèi)容,而是在原始文件的結(jié)尾進(jìn)行新增式的寫入
(3)輸入重定向
cat < file.txt,輸入重定向是把本來應(yīng)該從鍵盤文件中讀取數(shù)據(jù)的方式,改成從指定的文件中讀取
11.more指令
(1)語法:more [選項(xiàng)] [文件]
(2)功能:功能類似cat,但是可以手動(dòng)向下翻
(3)常用選項(xiàng)
① -n 輸出行編號(hào)
② q 退出more
(4)舉例
more file.txt
12.less指令
(1)語法:less [選項(xiàng)] 文件
(2)功能:類似cat和more,但是功能更強(qiáng)大,可以向上和向下翻(一般都使用less)
(3)常用選項(xiàng)
① -n 輸出行編號(hào)
② q 退出less
(4)舉例
less file.txt
13.head指令
(1)語法:head [選項(xiàng)] [文件]
(2)功能:顯示文件開頭(默認(rèn)顯示開頭10行)
(3)常用選項(xiàng)
① -n<行數(shù)> 想要顯示的行數(shù)
(4)舉例
head -20 file.txt
14.tail指令
(1)語法:rm [選項(xiàng)] [文件]
(2)功能:顯示末尾開頭(默認(rèn)顯示末尾10行)
(3)常用選項(xiàng)
① -n<行數(shù)> 想要顯示的行數(shù)
(4)舉例
tail -20 file.txt
管道:
如果我們想要查看文件的中間部分,比如一個(gè)1萬行的文本,我們想要查看[5000, 5030]行的信息,我們怎么辦呢?
①創(chuàng)建臨時(shí)文件
通過head -5030 file.txt > temp.txt,先得到一個(gè)臨時(shí)文件,然后在tail -30 temp.txt,我們才能看到[5000, 5030]中的信息了。
比較復(fù)雜。
②管道
管道是用來級(jí)聯(lián)多個(gè)命令,來完成流水線式的數(shù)據(jù)處理工作的。(可以傳輸數(shù)據(jù)資源)
| 這個(gè)就是管道
這么寫 head -5030 file.txt | tail -30 就可以通過管道來完成查看了。
15.date指令(時(shí)間相關(guān)指令)
(1)語法:date [選項(xiàng)] [格式]
(2)功能:指定格式顯示時(shí)間或者顯示時(shí)間戳
(3)常用選項(xiàng)
① 在顯示上,使用者可以設(shè)定想要顯示出的格式,格式設(shè)定為一個(gè)+后接標(biāo)記,其中常用的標(biāo)記列表如下:
%H:小時(shí)
%M:分鐘
%S:秒
%X:相當(dāng)于%H:%M:%S
%d:日
%m:月份
%Y:年份
%F:相當(dāng)于%Y-%m-%d
② 時(shí)間戳
時(shí)間->時(shí)間戳 date+%s
時(shí)間戳->時(shí)間 date -d@時(shí)間戳
時(shí)間戳是從1970年1月1日開始所經(jīng)過的秒數(shù),不考慮閏秒
(4)舉例
date +%Y-%m-%d_%H:%M:%S
date +%s
16.cal指令
(1)語法:cl [選項(xiàng)] [年份]
(2)功能:顯示日歷
(3)常用選項(xiàng)
① 直接使用就是當(dāng)前月份
② -3 顯示前一個(gè)月,當(dāng)前月,下一個(gè)月的月歷
③ -y 顯示當(dāng)前年份的年歷
(4)舉例
cal -3
cal -y 2020
17.find指令
find命令在目錄結(jié)構(gòu)中搜索文件,并執(zhí)行指定的操作
Linux下find命令提供了相當(dāng)多的查找條件,功能很強(qiáng)大。由于find具有強(qiáng)大的功能,因次它的選項(xiàng)也很多。
(1)語法:find [查找位置] [選項(xiàng)] [查找]
(2)功能:用于在文件樹中查找文件,并作出相應(yīng)的處理(可能訪問磁盤)
(3)常用選項(xiàng)
① -name 按照文件名查找文件
(4)舉例
find /usr/include/ -name stdio.h
18.grep指令
(1)語法:grep [選項(xiàng)] 搜尋的字符串 文件
(2)功能:在文件中搜索字符串,將找到的行打印出來(使用正則表達(dá)式搜索)
(3)常用選項(xiàng)
① 直接使用grep,打印出帶有想要字符串的行
② -i 忽略大小寫的不同,將大小寫視為相同
③ -n 輸出行號(hào)
④ -v 反向打印,打印出沒有想要搜尋的字符串的那些行
(4)舉例
grep 'hello' file.txt
grep -i 'HeLlo' file.txt
grep -iv 'HeLlo' file.txt
19.zip/unzip指令
1.zip:
(1)語法:zip 定義壓縮文件名.zip [目錄或文件]
(2)功能:將目錄或文件壓縮成zip格式
(3)常用選項(xiàng)
① 直接使用zip 壓縮一個(gè)文件
② -r 可壓縮一個(gè)目錄下的所有文件
(4)舉例
zip test.zip package
zip -r test.zip tar_package
zip -r test.zip -d tar_package
2.unzip
(1)語法:unzip 壓縮文件
(2)功能:解壓縮
(3)常用選項(xiàng)
① 直接使用unzip 解壓縮
② -d 指定壓縮到哪一個(gè)路徑下
(4)舉例
unzip test.zip
unzip test.zip -d /home
20.tar指令
(1)語法:tar [選項(xiàng)] [文件或目錄]
(2)功能:壓縮文件或解壓縮
(3)常用選項(xiàng)
① -c 建立一個(gè)壓縮文件
② -z 判斷是否具有g(shù)zip的屬性,是否需要用gzip壓縮
③ -f 使用檔名,在f之后要立即接檔名,不能再加參數(shù)
④ -x 解開一個(gè)壓縮文件
⑤ -t 查看壓縮包里面的文件
⑥ -v 壓縮的過程中顯示文件
⑦ -C 解壓到指定目錄下
(4)舉例
tar czf test.tgz tar_package // 壓縮文件
tar xzf test.tgz // 解壓縮
tar xzf test.tgz -C /home // 解壓縮到指定目錄
tar xzvf test.tgz 解壓縮過程顯示文件
21.bc指令
(1)語法:bc [數(shù)字][符號(hào)][數(shù)字]
(2)功能:計(jì)算器
(3)常用選項(xiàng)
① 直接使用bc 計(jì)算
(4)舉例
bc 1+2
22.uname指令
(1)語法:uname [選項(xiàng)]
(2)功能:用來獲取電腦和操作系統(tǒng)的相關(guān)信息(可用來顯示linux主機(jī)所用的操作系統(tǒng)的版本、硬件名稱等基本信息)
(3)常用選項(xiàng)
① -r 顯示內(nèi)核版本
② -a 詳細(xì)輸出所有信息,依次為內(nèi)核名稱、主機(jī)名、內(nèi)核版本號(hào)、內(nèi)核版本、硬件名、處理器類型、硬件平臺(tái)類型、操作系統(tǒng)名稱
(4)舉例
uname -r
uname -a
23.熱鍵
① Tab:命令自動(dòng)補(bǔ)齊
② Ctrl+c:終止失控程序
③ Ctrl+d:快速退出賬戶
④ Ctrl+r:搜索歷史命令
24.關(guān)機(jī)指令
(1)語法:shutdown [選項(xiàng)]
(2)功能:關(guān)機(jī)
(3)常用選項(xiàng)
① -h 將系統(tǒng)的服務(wù)停掉后,立即關(guān)機(jī)
② -r 在將系統(tǒng)的服務(wù)停掉之后就重重新啟動(dòng)
③ -t 在-t后加秒數(shù),表示過多少秒關(guān)機(jī)
(4)舉例
shutdown -h
三.shell命令及運(yùn)行原理
1.介紹
Linux嚴(yán)格意義上說的是一個(gè)操作系統(tǒng),我們稱之為”核心(kernel)“,但是一般用戶不能直接使用kernel,而是通過kernel的”外殼“程序,也就是shell,來與kernel溝通。(shell是一種外殼程序)
2.作用
外殼可以保護(hù)OS系統(tǒng),降低操作OS的成本,
shell外殼:傳遞用戶指令,交給OS,OS執(zhí)行完畢,結(jié)果交給shell,shell再交給用戶。
從技術(shù)角度,Shell的簡單定義:命令行解釋器包含:
①將使用者的命令翻譯給kernel處理
②同時(shí),將核心的處理結(jié)果翻譯給使用者
Linux中,外殼就是命令行解釋器。
Window中,外殼就是圖形化界面
在centos 7中常用的命令行解釋器(shell),叫做bash
四.Linux權(quán)限概念
Linux下有兩種用戶:①超級(jí)用戶(root)②普通用戶
①超級(jí)用戶:可以在Linux系統(tǒng)下做任何事情,不受限制
②普通用戶:在Linux下做有限的事情
③超級(jí)用戶的命令提示符是"#",普通用戶的命令提示符是"$"
命令:su [用戶名]
功能:切換用戶
從普通用戶切換到root用戶,使用su root或su – ,從root用戶切換到普通用戶user,使用su user
舉例:
su - su user