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