日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux学习笔记(详细)

發(fā)布時間:2023/12/9 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux学习笔记(详细) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、vi 和 vim編輯器

1.1、簡介

所有的Linux系統(tǒng)都會內(nèi)建vi文本編輯器。

vim具有程序編輯的能力,可以看做是vi的增強版本,可以主動的以字體顏色辨別語法的正確性,方便程序設計。代碼補完、編譯及錯誤跳轉(zhuǎn)等方便編程的功能特別豐富,在程序員中被廣泛使用。

1.2、vi和vim常用的三種模式

1.2.1、正常模式

以vim打開一個檔案就直接進入一般模式了(這是默認的模式)。在這個模式種,你可以使用【上下左右】按鍵移動光標,你可以使用【刪除字符】或【刪除整行】來處理檔案內(nèi)容,也可以使用【復制、貼上】來處理你的文件數(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 #進入輸入模式 光標前進一位 ESC #退出輸入模式 wq #保存并退出 q #退出 q! #強制退出

1.3、vi和vim快捷鍵

1.3.1、復制

#復制 yy(正常模式) #拷貝當前行 p(正常模式) #粘貼 5yy(正常模式) #拷貝當前行向下5行

1.3.2、刪除

#刪除 dd(正常模式) #刪除一行 5dd(正常模式) #刪除當前行向下的5行

1.3.3、查找

#查找 /hello + 回車(正常模式) #查找關(guān)鍵字hello n(正常模式) #查找下一個

1.3.4、行號

#文件的行號 :set nu(命令模式) #設置行號 :set nonu(命令模式) #取消行號

1.3.5、行首/行末

#跳轉(zhuǎn)到最末行 G(正常模式) #跳轉(zhuǎn)到最首行 gg(正常模式)

1.3.6、撤銷

#撤銷 u(正常模式)

1.3.7、將光標移到第n行

#將光標移到第10行 #1、顯示行號 :set nu (命令模式) #2、輸入10 (正常模式) #3、輸入shift+g (正常模式)

2、實用指令

pwd #查看當前所在目錄

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)是一個多用戶多任務的操作系統(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的目錄

當創(chuàng)建用戶成功后,會自動的創(chuàng)建和用戶同名的家目錄

2.3.2、刪除用戶

userdel 用戶名 #刪除用戶 但是保存用戶家目錄 userdel -r 用戶名 #刪除用戶 同時刪除用戶家目錄

刪除用戶時,一般不將用戶家目錄刪除

2.3.3、設置密碼

passwd 用戶名

2.3.4、查看用戶

w #查看用戶列表id 用戶名 #查看指定用戶信息whoami #查看當前用戶名who am i #查看當前登錄用戶名

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)的配置文件,記錄用戶的各種信息

每行的含義:用戶名:口令:用戶標識號:組標識號:注釋性描述:主目錄:登錄Shell

2.4.4.2、組配置文件(組信息)/etc/group

組(group)的配置文件,記錄Linux包含的組的信息

每行含義:組名:口令:組標識號:組內(nèi)用戶列表

2.4.4.3、口令配置文件(密碼和登錄信息,是加密)/etc/shadow

口令的配置文件

每行的含義:登錄名:加密口令:最后一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標志

2.5、指定運行級別

運行級別說明:

0:關(guān)機

1:單用戶【找回丟失密碼】

2:多用戶狀態(tài)無網(wǎng)絡服務

3:多用戶狀態(tài)有網(wǎng)絡服務

4:系統(tǒng)未使用保留給用戶

5:圖形界面

6:系統(tǒng)重啟

常用運行級別是3和5,要修改默認的運行級別可改文件/etc/inittab的id:5:initdefault:這一行中的數(shù)字

命令:

init[0123456] #切換到制定運行級別的指令 如:切換到5 init 5

2.6、進入單用戶找回密碼

注意:只有在裝有Linux系統(tǒng)的主機上操作,才可以進入單用戶修改密碼(云服務器另有提供方式)。

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/bash

2.6.5、按ctrl+x或F10啟動系統(tǒng)就可以進入single模式而不需要密碼了。

2.7、幫助指令

當我們對某個指令不熟悉時,我們可以使用Linux提供的幫助指令來了解這個指令的使用方法。

2.7.1、man

man [命令或配置文件] #獲得幫助信息#案例:查看ls命令的幫助信息 man ls

2.7.2、help

#實例:查看cd的用法 help cd #獲得shell內(nèi)置命令的幫助信息

2.8、文件目錄類

2.8.1、pwd

pwd #顯示當前工作目錄的絕對路徑

2.8.2、ls

ls [選擇] [目錄或是文件] #顯示當前目錄下的目錄和文件 #-a 顯示當前目錄所有的文件和目錄,包括影藏的 #-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是目標路徑 #-r 遞歸復制整個文件夾 #\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、將當前日歷信息追加到/home/mycal文件中 cal >> /home/mycal

2.8.12、echo

echo [選擇] [輸出內(nèi)容] #輸出內(nèi)容到控制臺 #經(jīng)常使用echo指令輸出環(huán)境變量 echo $PATH

2.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)建一個軟鏈接(相當于給源文件創(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 #顯示當前時間 date +%Y #顯示當前年份 date +%m #顯示當前月份 date +%d #顯示當前是哪一天 date "+%Y-%m-%d %H:%M:%S" #顯示年月日時分秒 date -s 字符串時間 #設置系統(tǒng)當前時間 date -s "2019-06-19 10:03:00"

2.9.2、cal

cal #查看當前日歷 cal [選項] #顯示選擇的年份的所有日歷 cal 2019

2.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 *.txt

2.10.2、locate

#locate指令 可以快速定位文件路徑。locate指令利用事先建立的系統(tǒng)中所有文件名稱及路徑的locate數(shù)據(jù)庫實現(xiàn)快速定位給定的文件。locate指令無需遍歷整個文件系統(tǒng),查詢速度較快。為了保證查詢結(jié)果的準確度,管理員必須頂起更新locate時刻。 locate 搜索文件 #由于locate指令基于數(shù)據(jù)庫進行查詢,所以第一次運行前。必須使用updatedb指令創(chuàng)建locate數(shù)據(jù)庫#使用locate指令快速定位hello.txt文件所在目錄 updatedb locate hello.txt

2.10.3、grep & 管道符號 |

#grep過濾查找 #管道符 "|" ,表示將前一個命令的處理結(jié)果,輸出傳遞給后面的命令處理。grep [選項] 查找內(nèi)容 源文件#選項 # -n 顯示匹配行及行號 # -i 忽略字母大小寫#應用實例 : 請在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解壓到當前目錄下 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,看看當前這個文件屬于哪個組,然后將這個文件所在組,修改到police組。 touch /home/orange.txt ls -ahl

chgrp police /home/orange.txt ls -ahl

3.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:字符設備(鍵盤,鼠標)] #[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 abc

3.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 文件目錄名 #相當于 chmod 751 文件目錄名#案例:將/home/abc.txt文件的權(quán)限修改成rwxr-xr-x,使用數(shù)字的方式實現(xiàn) chmod 755 /home/abc.txt

3.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/kkk

3.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 #-----給用戶設置密碼 passwd 用戶名#3、jack創(chuàng)建一個文件,自己可以讀寫,本組人可以讀,其它組沒有任何權(quán)限 #---切換到jack用戶 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 xh

4、crond 任務調(diào)度

4.1、概念

任務調(diào)度:是指系統(tǒng)在某個時間執(zhí)行的特定的命令或程序。

任務調(diào)度分類:1、系統(tǒng)工作:有些重要的工作必須周而復始的執(zhí)行。如病毒掃描等。2、個別用戶工作:個別用戶可能希望執(zhí)行某些程序,比如對mysql數(shù)據(jù)庫的備份。

4.2、指令

crontab [選項] #-e 編輯crontab定時任務 #-l 查詢crontab任務 #-r 刪除當前用戶所有的crontab任務

4.2.1、創(chuàng)建定時任務

crontab -e #然后進行編輯

4.2.2、查看定時任務

crontab -l

4.2.3、刪除所有定時任務

crontab -r

4.2.4、重啟定時任務

service crond restart [重啟任務調(diào)度]

4.3、快速入門

4.2.1、任務要求

設置任務調(diào)度文件:/etc/crontab

設置個人任務調(diào)度。執(zhí)行crontab -e 命令

接著輸入任務到調(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)這一句,說明任務調(diào)度成功。

4.2.3、5個占位符說明

項目含義范圍
第一個 *一小時當中的第幾分鐘0-59
第二個 *一天當中的第幾小時0-23
第三個 *一個月當中的第幾天1-31
第四個 *一年當中的第幾月1-12
第五個 *一周當中的星期幾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í)行任務案例

時間含義
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、應用實例

4.4.1、案例一

每隔1分鐘,就將當前的日期信息,追加到/home/mydate文件中

4.4.1.1、先編寫一個文件 mytask1.sh

date >> /home/mydate ls -l

4.4.1.2、給mytask1.sh一個可執(zhí)行權(quán)限

chmod u+x mytask1.sh

4.4.1.3、crontab -e

4.4.1.4、調(diào)用文件

*/1 * * * * /home/mytask1.sh

4.4.2、案例二

每隔1分鐘,將當前日期和日歷都追加到/home/mycal文件中

4.4.2.1、先編寫一個文件 mytask2.sh

date >> /home/mycal cal >> /home/mycal

4.4.2.2、給mytask2.sh一個可執(zhí)行權(quán)限

chmod u=rwx mytask2.sh

4.4.2.3、crontab -e

4.4.2.4、調(diào)用文件

*/1 * * * * /home/mytask2.sh

4.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.bak

4.4.3.2、給mytask3.sh一個可以執(zhí)行權(quán)限

chmod 744 /home/mytask3.sh

4.4.3.3、crontab -e

4.4.3.4、調(diào)用文件

*/1 * * * * /home/mytask3.sh

5、Linux磁盤分區(qū)、掛載

5.1、分區(qū)基礎知識

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ū)動器標識符為“hdx”,其中“hd”表示分區(qū)所在設備的類型,這里是指IDE硬盤了。“x”為潘浩(a為基本盤,b為基本從屬盤,c為輔助主盤,d為輔助從屬盤),“”代表分區(qū),前四個分區(qū)用數(shù)字1到4表示,它們是主分區(qū)或擴展分區(qū),從5開始就是邏輯分區(qū)。例:hda3表示為第一個IDE硬盤上的第三個主分區(qū)或擴展分區(qū),hdb2表示為第二個IDE硬盤上的第二個主分區(qū)或擴展分區(qū)。
  • 對于SCSI硬盤則標識為“sdx~”,SCSI硬盤是用“sd”來表示分區(qū)所在設備的類型的,其余則和IDE硬盤的表示方法一樣。

5.3、掛載的經(jīng)典案例

5.3.1、需求

給我們的Linux系統(tǒng)增加一個新的硬盤,并且掛載到/home/newdisk

5.3.2、實現(xiàn)

  • 1、虛擬機添加硬盤
  • 2、分區(qū)
  • 3、格式化
  • 4、掛載
  • 5、設置可以自動掛載

5.3.2.1、虛擬機添加硬盤

在【虛擬機】菜單中,選擇【設置】,然后設備列表里添加硬盤,然后一路【下一步】,中間只有選擇磁盤大小的地方需要修改,直到完成。然后重啟系統(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 設備名稱 掛載目錄 -------------掛載 #umount 設備名稱或者掛載目錄 ----------斷開掛載

當能看到這個目錄時,就意味著掛載成功了,但是如果重新啟動操作系統(tǒng),那么這個掛載會消失

5.3.2.5、設置可以自動掛載

設置永久掛載,當重啟系統(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 /目錄 #查詢指定目錄的磁盤占用情況,默認為當前目錄 # -s 指定目錄占用大小匯總 # -h 帶計量單位 # -a 含文件 # --max-depth=1 子目錄深度 # -c 列出明細的同時,增加匯總值#實例:查詢/opt目錄的磁盤占用情況,深度為1 du -ach --max-depth=1 /opt

5.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 /home

6、網(wǎng)絡配置

6.1、Linux網(wǎng)絡配置原理圖

6.2、網(wǎng)絡IP和網(wǎng)關(guān)

6.2.1、查看虛擬網(wǎng)絡編輯器

6.2.2、修改IP地址(修改虛擬網(wǎng)卡的IP)

6.2.3、查看網(wǎng)關(guān)

6.2.4、查看windows環(huán)境中VMnet8網(wǎng)絡配置(ipconfig指令)

也可以通過界面查找

6.3、Linux網(wǎng)絡環(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

vim /etc/network/interfaces#靜態(tài)分配的配置方法 auto eth0 iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.1 #保存退出#重啟網(wǎng)絡服務 service network restart

這地方有問題 以后還要自己研究一下-----------------------------------------------------------------

7、進程管理

7.1、基本介紹

  • 在Linux中,每個執(zhí)行的程序(代碼)都稱為一個進程。每一個進程都分配一個ID號。
  • 每一個進程,都會對應一個父進程,而這個父進程可以復制多個子進程。例如www服務器
  • 每個進程都可能以兩種方式存在的。前臺后臺(守護進程),所謂前臺進程就是用戶目前的屏幕上可以進行操作的。后臺進程則是實際在操作,但由于屏幕上無法看到的進程,通常使用后臺方式執(zhí)行。
  • 一般系統(tǒng)的服務都是以后臺進程的方式存在,而且都會常駐在系統(tǒng)中。知道關(guān)機才能結(jié)束。

7.2、顯示系統(tǒng)執(zhí)行的進程

7.2.1、查看進程的相關(guān)指令

ps #查看目前系統(tǒng)中,有哪些正在執(zhí)行的進程,以及這些進程執(zhí)行的情況,可以不加任何參數(shù) ps -a #顯示當前終端的所有進程信息 ps -u #以用戶的格式顯示進程信息 ps -x #顯示后臺進程運行的參數(shù) ps -aux #查看詳細信息 太多可以使用more分頁查看 ps -aux | more ps -aux | grep xxxx #使用grep 過濾查找 System V展示風格

  • 指令說明
參數(shù)說明
USER用戶名稱
PID進程號
%CPU進程占用CPU百分比
%MEM進程占用物理內(nèi)存百分比
VSZ進程占用的虛擬內(nèi)存大小(單位:kb)
RSS進程占用的物理內(nèi)存大小(單位:kb)
TT終端名稱,縮寫
STAT進程狀態(tài),其中S-睡眠,
S-表示該進程是繪畫的先導進程,
N-表示進程擁有比普通優(yōu)先級更低的優(yōu)先級,
R-正在運行,
D-短期等待,
Z-僵死進程,
T-被跟蹤或者被停止等待
STARTED進程的啟動時間
TIMECPU時間,即進程使用CPU的總時間
COMMAND啟動進程所用的命令和參數(shù),如果過長會被截斷顯示

7.2.2、查看父進程的相關(guān)指令

ps -ef #查看父進程 ps -ef | more #分頁查看 #-e 顯示所有進程 #-f 全格式ps -ef | grep xxx #是BSD風格
  • 指令說明

    參數(shù)說明
    UID用戶ID
    PID進程ID
    PPID父進程ID
    CCPU用于計算執(zhí)行優(yōu)先級的因子。數(shù)值越大,表名進程是CPU密集型運算,執(zhí)行優(yōu)先級會降低;數(shù)值越小,表名進程是I/O密集型運算,執(zhí)行優(yōu)先級會提高
    STIME進程啟動的時間
    TTY完成的終端名稱
    TIMECPU時間
    CMD啟動進程所用的命令和參數(shù)

7.3、終止進程kill和killall

  • 介紹:若是某個進程執(zhí)行一般需要停止時,或是已消耗了很大的系統(tǒng)資源時,此時可以考慮停止該進程。使用kill命令來完成此項任務。

    kill [選項] 進程號 #通過進程號殺死進程 killall 進程名稱 #通過進程名稱殺死進程,也支持通配符,這在系統(tǒng)因負載過大而變得很慢時很有用 #常用選項 -9 表示強迫進程立即停止

7.4、進程的監(jiān)控

top [選項] #-d 秒數(shù) 指定top命令每隔幾秒更新。默認是3秒在top命令的交互模式當中可以執(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)絡情況 #-an 按一定順序排列輸出 #-p 顯示哪個進程在調(diào)用 netstat -anp | more #查看所有的網(wǎng)絡服務

8、服務(Service)管理

8.1、介紹

服務(Service)本質(zhì)就是進程,但是是運行在后臺的,通常都會監(jiān)聽某個端口,等待其他程序的請求,比如(mysql,sshd防火墻等),因此我們又稱為守護進程,是Linux中非常重要的知識點。【原理圖】

8.2、service管理指令

#service 服務名 [start | stop | restart | reload | status] systemctl 服務名 [start | stop | restart | reload | status]#實例1:查看當前防火墻的情況,關(guān)閉防火墻和重啟防火墻 service iptables status #ContOS service iptables restart #ContOS這地方還是有問題 稍后自行研究.............................

8.3、查看linux提供的服務

ls -l /etc/init.d

8.4、給服務的各個運行級別設置自 啟動/關(guān)閉

chkconfigchkconfig --list | grep xxx #查看服務 ContOS chkconfig 服務名 --list chkconfig --level 5 服務名 on/off

9、Shell編程

9.1、為什么要學習Shell編程

  • Linux運維工程師在進行服務器集群管理時,需要編寫Shell程序來進行服務器管理
  • 對于JavaEE和python程序員來說,工作的需要,你的老大會要求你編寫一些Shell腳本進行程序或者是服務器的維護,比如編寫一個定時備份數(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 、HOMEPWD、SHELL、SHELL、SHELLUSER等等

    比如:echo $HOME 等用法

  • 顯示當前shell中所有的變量: set

9.4.2、shell變量的定義

9.4.2.1、規(guī)則

變量=#定義變量 注意:中間不能用空格隔開 unset 變量 #撤銷變量 readonly 變量 #聲明靜態(tài)變量 注意:靜態(tài)變量不能unset
  • 變量名稱可以由字母、數(shù)字和下劃線組成,但是不能以數(shù)字開頭。
  • 等號兩側(cè)不能有空格
  • 變量名稱一般習慣為大寫

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、設置環(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、介紹

當我們執(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、預定義變量

  • 就是shell設計者實現(xiàn)一鍵定義好的變量,可以直接在shell腳本中使用

  • $$ #當前進程的進程號(PID) $! #當前運行的最后一個進程的進程號(PID) $? #最后一次執(zhí)行的命令的返回狀態(tài)。如果這個變量的值為0,證明上一個命令正確執(zhí)行;如果這個變量的值為非0(具體是哪個數(shù),由命令自己來決定),則證明上一個命令執(zhí)行不正確了。
  • 應用實例:在一個shell腳本中簡單使用一下預定義變量

    #!/bin/bash echo "當前進程的進程號 = $$" #后臺的方式運行tomcat.sh ./tomcat.sh & #后臺運行echo "當前運行的最后一個進程的進程號 = $!" 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文件存在并是一個目錄
##判斷 "ok"和"ok"是否相等 #!/bin/bash if [ "ok" = "ok" ] thenecho "equal" fi##23是否大于22 if [ 23 -gt 22 ] thenecho "大于" fi##判斷文件是否存在 if [ -e /home/shell/aaa.txt ] thenecho "存在" fi

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 "不及格" fi

9.7.2、case

case $變量名 in "值1") 程序1 ;; "值2") 程序2 ;; .......... "值n") 程序n ;; *) 如果變量的值都不是以上的值,則執(zhí)行此程序 ;; esac #實例#!/bin/bash case $1 in1)echo "一";;2) echo "二";;3) echo "三";;*) echo "其他";; esac

9.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;] }#應用實例:編寫一個函數(shù),計算兩個參數(shù)的和,getSum function getSum() {SUM=$[$n1+$n2]echo "和是:$SUM" } read -p "請輸入第一個數(shù) n1:" n1 read -p "請輸入第二個數(shù) n2:" n2getSum $n1 $n2

9.10、Shell編程綜合案例

9.10.1、需求:

  • 每天凌晨2:10備份數(shù)據(jù)庫 kugou 到 /home/mysql/data/db
  • 備份開始和備份結(jié)束能夠給出相應的提示信息
  • 備份后的文件要求以備份時間為文件名,并打包成.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}"#獲取到當前的時間 DATETIME=$(date +%Y-%m-%d_%H%M%S) echo "當前時間:${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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。