Linux学习笔记(详细)
1、vi 和 vim編輯器
1.1、簡介
所有的Linux系統(tǒng)都會內(nèi)建vi文本編輯器。
vim具有程序編輯的能力,可以看做是vi的增強版本,可以主動的以字體顏色辨別語法的正確性,方便程序設(shè)計。代碼補完、編譯及錯誤跳轉(zhuǎn)等方便編程的功能特別豐富,在程序員中被廣泛使用。
1.2、vi和vim常用的三種模式
1.2.1、正常模式
以vim打開一個檔案就直接進入一般模式了(這是默認的模式)。在這個模式種,你可以使用【上下左右】按鍵移動光標(biāo),你可以使用【刪除字符】或【刪除整行】來處理檔案內(nèi)容,也可以使用【復(fù)制、貼上】來處理你的文件數(shù)據(jù)。(在正常模式下,我們可以使用快捷鍵。)
1.2.2、插入模式/編輯模式
在這個模式下,程序員可以輸入內(nèi)容。
按下【i,I,o,O,a,A,r,R】等任何一個字母之后才會進入編輯模式,一般來說按i即可。
1.2.3、命令行模式
在這個模式種,可以提供你相關(guān)指令,完成讀取、存盤、替換、離開vim、顯示行號等的動作則是在此模式中達成的。
1.2.4、在vi和vim模式下的命令
i #進入輸入模式 a #進入輸入模式 光標(biāo)前進一位 ESC #退出輸入模式 wq #保存并退出 q #退出 q! #強制退出1.3、vi和vim快捷鍵
1.3.1、復(fù)制
#復(fù)制 yy(正常模式) #拷貝當(dāng)前行 p(正常模式) #粘貼 5yy(正常模式) #拷貝當(dāng)前行向下5行1.3.2、刪除
#刪除 dd(正常模式) #刪除一行 5dd(正常模式) #刪除當(dāng)前行向下的5行1.3.3、查找
#查找 /hello + 回車(正常模式) #查找關(guān)鍵字hello n(正常模式) #查找下一個1.3.4、行號
#文件的行號 :set nu(命令模式) #設(shè)置行號 :set nonu(命令模式) #取消行號1.3.5、行首/行末
#跳轉(zhuǎn)到最末行 G(正常模式) #跳轉(zhuǎn)到最首行 gg(正常模式)1.3.6、撤銷
#撤銷 u(正常模式)1.3.7、將光標(biāo)移到第n行
#將光標(biāo)移到第10行 #1、顯示行號 :set nu (命令模式) #2、輸入10 (正常模式) #3、輸入shift+g (正常模式)2、實用指令
pwd #查看當(dāng)前所在目錄2.1、關(guān)機&重啟
shutdown -h now #立刻進行關(guān)機 shutdown -h 1 #"hello,1分鐘后會關(guān)機了" shutdown -r now #現(xiàn)在重新啟動計算機 halt #關(guān)機,作用和上面一樣 reboot #現(xiàn)在重新啟動計算機 sync #把內(nèi)存的數(shù)據(jù)同步到磁盤(把沒保存的東西保存,關(guān)機之前使用這個命令)2.2、用戶的注銷
#注銷 此指令在圖形運行級別無效 此命令在普通用戶下無效 logoutexit #用戶退出登錄 Ctrl + D #用戶退出登錄2.3、用戶管理
說明:
1、Linux系統(tǒng)是一個多用戶多任務(wù)的操作系統(tǒng),任何一個要使用系統(tǒng)資源的用戶,都必須首先向系統(tǒng)管理員申請一個賬號,然后以這個賬號的身份進入系統(tǒng)。
2、Linux的用戶至少要屬于一個用戶組。
2.3.1、添加用戶
useradd [選項] 用戶名 #[選擇]是參數(shù)useradd -d 新的用戶名 #給新創(chuàng)建的用戶指定家目錄 ConterOS useradd -m 新的用戶名 #給新創(chuàng)建的用戶指定家目錄 Unbutu#比如: useradd -m yangxinhu #創(chuàng)建了一個用戶 并且home下會自動生成一個yangxinhu的目錄當(dāng)創(chuàng)建用戶成功后,會自動的創(chuàng)建和用戶同名的家目錄
2.3.2、刪除用戶
userdel 用戶名 #刪除用戶 但是保存用戶家目錄 userdel -r 用戶名 #刪除用戶 同時刪除用戶家目錄刪除用戶時,一般不將用戶家目錄刪除
2.3.3、設(shè)置密碼
passwd 用戶名2.3.4、查看用戶
w #查看用戶列表id 用戶名 #查看指定用戶信息whoami #查看當(dāng)前用戶名who am i #查看當(dāng)前登錄用戶名2.3.5、切換用戶
su - 用戶名2.4、用戶組
介紹:類似于角色,系統(tǒng)可以對有共性的多個用戶進行統(tǒng)一的管理。
2.4.1、新增組
groupadd 組名useradd -g 用戶組 用戶名 #增加一個用戶的時候直接將他指定到一個組2.4.2、刪除組
groupdel 組名2.4.3、修改用戶的組
usermod -g 用戶組 用戶名2.4.4、用戶和組的相關(guān)文件
2.4.4.1、用戶配置文件(用戶信息)/etc/passwd
用戶(user)的配置文件,記錄用戶的各種信息
每行的含義:用戶名:口令:用戶標(biāo)識號:組標(biāo)識號:注釋性描述:主目錄:登錄Shell
2.4.4.2、組配置文件(組信息)/etc/group
組(group)的配置文件,記錄Linux包含的組的信息
每行含義:組名:口令:組標(biāo)識號:組內(nèi)用戶列表
2.4.4.3、口令配置文件(密碼和登錄信息,是加密)/etc/shadow
口令的配置文件
每行的含義:登錄名:加密口令:最后一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標(biāo)志
2.5、指定運行級別
運行級別說明:
0:關(guān)機
1:單用戶【找回丟失密碼】
2:多用戶狀態(tài)無網(wǎng)絡(luò)服務(wù)
3:多用戶狀態(tài)有網(wǎng)絡(luò)服務(wù)
4:系統(tǒng)未使用保留給用戶
5:圖形界面
6:系統(tǒng)重啟
常用運行級別是3和5,要修改默認的運行級別可改文件/etc/inittab的id:5:initdefault:這一行中的數(shù)字
命令:
init[0123456] #切換到制定運行級別的指令 如:切換到5 init 52.6、進入單用戶找回密碼
注意:只有在裝有Linux系統(tǒng)的主機上操作,才可以進入單用戶修改密碼(云服務(wù)器另有提供方式)。
2.6.1、啟動Ubuntu18操作系統(tǒng)并長按【Shift】鍵進入選項,選擇 Advanced options for Ubuntu 這一項 按回車【Enter】鍵
注意:這個界面是可能出現(xiàn)的,如果沒有出現(xiàn),直接跳過這一步。
2.6.2、選中Ubuntu,with Linux xxxx-generic(recovery mode)按【E】鍵,不要按回車
2.6.3、使用上下左右鍵,找到recovery nomodeset,并將其刪除
2.6.4、然后在這一行的最后添加:
quiet splash rw init=/bin/bash2.6.5、按ctrl+x或F10啟動系統(tǒng)就可以進入single模式而不需要密碼了。
2.7、幫助指令
當(dāng)我們對某個指令不熟悉時,我們可以使用Linux提供的幫助指令來了解這個指令的使用方法。
2.7.1、man
man [命令或配置文件] #獲得幫助信息#案例:查看ls命令的幫助信息 man ls2.7.2、help
#實例:查看cd的用法 help cd #獲得shell內(nèi)置命令的幫助信息2.8、文件目錄類
2.8.1、pwd
pwd #顯示當(dāng)前工作目錄的絕對路徑2.8.2、ls
ls [選擇] [目錄或是文件] #顯示當(dāng)前目錄下的目錄和文件 #-a 顯示當(dāng)前目錄所有的文件和目錄,包括影藏的 #-l 以列表的方式顯示信息 #-h 顯示更人性化2.8.3、cd
cd [參數(shù)] #切換到指定目錄 cd ~ 或者 cd #回到自己的家目錄 cd .. #回到上一級目錄2.8.4、mkdir
mkdir [選項] 要創(chuàng)建的目錄 #用于創(chuàng)建目錄 # -p 創(chuàng)建多級目錄rmdir 目錄 #刪除指定目錄 這個命令只能刪除空的目錄 rm -rf 目錄 #刪除指定目錄包括目錄下的所有文件和目錄2.8.5、touch
touch 文件名稱 #創(chuàng)建一個空文件2.8.6、cp
cp [選項] source dest #拷貝 source是源文件 dest是目標(biāo)路徑 #-r 遞歸復(fù)制整個文件夾 #\cp -r sorce dest 強制覆蓋,不要提示我2.8.7、rm
rm #移除 #-r 遞歸刪除整個文件夾 #-f 強制刪除不提示2.8.8、mv
mv #移動文件與目錄或者是重命名 #mv oldNameFile newNameFile (重命名) #mv /temp/movefile /targetFolder (移動)2.8.9、cat
cat [選項] 文件 #查看文件內(nèi)容 #-n 顯示行號2.8.10、more
more 文件 #查看文件內(nèi)容2.8.11、> & >>
> #輸出重定向 (覆蓋寫) >> #追加ls -l>文件 #列表的內(nèi)容寫入文件a.txt中(覆蓋寫) ls -al>>文件 #列表的內(nèi)容追加到文件aa.txt的末尾 cat 文件1>文件2 #將文件1的內(nèi)容覆蓋到文件2 cat /etc/profile > c.txt echo "內(nèi)容">>文件 #將內(nèi)容寫入文件中 #使用 #1、將/home目錄下的文件列表寫入到/home/1.txt中 ls -al>>/home/1.txt #2、將當(dāng)前日歷信息追加到/home/mycal文件中 cal >> /home/mycal2.8.12、echo
echo [選擇] [輸出內(nèi)容] #輸出內(nèi)容到控制臺 #經(jīng)常使用echo指令輸出環(huán)境變量 echo $PATH2.8.13、head
head #顯示文件的開頭部分內(nèi)容,默認情況下head指令顯示文件的前10行內(nèi)容 head 文件 #查看文件頭10行內(nèi)容 head -n 5 文件 #查看文件頭5行內(nèi)容,5可以是任意行數(shù)2.8.14、tail
tail #顯示文件中尾部的內(nèi)容,默認情況下tail指令顯示文件的后10行內(nèi)容 tail 文件 #查看文件后10行內(nèi)容 tail -n 5 文件 #查看文件后5行內(nèi)容,5可以是任意行數(shù) tail -f 文件 #實時追蹤該文檔的所有更新,工作中經(jīng)常使用,如實時監(jiān)控日志文件2.8.15、ln
#軟鏈接指令 類似于windows里的快捷方式,主要存放了鏈接其他文件的路徑 ln -s [源文件或目錄] [軟鏈接名] #給源文件創(chuàng)建一個軟鏈接(相當(dāng)于給源文件創(chuàng)建了一個快捷方式) rm -rf [軟鏈接名] #刪除軟鏈接 在刪除軟鏈接目錄時,后面不要帶/,否則提示資源忙2.8.16、history
history #查看已經(jīng)執(zhí)行過的歷史命令,也可以執(zhí)行歷史指令 history 10 #查看最近使用的10個命令 10這個數(shù)字可以改變 !指令編號 #執(zhí)行第多少條指令 !178 執(zhí)行編號為178的指令2.9、時間日期類
2.9.1、date
date #顯示當(dāng)前時間 date +%Y #顯示當(dāng)前年份 date +%m #顯示當(dāng)前月份 date +%d #顯示當(dāng)前是哪一天 date "+%Y-%m-%d %H:%M:%S" #顯示年月日時分秒 date -s 字符串時間 #設(shè)置系統(tǒng)當(dāng)前時間 date -s "2019-06-19 10:03:00"2.9.2、cal
cal #查看當(dāng)前日歷 cal [選項] #顯示選擇的年份的所有日歷 cal 20192.10、搜索查找類
2.10.1、find
#find指令 將從指定目錄向下遞歸的遍歷其各個子目錄,將滿足條件的文件或者目錄顯示在終端 find [搜索范圍] [選項] #選項說明 #-name <查詢方式> 按照指定的文件名查找模式查找文件 #-user <用戶名> 查找屬于指定用戶名所有文件 #-size <文件大小> 按照指定的文件大小查找文件#按文件名,根據(jù)名稱查找/home目錄下的hello.txt文件 find /home -name hello.txt #按擁有者,查找/opt目錄下,用戶名稱為root的文件 find /opt -user root #查找整個linux系統(tǒng)下大于20M的文件(+n 大于 -n 小于 n 等于) find / -size +20M #查詢根目錄下,所有后綴為.txt的文件 find / -name *.txt2.10.2、locate
#locate指令 可以快速定位文件路徑。locate指令利用事先建立的系統(tǒng)中所有文件名稱及路徑的locate數(shù)據(jù)庫實現(xiàn)快速定位給定的文件。locate指令無需遍歷整個文件系統(tǒng),查詢速度較快。為了保證查詢結(jié)果的準(zhǔn)確度,管理員必須頂起更新locate時刻。 locate 搜索文件 #由于locate指令基于數(shù)據(jù)庫進行查詢,所以第一次運行前。必須使用updatedb指令創(chuàng)建locate數(shù)據(jù)庫#使用locate指令快速定位hello.txt文件所在目錄 updatedb locate hello.txt2.10.3、grep & 管道符號 |
#grep過濾查找 #管道符 "|" ,表示將前一個命令的處理結(jié)果,輸出傳遞給后面的命令處理。grep [選項] 查找內(nèi)容 源文件#選項 # -n 顯示匹配行及行號 # -i 忽略字母大小寫#應(yīng)用實例 : 請在hello.txt文件中,查找 "yes" 所在行,并且顯示行號 cat hello.txt | grep -ni yes #cat hello.txt 將hello.txt的內(nèi)容瀏覽出來 # | 是將cat瀏覽出來的內(nèi)容交給后面的命令處理 #grep yes 是將 | 交過來的內(nèi)容進行過濾查找2.11、壓縮和解壓縮類
2.11.1、gzip & gunzip
#gzip用于壓縮 #gunzip用于解壓gzip 文件 #壓縮文件,只能將文件壓縮為 *.gz 文件 gunzip 文件.gz #解壓縮文件命令2.11.2、zip & unzip
#zip用于壓縮 #unzip用于解壓 #在項目打包發(fā)布中很有用zip [選項] xxx.zip 將要壓縮的內(nèi)容 #壓縮文件和目錄的命令 unzip [選項] xxx.zip #解壓縮文件#zip常用選項:-r 遞歸壓縮,即壓縮目錄 #unzip常用選項:-d <目錄> 指定解壓后文件的存放目錄2.11.3、tar
#打包指令 最后打包后的文件是.tar.gz的文件tar [選擇] xxx.tar.gz 打包的內(nèi)容 #打包目錄,壓縮后的文件格式是.tar.gz#常用選項 #-c 產(chǎn)生.tar打包文件 #-v 顯示詳細信息 #-f 指定壓縮后的文件名 #-z 打包同時壓縮 #-x 解包.tar文件#案例 #1、壓縮多個文件,將/home/a1.txt和/home/a2.txt壓縮成a.tar.gz tar -zcvf /home/a.tar.gz /home/a1.txt /home/a2.txt #2、將/home的文件夾壓縮成myhome.tar.gz tar -zcvf myhome.tar.gz /home/ #3、將a.tar.gz解壓到當(dāng)前目錄下 tar -zxvf a.tar.gz #4、將myhome.tar.gz解壓到/opt目錄下(指定的目錄必須是存在的) tar -zxvf myhome.tar.gz -C /opt/3、組管理和權(quán)限管理(難點、重點)
在Linux中的每個用戶必須屬于一個組,不能獨立于組外。
在linux中每個文件有所有者、所在組、其他組的概念。
3.1、文件/目錄所有者
一般為文件的創(chuàng)建者,誰創(chuàng)建了這個文件,就自然的成為這個文件的所有者。
3.1.1、查看文件的所有者
ls -ahl #實例:創(chuàng)建一個組police,在創(chuàng)建一個用戶tom,然后使用tom來創(chuàng)建一個文件,看看情況如何 #-----root用戶下 groupadd police useradd -g police tom #------切換到tom用戶 創(chuàng)建ok.txt touch ok.txt #查看所有者 ls -ahl文件所有者圖示
ok.txt的所有者是tom,tom在police組中,ok.txt的所在組是police
一般文件的所在組,是所有者所在的組
3.1.2、修改文件的所有者
chown (change owner改變所有者)
chown 用戶名 文件名chown -R 用戶名 目錄名 #將目錄下的所有目錄文件的所有者以遞歸的方式修改 #詳情請參見3.7#案例:使用root創(chuàng)建一個文件apple.txt,然后將其修改成tom #------使用root用戶 創(chuàng)建apple.txt touch /home/apple.txt #查看所有者 apple.txt是屬于root的 ls -ahl #還是在root用戶下操作 修改文件的所有者 chown tom /home/apple.txt #再次查看apple.txt的所有者 ls -ahl修改文件所有者圖示:
文件所有者所在的組,不一定是文件所在組。
3.2、文件/目錄所在組
3.2.1、查看文件/目錄所在組
ls -ahl #前面已經(jīng)用到過了3.2.2、修改文件所在組
chgrp(change group選擇組)
chgrp 組名 文件名chgrp -R 組名 目錄名 #將目錄下的所有目錄文件的所在組使用遞歸的方式修改 #詳細請參見3.7#實例:使用root用戶創(chuàng)建文件orange.txt,看看當(dāng)前這個文件屬于哪個組,然后將這個文件所在組,修改到police組。 touch /home/orange.txt ls -ahl chgrp police /home/orange.txt ls -ahl3.3、其他組
除文件的所有者和所在組的用戶外,系統(tǒng)的其他用戶都是文件的其他組。
3.4、改變用戶所在組
在添加用戶時,可以指定將該用戶添加到哪個組中,同樣的用root的管理權(quán)限可以改變某個用戶所在的組。
#改變用戶所在組 usermod -g 組名 用戶名 #改變該用戶所在的組 usermod -d 目錄名 用戶名 #改變該用戶登錄的初始目錄#實例:創(chuàng)建一個土匪組(bandit),將tom這個用戶從原來所在的police組,修改到bandit(土匪)組。 groupadd bandit usermod -g bandit tom id tom #查看用戶3.5、權(quán)限的基本介紹
進入/home目錄 使用命令查看文件
ls -l以其中第一個apple.txt為例來解讀:
- rw- r-- r-- 1 tom root 0 Jun 20 00:02 apple.txt 1 2 3 4 5 6 7 8 9 10 #1 文件的類型 #[-:普通文件] #[d:目錄] #[l:軟鏈接] #[c:字符設(shè)備(鍵盤,鼠標(biāo))] #[b:快文件,硬盤]#2 表示文件/目錄所有者權(quán)限 #3 文件/目錄所在組的用戶的權(quán)限 #4 文件/目錄其它組的用戶的權(quán)限 #-----[r:可讀] #-----[w:可寫] #-----[x:] #-----[-:沒有權(quán)限]#5 #如果是文件,表示硬鏈接的數(shù) #如果是目錄,表示目錄的子目錄的個數(shù)#6 文件/目錄所在用戶 #7 文件/用戶所在組 #8 文件的大小,單位:字節(jié),,,如果是目錄,顯示4096 #9 文件/目錄最后的修改時間 #10 文件/目錄名3.6、rwx權(quán)限詳解
3.6.1、rwx作用在文件上
[r] 代表可讀(read):可以讀取、查看
[w]代表可寫(write):可以修改,但是不代表可以刪除該文件,刪除一個文件的前提條件是對該文件所在的目錄有寫權(quán)限,才能刪除該文件。
[x]代表可執(zhí)行(execute):可以被執(zhí)行
3.6.2、rwx作用到目錄上
[r]代表可讀(read):可以讀取,ls查看目錄內(nèi)容
[w]代表可寫(write):可以修改,目錄創(chuàng)建+刪除+重命名目錄
[x]代表可執(zhí)行(execute):可以進入該目錄
3.7、權(quán)限的管理
3.7.1、修改權(quán)限
通過chmod指令,可以修改文件或者目錄的權(quán)限。
3.7.1.1、使用+、-、=變更權(quán)限
#u:所有者(user) #g:所有組(group) #o:其他人(other) #a:所有人(all)(u、g、o的總和)chmod u=rwx,g=rx,o=x 文件目錄名 #表示給所有者讀、寫、執(zhí)行權(quán)限 ,給所有組讀和執(zhí)行權(quán)限,給其他人執(zhí)行權(quán)限chmod o+w 文件目錄名 #表示給其他人添加寫的權(quán)限chmod a-x 文件目錄名 #表示給所有人去除執(zhí)行的權(quán)限#案例 #1、給abc文件的所有者讀寫執(zhí)行的權(quán)限,給所有組讀執(zhí)行權(quán)限,給其他組讀執(zhí)行權(quán)限 chmod u=rwx,g=rx,o=rx abc #2、給abc文件的所有者除去執(zhí)行的權(quán)限,增加所有組寫的權(quán)限 chmod u-x,g+w abc #3、給abc文件的所有用戶添加讀的權(quán)限 chmod a+r abc3.7.1.2、使用數(shù)字變更權(quán)限
#規(guī)則 r=4 #二進制 100 w=2 #二進制 010 x=1 #二進制 001 rwx=4+2+1=7 chmod u=rwx,g=rx,o=x 文件目錄名 #相當(dāng)于 chmod 751 文件目錄名#案例:將/home/abc.txt文件的權(quán)限修改成rwxr-xr-x,使用數(shù)字的方式實現(xiàn) chmod 755 /home/abc.txt3.7.2、修改文件的所有者
chown newowner file #改變文件的所有者 chown newowner:newgroup file #改變用戶的所有者和所有組 -R #如果是目錄 則使其下所有子文件或目錄遞歸生效#案例 #1、請將/home/abc.txt文件的所有者修改成tom chown tom abc.txt #2、請將/home/kkk目錄下所有的文件和目錄的所有者都修改成tom chown -R tom kkk/3.7.3、修改文件所在的組
chgrp newgroup file #改變文件的所有組#案例 #1、將/home/abc.txt文件的所在組修改成bandit(土匪) chgrp bandit /home/abc.txt #2、將/home/kkk 目錄下所有的文件和目錄的所在組都修改成bandit(土匪) chgrp -R bandit /home/kkk3.7.4、最佳實踐-警察和土匪游戲
police , bandit
jack,jerry:警察
xh , xq:土匪
#1、創(chuàng)建組 groupadd police groupadd bandit#2、創(chuàng)建警察和土匪 useradd -g police -m jack useradd -g police -m jerry useradd -g bandit -m xh useradd -g bandit -m xq #-----給用戶設(shè)置密碼 passwd 用戶名#3、jack創(chuàng)建一個文件,自己可以讀寫,本組人可以讀,其它組沒有任何權(quán)限 #---切換到j(luò)ack用戶 touch jack.txt chmod o-r jack.txt #或 chmod 640 jack.txt#4、jack修改改文件,讓其他組人可以讀,本組人可以讀寫 chmod o=r,g=rw jack.txt #或 chmod 664 jack.txt#5、xh投靠 警察,看看是否可以讀寫 #----切換到root用戶 改變xh的組 usermod -g police xh4、crond 任務(wù)調(diào)度
4.1、概念
任務(wù)調(diào)度:是指系統(tǒng)在某個時間執(zhí)行的特定的命令或程序。
任務(wù)調(diào)度分類:1、系統(tǒng)工作:有些重要的工作必須周而復(fù)始的執(zhí)行。如病毒掃描等。2、個別用戶工作:個別用戶可能希望執(zhí)行某些程序,比如對mysql數(shù)據(jù)庫的備份。
4.2、指令
crontab [選項] #-e 編輯crontab定時任務(wù) #-l 查詢crontab任務(wù) #-r 刪除當(dāng)前用戶所有的crontab任務(wù)4.2.1、創(chuàng)建定時任務(wù)
crontab -e #然后進行編輯4.2.2、查看定時任務(wù)
crontab -l4.2.3、刪除所有定時任務(wù)
crontab -r4.2.4、重啟定時任務(wù)
service crond restart [重啟任務(wù)調(diào)度]4.3、快速入門
4.2.1、任務(wù)要求
設(shè)置任務(wù)調(diào)度文件:/etc/crontab
設(shè)置個人任務(wù)調(diào)度。執(zhí)行crontab -e 命令
接著輸入任務(wù)到調(diào)度文件
如:
*/1****ls -l /etc/>/tmp/to.txt #意思是說每小時的每分鐘執(zhí)行l(wèi)s -l /etc/ > /tmp/to.txt命令4.2.2、步驟如下(Ubuntu18)
crontab -e */1****ls -l /etc/>/tmp/to.txt按Ctry + X 退出 ,按 Y 確定退出 ,最后按回車
出現(xiàn)這一句,說明任務(wù)調(diào)度成功。
4.2.3、5個占位符說明
| 第一個 * | 一小時當(dāng)中的第幾分鐘 | 0-59 |
| 第二個 * | 一天當(dāng)中的第幾小時 | 0-23 |
| 第三個 * | 一個月當(dāng)中的第幾天 | 1-31 |
| 第四個 * | 一年當(dāng)中的第幾月 | 1-12 |
| 第五個 * | 一周當(dāng)中的星期幾 | 0-7(0和7都代表星期日) |
4.2.4、特殊符號說明
| * | 代表任何時間。比如第一個"*"就代表一小時中每分鐘都執(zhí)行一次的意思。 |
| , | 代表不連續(xù)的時間。比如"0 8,12,16 * * * * 命令",就代表在每天的8點0分、12點0分、16點0分都執(zhí)行一次命令 |
| - | 代表連續(xù)的時間范圍。比如"0 5 * * 1-6 命令",代表在周一到周六的凌晨5點0分執(zhí)行命令 |
| */n | 代表每隔多久執(zhí)行一次。比如"*/10 * * * * 命令",代表每個10分鐘就執(zhí)行一次命令 |
4.2.5、特定時間執(zhí)行任務(wù)案例
| 45 22 * * * 命令 | 在22點45分執(zhí)行命令 |
| 01 7 * * 1 命令 | 每周1的17點0分執(zhí)行命令 |
| 0 5 1,15 * * 命令 | 每月1號和15號的凌晨5點0分執(zhí)行命令 |
| 40 4 * * 1-5 命令 | 每周一到周五的凌晨4點40分執(zhí)行命令 |
| */10 4 * * * 命令 | 每天的凌晨4點,每隔10分鐘執(zhí)行一次命令 |
| 0 0 1,15 * 1 命令 | 每月1號和15號,每周1的0點0分都會執(zhí)行命令。 注意:星期幾和幾號最好不要同時出現(xiàn), 因為他們定義的都是天。非常容易讓管理員混亂。 |
4.4、應(yīng)用實例
4.4.1、案例一
每隔1分鐘,就將當(dāng)前的日期信息,追加到/home/mydate文件中
4.4.1.1、先編寫一個文件 mytask1.sh
date >> /home/mydate ls -l4.4.1.2、給mytask1.sh一個可執(zhí)行權(quán)限
chmod u+x mytask1.sh4.4.1.3、crontab -e
4.4.1.4、調(diào)用文件
*/1 * * * * /home/mytask1.sh4.4.2、案例二
每隔1分鐘,將當(dāng)前日期和日歷都追加到/home/mycal文件中
4.4.2.1、先編寫一個文件 mytask2.sh
date >> /home/mycal cal >> /home/mycal4.4.2.2、給mytask2.sh一個可執(zhí)行權(quán)限
chmod u=rwx mytask2.sh4.4.2.3、crontab -e
4.4.2.4、調(diào)用文件
*/1 * * * * /home/mytask2.sh4.4.3、案例三
每天凌晨2:00將mysql數(shù)據(jù)庫testdb,備份到文件/home/mydb.bak中。
4.4.3.1、先編寫一個文件 /home/mytask3.sh
/usr/local/mysql/bin/mysqldump -u root -p a testdb > /home/mydb.bak4.4.3.2、給mytask3.sh一個可以執(zhí)行權(quán)限
chmod 744 /home/mytask3.sh4.4.3.3、crontab -e
4.4.3.4、調(diào)用文件
*/1 * * * * /home/mytask3.sh5、Linux磁盤分區(qū)、掛載
5.1、分區(qū)基礎(chǔ)知識
5.1.1、分區(qū)的方式
5.1.1.1、mbr分區(qū)
-
最多支持四個主分區(qū)
-
系統(tǒng)只能安裝在主分區(qū)
-
擴展分區(qū)要占一個主分區(qū)
-
MBR最大只支持2TB,但擁有最好的兼容性
5.1.1.2、gpt分區(qū)
-
支持無限多個主分區(qū)(但操作系統(tǒng)可能限制,比如windows下最多128個分區(qū))
-
最大支持18EB的容量(1EB=1024PB , 1PB=1024TB)
-
windows7 64位以后支持gpt
5.2、Linux分區(qū)
lsblk -f #ls block 查看系統(tǒng)的分區(qū)和掛載的情況。5.2.1、原理介紹
- 對于Linux來說無論有幾個分區(qū),分給哪一目錄使用,它歸根結(jié)底就只有一個根目錄,一個獨立且唯一的文件結(jié)構(gòu),Linux中每個分區(qū)都是用來組成整個文件系統(tǒng)的一部分。
- Linux采用了一種叫“載入”的處理方法,它的整個文件系統(tǒng)中包含了一整套的文件和目錄,且將一個分區(qū)和一個目錄聯(lián)系起來。這時要載入的一個分區(qū)將使它的存儲空間在一個目錄下獲得。
- 示意圖
5.2.2、硬盤說明
- Linux硬盤分為IDE硬盤和SCSI硬盤,目前基本上是SCSI硬盤
- 對于IDE硬盤,驅(qū)動器標(biāo)識符為“hdx”,其中“hd”表示分區(qū)所在設(shè)備的類型,這里是指IDE硬盤了。“x”為潘浩(a為基本盤,b為基本從屬盤,c為輔助主盤,d為輔助從屬盤),“”代表分區(qū),前四個分區(qū)用數(shù)字1到4表示,它們是主分區(qū)或擴展分區(qū),從5開始就是邏輯分區(qū)。例:hda3表示為第一個IDE硬盤上的第三個主分區(qū)或擴展分區(qū),hdb2表示為第二個IDE硬盤上的第二個主分區(qū)或擴展分區(qū)。
- 對于SCSI硬盤則標(biāo)識為“sdx~”,SCSI硬盤是用“sd”來表示分區(qū)所在設(shè)備的類型的,其余則和IDE硬盤的表示方法一樣。
5.3、掛載的經(jīng)典案例
5.3.1、需求
給我們的Linux系統(tǒng)增加一個新的硬盤,并且掛載到/home/newdisk
5.3.2、實現(xiàn)
- 1、虛擬機添加硬盤
- 2、分區(qū)
- 3、格式化
- 4、掛載
- 5、設(shè)置可以自動掛載
5.3.2.1、虛擬機添加硬盤
在【虛擬機】菜單中,選擇【設(shè)置】,然后設(shè)備列表里添加硬盤,然后一路【下一步】,中間只有選擇磁盤大小的地方需要修改,直到完成。然后重啟系統(tǒng)(才能識別)!
5.3.2.2、分區(qū)
fdisk /dev/sdb m n p 1 Enter Enter w#m 顯示命令列表 #p 顯示磁盤分區(qū) 同 fdisk -l #n 新增分區(qū) #d 刪除分區(qū) #w 寫入并退出5.3.2.3、格式化
mkfs -t ext4 /dev/sdb1 #ext4 是分區(qū)類型5.3.2.4、掛載
先創(chuàng)建目錄
mkdir /home/newdisk掛載
mount /dev/sdb1 /home/newdisk#mount 設(shè)備名稱 掛載目錄 -------------掛載 #umount 設(shè)備名稱或者掛載目錄 ----------斷開掛載當(dāng)能看到這個目錄時,就意味著掛載成功了,但是如果重新啟動操作系統(tǒng),那么這個掛載會消失
5.3.2.5、設(shè)置可以自動掛載
設(shè)置永久掛載,當(dāng)重啟系統(tǒng)時,仍然可以掛載到 /home/newdisk
vim /etc/fstab這個文件中記錄了分區(qū)和掛載點的情況。
添加:
/dev/sdb1 /home/newdisk ext4 defaults 0 0啟動自動掛載:
mount -a # mount auto重啟操作系統(tǒng)
reboot發(fā)現(xiàn)掛載關(guān)系自動成立。
5.4、磁盤情況查詢
5.4.1、查詢系統(tǒng)整體磁盤使用情況
df -h df -l#-h 是human 適合人觀察的方式展現(xiàn)出來5.4.2、查詢指定目錄的磁盤占用情況
du -h /目錄 #查詢指定目錄的磁盤占用情況,默認為當(dāng)前目錄 # -s 指定目錄占用大小匯總 # -h 帶計量單位 # -a 含文件 # --max-depth=1 子目錄深度 # -c 列出明細的同時,增加匯總值#實例:查詢/opt目錄的磁盤占用情況,深度為1 du -ach --max-depth=1 /opt5.4.3、磁盤情況-工作實用指令
5.4.3.1、統(tǒng)計/home文件夾下文件的個數(shù)
ls -l /home | grep "^-" | wc -l # "^-" 以-開頭的是文件5.4.3.2、統(tǒng)計/home文件夾下目錄的個數(shù)
ls -l /home | grep "^d" | wc -l # "^d" 以d開頭的是目錄5.4.3.3、統(tǒng)計/home文件夾下文件的個數(shù),包括子文件夾里
ls -lR /home | grep "^-" | wc -l # "^-" 以-開頭的是文件 -R 遞歸5.4.3.4、統(tǒng)計/home文件夾下目錄的個數(shù),包括子文件夾里
ls -lR /home | grep "^d" | wc -l # "^d" 以d開頭的是目錄5.4.3.5、以樹狀顯示目錄結(jié)構(gòu)
tree /home6、網(wǎng)絡(luò)配置
6.1、Linux網(wǎng)絡(luò)配置原理圖
6.2、網(wǎng)絡(luò)IP和網(wǎng)關(guān)
6.2.1、查看虛擬網(wǎng)絡(luò)編輯器
6.2.2、修改IP地址(修改虛擬網(wǎng)卡的IP)
6.2.3、查看網(wǎng)關(guān)
6.2.4、查看windows環(huán)境中VMnet8網(wǎng)絡(luò)配置(ipconfig指令)
也可以通過界面查找
6.3、Linux網(wǎng)絡(luò)環(huán)境配置
6.3.1、指定固定IP
-
說明:直接修改配置文件來指定IP,并可以連接到外網(wǎng)(程序員推薦)
-
編輯:
#vim /etc/sysconfig/network-scripts/ifcfg-eth0 #ConOS vim /etc/network/interfaces #Ubuntu -
要求:將IP地址配置成靜態(tài)的,ip地址為192.168.184.130
這地方有問題 以后還要自己研究一下-----------------------------------------------------------------
7、進程管理
7.1、基本介紹
- 在Linux中,每個執(zhí)行的程序(代碼)都稱為一個進程。每一個進程都分配一個ID號。
- 每一個進程,都會對應(yīng)一個父進程,而這個父進程可以復(fù)制多個子進程。例如www服務(wù)器
- 每個進程都可能以兩種方式存在的。前臺與后臺(守護進程),所謂前臺進程就是用戶目前的屏幕上可以進行操作的。后臺進程則是實際在操作,但由于屏幕上無法看到的進程,通常使用后臺方式執(zhí)行。
- 一般系統(tǒng)的服務(wù)都是以后臺進程的方式存在,而且都會常駐在系統(tǒng)中。知道關(guān)機才能結(jié)束。
7.2、顯示系統(tǒng)執(zhí)行的進程
7.2.1、查看進程的相關(guān)指令
ps #查看目前系統(tǒng)中,有哪些正在執(zhí)行的進程,以及這些進程執(zhí)行的情況,可以不加任何參數(shù) ps -a #顯示當(dāng)前終端的所有進程信息 ps -u #以用戶的格式顯示進程信息 ps -x #顯示后臺進程運行的參數(shù) ps -aux #查看詳細信息 太多可以使用more分頁查看 ps -aux | more ps -aux | grep xxxx #使用grep 過濾查找 System V展示風(fēng)格- 指令說明
| USER | 用戶名稱 |
| PID | 進程號 |
| %CPU | 進程占用CPU百分比 |
| %MEM | 進程占用物理內(nèi)存百分比 |
| VSZ | 進程占用的虛擬內(nèi)存大小(單位:kb) |
| RSS | 進程占用的物理內(nèi)存大小(單位:kb) |
| TT | 終端名稱,縮寫 |
| STAT | 進程狀態(tài),其中S-睡眠, S-表示該進程是繪畫的先導(dǎo)進程, N-表示進程擁有比普通優(yōu)先級更低的優(yōu)先級, R-正在運行, D-短期等待, Z-僵死進程, T-被跟蹤或者被停止等待 |
| STARTED | 進程的啟動時間 |
| TIME | CPU時間,即進程使用CPU的總時間 |
| COMMAND | 啟動進程所用的命令和參數(shù),如果過長會被截斷顯示 |
7.2.2、查看父進程的相關(guān)指令
ps -ef #查看父進程 ps -ef | more #分頁查看 #-e 顯示所有進程 #-f 全格式ps -ef | grep xxx #是BSD風(fēng)格-
指令說明
參數(shù)說明 UID 用戶ID PID 進程ID PPID 父進程ID C CPU用于計算執(zhí)行優(yōu)先級的因子。數(shù)值越大,表名進程是CPU密集型運算,執(zhí)行優(yōu)先級會降低;數(shù)值越小,表名進程是I/O密集型運算,執(zhí)行優(yōu)先級會提高 STIME 進程啟動的時間 TTY 完成的終端名稱 TIME CPU時間 CMD 啟動進程所用的命令和參數(shù)
7.3、終止進程kill和killall
-
介紹:若是某個進程執(zhí)行一般需要停止時,或是已消耗了很大的系統(tǒng)資源時,此時可以考慮停止該進程。使用kill命令來完成此項任務(wù)。
kill [選項] 進程號 #通過進程號殺死進程 killall 進程名稱 #通過進程名稱殺死進程,也支持通配符,這在系統(tǒng)因負載過大而變得很慢時很有用 #常用選項 -9 表示強迫進程立即停止
7.4、進程的監(jiān)控
top [選項] #-d 秒數(shù) 指定top命令每隔幾秒更新。默認是3秒在top命令的交互模式當(dāng)中可以執(zhí)行的命令 #-i 使top不顯示任何閑置或者僵死的進程。 #-p 通過指定監(jiān)控進程ID來僅僅監(jiān)控某個進程的狀態(tài) #交互操作: #u 回車,再輸入用戶名-----------------專門監(jiān)控某個用戶 #k 回車,再輸入要結(jié)束的進程ID號--------終止指定的進程 #P 以CPU使用率排序,默認就是此項 #M 以內(nèi)存的使用率排序 #N 以PID排序 #q 退出topnetstat [選項] #查看網(wǎng)絡(luò)情況 #-an 按一定順序排列輸出 #-p 顯示哪個進程在調(diào)用 netstat -anp | more #查看所有的網(wǎng)絡(luò)服務(wù)8、服務(wù)(Service)管理
8.1、介紹
服務(wù)(Service)本質(zhì)就是進程,但是是運行在后臺的,通常都會監(jiān)聽某個端口,等待其他程序的請求,比如(mysql,sshd防火墻等),因此我們又稱為守護進程,是Linux中非常重要的知識點。【原理圖】
8.2、service管理指令
#service 服務(wù)名 [start | stop | restart | reload | status] systemctl 服務(wù)名 [start | stop | restart | reload | status]#實例1:查看當(dāng)前防火墻的情況,關(guān)閉防火墻和重啟防火墻 service iptables status #ContOS service iptables restart #ContOS這地方還是有問題 稍后自行研究.............................8.3、查看linux提供的服務(wù)
ls -l /etc/init.d8.4、給服務(wù)的各個運行級別設(shè)置自 啟動/關(guān)閉
chkconfigchkconfig --list | grep xxx #查看服務(wù) ContOS chkconfig 服務(wù)名 --list chkconfig --level 5 服務(wù)名 on/off9、Shell編程
9.1、為什么要學(xué)習(xí)Shell編程
- Linux運維工程師在進行服務(wù)器集群管理時,需要編寫Shell程序來進行服務(wù)器管理
- 對于JavaEE和python程序員來說,工作的需要,你的老大會要求你編寫一些Shell腳本進行程序或者是服務(wù)器的維護,比如編寫一個定時備份數(shù)據(jù)庫的腳本。
- 對于大數(shù)據(jù)程序員來說,需要編寫Shell程序來管理集群。
9.2、Shell是什么
Shell是一個命令行解釋器, 它為用戶提供了一個向Linux內(nèi)核發(fā)送請求以便運行程序的界面系統(tǒng)級程序,用戶可以用Shell來啟動、掛起、停止甚至是編寫一些程序。
9.3、Shell腳本的執(zhí)行方式(fast start)
-
多行注釋
:<<! ..... ! -
腳本以 #!/bin/bash 開頭(指定用什么進行解析)
-
腳本的編寫:
vim hello.sh #創(chuàng)建一個shell腳本 腳本的后綴是什么都可以,沒有也行,一般為.sh #編輯 #!/bin/bash #指定使用bash解析 echo "hello world!" #輸出hello world#保存并退出 -
腳本的執(zhí)行
-
第一種方式:
sh hello.sh sh ./hello.sh sh /home/hello.sh -
第二種方式:
先給hello.sh腳本加可執(zhí)行權(quán)限,然后再直接執(zhí)行
chmod u+x hello.sh ./hello.sh #相對路徑 #或 /home/hello.sh #絕對路徑
-
9.4、Shell變量
9.4.1、Shell的變量的介紹
-
Linux Shell 中的變量分為,系統(tǒng)變量和用戶自定義變量。
-
系統(tǒng)變量:HOME、HOME 、HOME、PWD、SHELL、SHELL、SHELL、USER等等
比如:echo $HOME 等用法
-
顯示當(dāng)前shell中所有的變量: set
9.4.2、shell變量的定義
9.4.2.1、規(guī)則
變量=值 #定義變量 注意:中間不能用空格隔開 unset 變量 #撤銷變量 readonly 變量 #聲明靜態(tài)變量 注意:靜態(tài)變量不能unset- 變量名稱可以由字母、數(shù)字和下劃線組成,但是不能以數(shù)字開頭。
- 等號兩側(cè)不能有空格
- 變量名稱一般習(xí)慣為大寫
9.4.2.2、普通變量
##定義變量 #!/bin/bash a=11 #定義變量a echo "a = $a" #輸出aunset a #撤銷變量a echo "unset a = $a" #輸出a結(jié)果:
9.4.2.3、靜態(tài)變量
##聲明靜態(tài)變量 #!/bin/bash readonly A=12 echo "readonly A = $A"unset A echo "readonly A2 = $A"結(jié)果:
9.4.2.4、將命令的返回值賦值給變量(重點)
A=`ls -la` #反引號,運行里面的命令,并把結(jié)果返回給變量A A=$(ls -la) #等價于反引號 ###實例 #!/bin/bash A=`date` echo "A = $A"echo "----------------"B=$(date) echo "B = $B"結(jié)果:
9.4.3、設(shè)置環(huán)境變量
export 變量名=變量值 #將shell變量輸出為環(huán)境變量 source 配置文件 #讓修改后的配置信息立即生效 echo $變量名 #查詢環(huán)境變量的值 ###實例 #1、在/home/shell/tomcat.sh文件中定義TOMCAT_HOME環(huán)境變量 #!/bin/bash export TOMCAT_HOME="hello,my name is tomcat!"#2、查看環(huán)境變量TOMCAT_HOME的值 source /home/shell/tomcat.sh echo $TOMCAT_HOME#3、在另外一個shell程序(/home/shell/usetomcat.sh)中使用TOMCAT_HOME #!/bin/bash A=$TOMCAT_HOME echo "A = $A"9.4.4、位置參數(shù)變量
9.4.4.1、介紹
當(dāng)我們執(zhí)行一個shell腳本時,如果希望獲取到命令行的參數(shù)信息,就可以使用到位置參數(shù)變量
比如:
./myshell.sh 100 200 #這個就是一個執(zhí)行shell的命令行,可以在myshell腳本中獲取到參數(shù)信息,類似于python的cmd傳參9.4.4.2、基本語法
$n #n為數(shù)字,$0代表命令本身,$1-$9代表第一到第九個參數(shù),十以上的參數(shù)需要用大括號包含,如{10} $* #這個變量代表命令行中所有的參數(shù),$*把所有的參數(shù)看成一個整體 $@ #這個變量也代表命令行中所有的參數(shù),不過$@把每個參數(shù)區(qū)分對待 $# #這個變量代表命令行中所有參數(shù)的個數(shù) #實例:寫一個腳本 打印出傳遞進去的11個參數(shù)及詳細 #!/bin/bash echo "param[0] ---- $0" echo "param[1] ---- $1" echo "param[2] ---- $2" echo "param[3] ---- $3" echo "param[4] ---- $4" echo "param[5] ---- $5" echo "param[6] ---- $6" echo "param[7] ---- $7" echo "param[8] ---- $8" echo "param[9] ---- $9" echo "param[10] ---- ${10}" echo "param[11] ---- ${11}"echo "param count is $#" echo "param ----------- $@" echo "param =========== $*"結(jié)果:
9.4.5、預(yù)定義變量
-
就是shell設(shè)計者實現(xiàn)一鍵定義好的變量,可以直接在shell腳本中使用
- $$ #當(dāng)前進程的進程號(PID) $! #當(dāng)前運行的最后一個進程的進程號(PID) $? #最后一次執(zhí)行的命令的返回狀態(tài)。如果這個變量的值為0,證明上一個命令正確執(zhí)行;如果這個變量的值為非0(具體是哪個數(shù),由命令自己來決定),則證明上一個命令執(zhí)行不正確了。
-
應(yīng)用實例:在一個shell腳本中簡單使用一下預(yù)定義變量
#!/bin/bash echo "當(dāng)前進程的進程號 = $$" #后臺的方式運行tomcat.sh ./tomcat.sh & #后臺運行echo "當(dāng)前運行的最后一個進程的進程號 = $!" echo "最后一次執(zhí)行的命令的返回狀態(tài) = $?"結(jié)果:
9.5、運算符
$((運算式)) #或 $[運算式] expr m + n #加 expr m - n #減 expr \* #乘 expr / #除 expr % #取余案例1:
#!/bin/bash M=100 N=5echo "M + N = $((M + N))"echo "M - N = $[M - N]" MN1=`expr $M \* $N` echo "M * N = $MN1"C=`expr $M / $N` echo "M / N = $C"D=`expr $M % $N` echo "M % N = $D"結(jié)果:
案例二:求出命令行輸入兩個參數(shù)的和
#!/bin/bash A=$1 B=$2 SUM=$[A+B] echo "sum = $SUM"結(jié)果:
9.6、條件判斷
[ condition ] #非空返回true 可使用$?嚴重(0位true,>1為false) 注意:condition前后要有空格常用判斷條件
- 兩個整數(shù)的比較
| = | 字符串比較 |
| -lt | 小于 |
| -le | 小于等于 |
| -eq | 等于 |
| -gt | 大于 |
| -ge | 大于等于 |
| -ne | 不等于 |
- 按照文件權(quán)限進行判斷
| -r | 有讀的權(quán)限 |
| -w | 有寫的權(quán)限 |
| -x | 有執(zhí)行的權(quán)限 |
- 按照文件類型進行判斷
| -f | 文件存在并且是一個常規(guī)的文件 |
| -e | 文件存在 |
| -d | 文件存在并是一個目錄 |
9.7、流程控制
9.7.1、if
if [ 條件判斷式 ];then程序 fi###或者if [ 條件判斷式 ] then程序 elif [ 條件判斷式 ] then程序 fi #編寫sh腳本 輸入?yún)?shù),參數(shù)>=60,打印"及格了",參數(shù)<60,打印"不及格" #!/bin/bash if [ $1 -ge 60 ] thenecho "及格了" elif [ $1 -lt 60 ] thenecho "不及格" fi9.7.2、case
case $變量名 in "值1") 程序1 ;; "值2") 程序2 ;; .......... "值n") 程序n ;; *) 如果變量的值都不是以上的值,則執(zhí)行此程序 ;; esac #實例#!/bin/bash case $1 in1)echo "一";;2) echo "二";;3) echo "三";;*) echo "其他";; esac9.7.3、for循環(huán)
#語法一 for 變量 in 值1 值2 ... 值n do程序 done#實例:打印命令行輸入的參數(shù) $* $@ #!/bin/bash for i in "$*" doecho "the num is $i" doneecho "-------------------------"for j in "$@" doecho "the num is $j" done #語法二 for((初始值;循環(huán)控制條件;變量變化)) do程序 done#實例:從1加到100并輸出結(jié)果 #!/bin/bash SUM=0 for((i=1;i<=100;i++)) doSUM=$[$SUM+$i] done echo "最終結(jié)果是:$SUM"9.7.4、while循環(huán)
while [ 條件判斷式 ] do程序 done#案例:從命令行輸入一個n,統(tǒng)計從1+...+n的值是多少 #!/bin/bash SUM=0 i=0 while [ $i -le $1 ] doSUM=$[$SUM+$i]i=$[$i+1] done echo "sum = $SUM"9.8、read讀取控制臺輸入
read 選項 參數(shù) #-p 指定讀取值時的提示符(阻塞) #-t 指定讀取值時等待的時間(秒),如果沒有在指定的時間內(nèi)輸入,就不再等待了 #案例1:讀取控制臺輸入一個num值 #!/bin/bash read -p "請輸入一個數(shù):" NUM1 echo "你輸入的值是:$NUM1"#案例2:讀取控制臺輸入一個num值,在10秒內(nèi)輸入。 #!/bin/bash read -t 10 -p "請輸入一個數(shù):" NUM1 echo "你輸入的值是:$NUM1"9.9、函數(shù)
9.9.1、系統(tǒng)函數(shù)
basename [pathname] [suffix] #返回完整路徑最后/的部分,常用于獲取文件名 #basename命令會刪掉所有的前綴包括最后一個("/")字符,然后將字符串顯示出來#案例:請返回/home/shell/hello.sh的"hello.sh"部分 basename /home/shell/hello.sh #shell腳本中: echo `basename /home/shell/hello.sh`#案例:請返回/home/shell/hello.sh的"hello"部分 basename /home/shell/hello.sh .sh #shell腳本中: echo `basename /home/shell/hello.sh .sh` dirname 文件絕對路徑 #返回完整路徑最后/的前面的部分,常用于返回路徑部分 #從給定的包含絕對路徑的文件名中去除文件名(非目錄的部分),然后返回剩下的路徑(目錄的部分)#實例:請返回/home/shell/hello.sh的/home/shell dirname /home/shell/hello.sh #shell腳本中: echo `dirname /home/shell/hello.sh`9.9.2、自定義函數(shù)
function funname() {Action;[return int;] }#應(yīng)用實例:編寫一個函數(shù),計算兩個參數(shù)的和,getSum function getSum() {SUM=$[$n1+$n2]echo "和是:$SUM" } read -p "請輸入第一個數(shù) n1:" n1 read -p "請輸入第二個數(shù) n2:" n2getSum $n1 $n29.10、Shell編程綜合案例
9.10.1、需求:
- 每天凌晨2:10備份數(shù)據(jù)庫 kugou 到 /home/mysql/data/db
- 備份開始和備份結(jié)束能夠給出相應(yīng)的提示信息
- 備份后的文件要求以備份時間為文件名,并打包成.tar.gz的形式,比如:2019-6-15_222222.tar.gz
- 在備份的同時,檢查是否有10天前備份的數(shù)據(jù)庫文件,如果有就將其刪除。
9.10.2、實現(xiàn)
9.10.2.1、寫腳本
/home/shell/testmysql.sh
#!/bin/bash #完成數(shù)據(jù)庫的定時備份echo "=========開始備份=========="#備份的路徑 BACKUP=/home/mysql/data/db echo "備份的路徑:${BACKUP}"#獲取到當(dāng)前的時間 DATETIME=$(date +%Y-%m-%d_%H%M%S) echo "當(dāng)前時間:${DATETIME}"#主機 HOST=localhost echo "主機:${HOST}"#用戶名 DB_USER=yxh_mysql echo "用戶名:${DB_USER}"#密碼 DB_PWD=a echo "密碼:${DB_PWD}"#備份數(shù)據(jù)庫名 DATABASE=shelltest echo "備份數(shù)的據(jù)庫名:${DATABASE}"#創(chuàng)建備份路徑 #如果備份路徑存在,就使用,否則就創(chuàng)建 [ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"#執(zhí)行mysql的備份數(shù)據(jù)庫命令 mysqldump -u${DB_USER} -p$DB_PWD --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz#打包備份文件 cd ${BACKUP} tar -zcvf $DATETIME.tar.gz $DATETIME#刪除臨時目錄 rm -rf $BACKUP/$DATETIME#刪除10天前的備份文件 find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;echo "=========備份完成========"9.10.2.2、定時
crontab -e10 2 * * * /home/shell/testmysql.sh總結(jié)
以上是生活随笔為你收集整理的Linux学习笔记(详细)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 帆软报表(finereport)控件背景
- 下一篇: Java的三种代理模式完整源码分析