尚硅谷java試題,linux一些常用指令(根據尚硅谷韓順平老師視頻所寫,都是自己手打的)

 2023-10-05 阅读 28 评论 0

摘要:` vim和vi的基本介紹 所有的 Linux 系統都會內建 vi 文本編輯器。 Vim 具有程序編輯的能力,可以看做是Vi的增強版本,可以主動的以字體顏色辨別 語法的正確性,方便程序設計。代碼補完、編譯及錯誤跳轉等方便編程的功能特別 豐富,在程序員中被廣

`

vim和vi的基本介紹

所有的 Linux 系統都會內建 vi 文本編輯器。 Vim 具有程序編輯的能力,可以看做是Vi的增強版本,可以主動的以字體顏色辨別 語法的正確性,方便程序設計。代碼補完、編譯及錯誤跳轉等方便編程的功能特別 豐富,在程序員中被廣泛使用。

vim和vi的常用的三種模式

正常模式:

  • 以 vim 打開一個檔案就直接進入一般模式了(這是默認的模式)。在這個模式中, 你可以使用 『上下左右』按鍵來移動光標,你可以使用『刪除字符』或『刪除整行』來處理檔案內容, 也可以使用『復制、貼上』來處理你的文件數據。

插入模式:

  • 按下i, I, o, O, a, A, r, R等任何一個字母之后才會進入編輯模式, 一般來說按i即可

命令行模式:

  • 在這個模式當中, 可以提供你相關指令,完成讀取、存盤、替換、離開 vim 、顯示行號等的 動作則是在此模式中達成的!

vi和vim的基本使用

使用vim Hello.java 對Hello.java進行編輯

vim和vi模式的相互切換

image-20210522201350810

vim和vi快捷鍵的使用

快捷鍵練習使用

    1. 拷貝當前行 yy , 拷貝當前行向下的5行 5yy,并粘貼。
    1. **刪除**當前行 dd , 刪除當前行向下的5行 5dd *
    1. 在文件中查找某個單詞 [命令行下 /關鍵字 , 回車 查找 , 輸入 n 就是查找下一個 ]
    1. 設置文件的行號,取消文件的行號.[命令行下 : set nu 和 :set nonu]
    1. 編輯 /etc/profile 文件,使用快捷鍵到底文檔的最末行[G]和最首行[gg]
    1. 在一個文件中輸入 “hello” ,然后又撤銷這個動作 u
    1. 編輯 /etc/profile 文件,并將光標移動到 20行 shift+g
    1. 更多的看整理的文檔

20191219104939654

基本的指令

關機&重啟命令

基本介紹

shutdown -h now 立即進行關機

shutdown -h 1 “hello,一分鐘之后關機”

shutdown -r now 現在重啟計算機

halt 關機,作用和上面一樣 (CentOS6)

reboot 現在重新啟動計算機

sync 把內存的數據同步到磁盤中

poweroff也是關機指令

注意細節

不管是重啟系統還是關閉系統,首先要運行sync命,把內存中的數據寫到磁盤中

用戶管理

基本介紹: 1) 登錄時盡量少用root帳號登錄,因為它是系統管理員,最大的權限,避免操作失誤。可 以利用普通用戶登錄,登錄后再用”su - 用戶名’命令來切換成系統管理員身份. 2) 在提示符下輸入 logout 即可注銷用戶

在命令行里注銷用戶

直接輸入logout(使用細節:logout注銷指令在圖形界面運行級別無效,在運行級別3有效)

image-20210521112912370

添加用戶

基本語法

useradd [選項] 用戶名

cd 表示change directory,是切換目錄

應用案例

1)添加一個用戶xiaoming

image-20210521114644804

細節說明

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

2)也可以通過useradd -d指定目錄 新的用戶名,給新創建的用戶指定家目錄

修改/指定密碼(在工作中密碼必須復雜)

指定密碼

passwd 用戶名

image-20210522095342857

修改密碼

image-20210522095537757

刪除用戶

基本語法

userdel [選項] 用戶名  選項:-r 表示刪除的同時,將其家目錄也一同刪除了

引用案例

1)刪除用戶xm,但是要保留家目錄

image-20210522100131970

2)刪除用戶xh以及用戶主目錄

image-20210522100617709

細節:在刪除用戶時,我們一般不刪除家目錄

查詢用戶信息

基本語法

id 用戶名

應用示例:查詢root用戶信息

如果用戶不存在,則返回無此用戶

image-20210522101318669

切換用戶

su   -  切換用戶名

應用實例

1)創建一個用戶zf,指定密碼,然后切換到zf

image-20210522101645802

從普通用戶切換回root用戶兩種方式

1)

image-20210522101841615

2)image-20210522101909970

細節說明

1)從權限高的用戶切換到權限低的用戶,不需要輸入密碼,繁殖需要。

2)當需要返回到用戶時,使用exit指令

查看當前用戶/登錄用戶

  • 基本語法

whoami / who am I

用戶組

介紹:類似于角色,系統可以對共性的多個用戶進行統一的管理。

增加組

groupadd 組名

案例演示(創建一個組)

image-20210522104425849

刪除組

指令(基本語法)

groupdel 組名

案例演示

增加用戶時直接加上組

  • 指令(基本語法)

    useradd -g 用戶組 用戶名

    案例演示

    增加一個用戶zwj,直接將zwj指定到wudang

    步驟如下演示

image-20210522105120132

修改用戶組

指令(基本語法)

usermod -g 用戶組(新的用戶組) 用戶名

案例演示

創建一個shaolin組,將zwj修改到shaolin

image-20210522105739973

Linux實操篇 實用指令

指定運行級別(七個級別)

運行級別的示意圖(centos6)

image-20210522204033286

切換到指定運行級別的指令

基本語法

init[0123456]

image-20210522204639476

應用實例

案例1:通過init來切換不同的運行級別,比如從5----->3,然后關機

init 3

init 5

init 0

指定運行級別

  • 面試題

如何找回root密碼,如果不小心忘記了root密碼,怎么找回?

思路:進入到單用戶模式,然后修改root密碼。因為進入單用戶模式,root不需要密碼就可以登錄。

演示

image-20210523091441667

image-20210523092131294

image-20210523091556602

開機 —>在引導時輸入 回車鍵 ----->看到一個界面輸入 e ---->看到一個新的界面,選中第二行(編輯內核)

再輸入 e ---->在這一行的最后輸入 1 ,再輸入回車鍵 ----->再次輸入b,這時就進入了單用戶模式 再用paswd root進行更改密碼(上面的圖片沒有截完整)

2)請設置我們的運行級別,Linux運行后,直接進入到命令行界面,即進入到3運行級別vim /etc/inittab

將id:initdefault:這一行中的數字,5這個數改成3即可

centos7運行級別

進入不同運行級別的方式

init 0   #關機
init 3   #進入3級別字符界面
init 5   #進入5級別圖形界面
init 6   #重啟

設置系統默認的運行級別

#設置默認第三啟動級別
[root@node5 ~]# systemctl set-default multi-user.target#設置默認第五啟動級別
[root@node5 ~]# systemctl set-default graphical.target
[root@node5 ~]# runlevel
3 5   #表示從3級別切換到了5級別#查看當前默認的啟動級別
[root@node5 ~]# systemctl get-default
graphical.target[root@node5 ~]# systemctl get-default
multi-user.target

幫助指令

介紹

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

man基本語法

  • man[命令或配置文件](功能描述:獲得幫助信息)

應用實例

案例:查看ls命令的幫助信息

image-20210524090540904

help指令

  • 基本語法

  • help 命令(功能描述,獲得shell內置命令的幫助信息)

  • 應用實例

    ? 案例:查看cd命令的幫助信息

    image-20210524091140179

文件目錄類

目錄結構的基本介紹

d0c50-linux2bfile2bsystem2bhierarchy

pwd指令

基本語法

pwd(功能描述:顯示當前工作目錄的絕對路徑)

應用案例

  • 案例:顯示當前工作目錄的絕對路徑

image-20210524180318080

ls指令

基本語法

	ls  [選項]   [目錄或是文件]

常用選項

? -a :顯示當前目錄所有的文件和目錄,包括隱藏的

? -l :以列表的方式顯示信息

應用實例

? 案例:查看當前目錄所有內容信息

image-20210524181654591

image-20210524181749175

cd指令

基本語法

  • cd [參數] (功能描述:切換到指定目錄)

常用參數

  • 絕對和相對路徑

重點是腦海中要有一個目錄樹

image-20210525083654467

cd ~ 或者cd:  回到自己的家目錄(home目錄)
cd ..回到當前目錄的上一級目錄

思考題:

1)當前工作目錄是/root,我們希望進入到/home下

絕對路徑:/home,即從根目錄開始定位。

相對路徑:. ./home(. .代表回到上級目錄,然后再去找到home目錄,從當前工作目錄開始定位到需要的目錄去)

應用實例

案例1:使用絕對路徑切換到root目錄

cd /root

案例2:使用相對路徑切換到/root目錄

這里我們要知道該用戶目前在哪個目錄下,才能寫出這個指令,假設在/usr/lib

cd ../../root

非常重要:. .代表的是上級目錄(在相對路徑中)

cd ../home	

案例3:表示回到當前目錄的上一級目錄

cd ..

案例4:回到家目錄

cd
cd ~

image-20210525083526253

mkdir指令

  • mkdir指令用于創建目錄(make directory)

基本語法

mkdir [選項]  要創建的目錄

案例

一次性創建單個目錄

在home目錄下創建pig目錄

image-20210525084515832

一次性創建多級目錄

在home目錄下同時創建animal,同時創建tiger,記住創建多級目錄要帶上-p這個選項

image-20210525084731183

rmdir指令

介紹

rmdir 指令刪除空目錄

應用實例

  • 案例一:刪除一個目錄 /home/pig
  • image-20210525103052767

使用細節

rmdir刪除的是空目錄,如果目錄下有內容時無法刪除。

提示:如果需要刪除的非空目錄,如要使用rm -rf要刪除的目錄

image-20210525164144426

touch指令

介紹

  • touch指令創建空文件

基本語法

touch   文件名稱(后面可以接多個文件名,用于創建多個文件)	

應用實例

  • 案例一:創建一個空的hello.txt

image-20210525164656803

  • 案例二:創建多個文件夾

image-20210525164953364

cp指令(重要)

介紹

  • cp指令拷貝文件到指定目錄(cp就是copy)

基本語法

cp [選項] source dest    (source就是源文件的位置,dest就是要拷貝的目標文件的位置)
常用選項
-r:遞歸復制整個文件夾

應用實例

  • 案例一:將/home/aaa.txt拷貝到/home/bbb目錄下面

    image-20210525170523307

  • 案例二:遞歸復制整個文件夾,舉例

將/home/test整個目錄拷貝到/home/zwj目錄(用-r表示遞歸復制)

image-20210525171619686

使用細節

  • 強制復制不提示方法:\cp

image-20210526173712937

技術小技巧

可以通過 上下箭頭鍵,調出原來使用過的指令。

rm指令

基本介紹

rm指令移除文件或目錄

基本語法

rm [選項] 要刪除的文件或目錄
常用選項
-r:遞歸刪除整個文件夾
-f:強制刪除不提示

應用實例

案例一:將/home/aaa.txt刪除

image-20210526173805144

案例二:遞歸刪除整個文件夾/home/bbb

image-20210526173816579

  • 使用細節

強制刪除不提示的方法:帶上-f參數即可

image-20210526173824951

mv指令

基本介紹

mv移動文件與目錄或重命名(move)

基本語法

mv oldNameFile newNameFile   (功能描述:重命名)可以理解為,把當前文件夾下的oldNameFile,移動到當前目錄下面,發現已經有了,就是重名了
mv/temp/movefile/targetFolder  (功能描述,移動文件)

應用實例

案例一:將 /home/aaa.txt文件 重新命名為pig.txt

image-20210526173836313

案例二:將/home/pig.txt文件移動到 /root目錄下

image-20210526173845362

cat指令

基本介紹

cat 查看文件內容,是以只讀的方式打開

基本語法

cat [選項]  要查看的文件	
常用選項
-n  :   顯示行號

應用實例

案例一:/etc /profile 文件內容,并顯示行號

image-20210526213646596

使用細節

cat只能瀏覽文件,而不能修改文件,為了瀏覽方便,一般會帶上 管道命令 | more

cat 文件名 | more[分頁瀏覽]

more指令

基本介紹

more指令是一個基于VI編輯器的文本過濾器,它以全屏幕的方式按頁顯示文本文件的內容

more指令中內置了若干快捷鍵,詳見操作說明。

基本語法

more    要查看的文件

操作說明

操作功能說明
空白鍵(space)代表向下翻頁
Enter代表向下翻[一行]
q代表立刻離開more,不再顯示文件內容
Ctrl+F向下滾動一屏
Ctrl+B返回上一屏
=輸出當前的行號
:f輸出文件名和當前行的行號

less指令

基本介紹

less指令用來分屏查看文件的內容,它的功能與more指令類似。但是比more指令更加強大,支持各種顯示終端。less指令在顯示文件內容時,并不是將整個文件加載之后才顯示,而是根據現實需要加載內容,對于顯示大型文件具有較高的效率。

基本語法

less要查看的文件

操作說明

操作功能說明
空白鍵向下翻動一頁
[pagedown]向下翻的一頁
[pageup]向上翻動一頁
/字串向下搜尋[字串]的功能:n:向下查找 N:向上查找
?字串向上搜尋[字串]的功能:n:向上查找 N:向下查找
q離開less這個程序

應用實例

案例:采用less查看一個大文件文件/opt/金庸-射雕英雄傳txt精校本.txt

>指令重定向和>>指令追加

基本介紹

>輸出重定向 和>>追加(追加到文件末尾)

輸出重定向:會將原來的文件內容覆蓋

追加:不會覆蓋原來的文件的內容而是追加到文件的尾部

基本語法

1)ls -l > 文件 (功能描述:列表內容寫入到文件a.txt中(覆蓋寫))

image-20210527170606573

  1. ls -al >> 文件 (功能描述:列表內容追加入到文件a.txt末尾)

image-20210527171112884

說明:ls -l > a.txt,將ls -l顯示的內容覆蓋寫入到a.txt文件中,如果該文件不存在則創建該文件,反之,則覆蓋

  1. cat 文件1> 文件2 (功能描述:將文件1內容覆蓋到文件2)

image-20210528104007264

4)echo “內容” >> 文件

應用實例

案例一:將/home目錄下的文件列表寫入到/home/info.txt中

image-20210528104442325

案例二:將當前日歷信息追加到/home/mycal文件中[提示cal]

image-20210528104736235

echo指令

基本內容

echo輸出內容到控制臺

基本語法

echo  [選項]  [輸出內容]	

應用實例

案例:使用echo指令輸出環境變量 ,輸出當前的環境的路徑。

image-20210528111838308

案例:使用echo指令輸出hello,world!

image-20210528111930781

head指令

基本說明

head用于顯示文件的開頭部分,默認情況下head顯示文件的前10行內容

基本語法

 head 文件   (功能描述:查看文件的頭10行內容)
head  -n 5 文件	(功能描述:查看文件的頭5行內容,5可以是任意數)	

應用實例

案例:查看 /etc/profile的前面5行代碼

image-20210528123336898

tail指令

基本介紹

tail用于輸出文件中末尾的內容,默認情況下tail顯示文件的后10行內容。

基本語法

tail  文件   	(功能描述:查看文件后10行內容)
tail -n 5 文件	(功能描述:查看文件的后5行內容,5可以是任意數)
tail  -f   文件    (功能描述:實時追蹤該文檔的所有更新)(工作中經常使用)Ctrl+c退出追蹤

使用示例

案例一:查看/etc/profile最后5行的代碼

image-20210528124112154

案例二:實時監控mydate.txt,看看到文件有變化時,是否會看到,實時的追加日期

image-20210528124518287

ln指令(了解)

基本介紹

軟鏈接也叫符號鏈接,類似于windows里面的快捷方式,主要是存放了鏈接其他文件的路徑

基本語法

ln -s [源文件或目錄] [軟鏈接名]  (功能描述:給源文件創建一個軟連接)

應用實例

案例1:在/home目錄下創建一個軟鏈接linkToRoot,連接到/root目錄

image-20210528164520885

案例2:刪除軟鏈接linkToRoot

image-20210528164926717

細節說明

當我們使用pwd指令查看目錄時,仍然看到的是軟鏈接所在目錄。

history指令

基本介紹

查看已經執行過的命令,也可以執行歷史指令

基本語法

history  (功能描述:查看已經執行過的歷史命令)
histroy  number	(顯示最近number條指令)
!number 	(執行第number條指令)

應用實例

案例一:顯示所有的歷史命令

image-20210528165918103

案例二:顯示最近使用的10個命令

image-20210528170026329

案例三:執行歷史編號為5的指令

image-20210528170240226

時間日期類相關的指令

date指令-顯示當前日期

基本語法

date								(功能描述:顯示當前時間)
date +%Y							(功能描述:顯示當前年份)
date +%m							(功能描述:顯示當前月份)
date +%d							(功能描述:顯示當前是哪一天)
date +"%Y-%m-%d %H:%M:%s" 			  (功能描述:顯示年月日時分秒)
注意:這個+一定得加上

應用實例

案例一:顯示當前時間信息

image-20210528171923814

案例二:顯示當前時間年月日

image-20210528172057231

案例三:顯示檔期那時間年月日時分秒

image-20210528172409082

date指令-設置日期

基本語法

date  -s  字符串時間

應用實例

案例一:設置系統當前時間,比如設置成2021-5-28 11:22:22

image-20210528172858196

cal指令

基本介紹

查看日歷指令

基本語法

cal [選項]   (功能描述:不加選項,顯示本月日歷)  canlender的簡寫

應用實例

案例一:顯示當前日歷
image-20210528173842897

案例二:顯示2020年日歷

image-20210528174004035

搜索查找類

find指令

基本介紹

find指令將從指定目錄向下遞歸地遍歷其各個子目錄,將滿足條件的文件或者目錄顯示在終端。

基本語法

find [搜索范圍] [選項]

選項說明

選項功能
-name<查詢方式>按照指定的文件名查找模式查找文件
-user<用戶名>查找屬于指定用戶名地所有文件
-size<文件大小>按照指定的文件大小查找文件

應用實例

案例一:按文件名:更具名稱查找/home目錄下的hello.txt文件

image-20210528204921939

案例二:按擁有者:查找/opt目錄下,用戶名稱為nobody的文件

image-20210528205122566

案例三:查找整個linux系統下大于20M的文件(+n大于 -n小于 n等于,注意這里的n表示的是數字,單位可以根據實際情況來調整,k得用小寫)

image-20210528205546326

案例四:查詢小于20M的文件

image-20210528205933051

案例五:查詢根目錄下面以txt后綴結尾的文件

image-20210528210722387

locate指令

基本介紹

locate指令可以快速定位文件路徑。locate指令利用實現建立的系統中所有文件名稱以及路徑的locate數據庫實現快速定位給定的文件。locate指令無需遍歷整個文件系統,查詢速度較快。

基本語法

locate  搜索文件

特別說明

由于locate指令基于數據進行查詢,所以第一次運行前,必須使用updatedb指令創建locate數據庫

應用實例

案例一:請使用locate指令快速定位hello.txt文件所在目錄

grep指令和管道符號 |

基本介紹

grep過濾查找,管道符,"|",表示將前一個命令的處理結果輸出傳遞給后面的命令處理。 ("|",這后面的就是加上條件)

基本語法

grep [選項]  查找內容  源文件
選項			功能
-n			  顯示匹配行以及行號。
-i			  忽略字母大小寫

應用實例

案例一:請在hello.txt文件中,查找"yes"所在行,并顯示行號。

image-20210529085731997

壓縮和解壓縮類

gzip/gunzip 指令

基本介紹

gzip用于壓縮文件,gunzip用于解壓

基本語法

gzip     文件   				(功能描述:壓縮文件,只能將文件壓縮為*.gz文件)
gunzip   文件.gz  			(功能描述:解壓縮文件命令)

應用實例

案例一:gzip壓縮,將/home下的hello.txt文件進行壓縮

image-20210529090605151

案例二:gunzip壓縮,將/home下的hello.txt.gz文件進行解壓縮

image-20210529090743083

細節說明

當我們使用gzip對文件進行壓縮后,不會保留原來的文件。

zip/unzip指令

基本介紹

zip用于壓縮文件,unzip用于解壓文件,這個在項目打包發布中很有用的

基本語法

zip   [選項]   XXX.zip     將要壓縮的內容  (功能描述:壓縮文件和目錄的命令)
uzip  [選項]   XXX.zip	(功能描述:解壓文件)	
zip常用選項
-r:  遞歸壓縮,即壓縮目錄
uzip的常用選項
-d <目錄> :指定壓縮后的文件的存放目錄

應用實例

案例一:將/home下的所有文件壓縮成mypackage.zip

image-20210529091848159

image-20210529091915931

案例二:將mypackage.zip解壓到/opt/tmp目錄下

image-20210529092113961

tar指令

基本介紹

tar指令是打包指令,最后打包后的文件是.tar.gz的文件。

基本語法

tar  [選項]  XXX.tar.gz   打包的內容	(功能描述:打包目錄,壓縮后的文件格式.tar.gz)
  • 選項說明
選項功能
-c產生.tar打包文件
-v顯示詳細信息
-f指定壓縮后的文件名
-z打包時同時壓縮
-x解壓.tar文件

應用實例

案例一:壓縮多個文件,將/home/a1.txt和/home/a2.txt壓縮成a.tar.gz

image-20210531170214643

案例二:將/home的文件夾壓縮成myhome.tar.gz

image-20210531170510021

案例三:將a.tar.gz解壓到當前目錄

image-20210531171017011

案例四:將myhome.tar.gz解壓到/opt/tmp2目錄下

image-20210531171600366

組管理和權限管理(重難點)

Linux組的基本介紹

在Linux中的每個用戶必須屬于一個組,不能獨立于組外。在Linux中每個文件有所有者、躲在組、其他組的概念。

1)所有組

2)所在組

3)其他組

4)改變用戶所在組

文件 / 目錄所有者

基本介紹

一般文件的創建者,設創建了該文件,就自然成為了該文件的所有者。

查看文件的所有者

指令:    ls  -ahl

應用實例

應用實例: 創建一個組police,再創建一個用戶tom,然后使用tom來創建一個文件,看看情況如何

image-20210531190841047

image-20210531191138777

修改文件所有者

指令 : chown 用戶名  文件名   (chown:就是change own)

應用案例

要求:使用root創建一個文件apple.txt,然后將所有者修改為tom

image-20210531191945732

組的創建

基本指令

groupadd   組名	

應用實例

創建一個組,monster

創建一個用戶fox,并放入到monster組中

image-20210531192425168

文件/目錄所在組

當某個用戶創建了一個文件后,默認這個文件的所在組就是該用戶所在的組

查看文件/目錄所在組

基本指令

ls -ahl

應用實例

修改文件所在組

基本指令

chgrp  組名   文件名    (chgrp   change group)linux下命令“ll”是“ls -l"的別名。別名相當于windows里的快捷方式。所以"ll"和“ls -l”的功能是相同的。
所以"ll"和"ls"的區別其實是“ls”和"ls -l"的區別。
”ls“是顯示當前目錄下文件,”ls -l“是顯示當前目錄下文件詳細信息。

應用實例

使用root用戶創建文件orange.txt,看看當前文件屬于哪個組,然后將這個文件所在的組修改到police組

image-20210605081750518

其他組

出去文件的所有者和所在組的用戶外,系統的其他用戶都是文件的其他在。

改變用戶所在組

基本介紹

在添加用戶時,可以指定將該用戶添加到哪個組中,同樣的用root的管理權限才可以改變某個用戶所在的組。

改變用戶所在組指令

usermod -g   組名 用戶名
usermod -d   目錄名  用戶名  改變該用戶登陸的初始目錄 

應用實例

創建一個土匪組(bandit)將tom這個用戶從原來所在的police組,修改到bandit(土匪)組。

image-20210605082959023

權限的基本介紹

Linux的權限不是很細致,只有RWX三種

r(Read,讀取):對文件而言,具有讀取文件內容的權限;對目錄來說,具有瀏覽目錄的權限。
w(Write,寫入):對文件而言,具有新增,修改,刪除文件內容的權限;對目錄來說,具有新建,刪除,修改,移動目錄內文件的權限。
x(eXecute,執行):對文件而言,具有執行文件的權限;對目錄了來說該用戶具有進入目錄的權限。
1、目錄的只讀訪問不允許使用cd進入目錄,必須要有執行的權限才能進入。
2、只有執行權限只能進入目錄,不能看到目錄下的內容,要想看到目錄下的文件名和目錄名,需要可讀權限。
3、一個文件能不能被刪除,主要看該文件所在的目錄對用戶是否具有寫權限,如果目錄對用戶沒有寫權限,則該目錄下的所有文件都不能被刪除,文件所有者除外
4、目錄的w位不設置,即使你擁有目錄中某文件的w權限也不能寫該文件

20181230195451513

image-20210608205158166

rwx權限詳解

rwx作用到文件

[r]代表可讀(read):可以讀取,查看
[w]代表可寫(write):可以修改,但是不代表可以刪除文件,刪除文件的前提條件是對該文件所在的目錄有寫權限,才能刪除該文件.

rwx作用到目錄

[r]代表可讀(read):可以讀取,ls查看目錄內容
[w]代表可寫(write):可以修改,目錄內創建+刪除+重命名目錄
[x]代表可執行(execute):可以進入該目錄

文件及其目錄權限實際案例

ls -l中顯示的內容如下

-rwxrw-r-- 1 root root 1213 Feb 2 09 : 39 abc

10個字符確定不同用戶能對文件干什么

第一個字符代表文件的類型:文件(-),目錄(d),鏈接(l)

其余字符每3個一組(rwx)讀(r)寫(w)執行(x)

第一組rwx:文件擁有者同一組的用戶權限是讀、寫和執行

第二組rw-: 與文件擁有者同一組的用戶的權限是讀、寫但是不能執行

第三組r–:不與文件擁有者同組的其他用戶的權限是讀不能寫和執行

**可用數字表示為:**r=4,w=2,x=1因此rwx=4+2+1=7 (用數字表示權限)

1文件:硬鏈接數或目錄:子目錄數
root用戶
root
1213文件大小(字節),如果是文件夾,顯示4096字節
Feb 2 09 : 39最后修改時間
abc文件名

修改權限 -chmod(change modify的意思)

基本說明

通過chmod指令,可以修改文件或者目錄的權限。

第一種方式:+、-、= 變更權限

u:所有者   g:所有組   o:其他人   a:所有人(u、g、o的總和)
chmod  u=rwx , g=rx , o=x文件目錄名
chmod  o+w  文件目錄名
chmod  a-x  文件目錄名

案例演示

1)給abc文件的所有者讀寫執行權限,給所在組執行權限,給其他組的用戶讀執行權限。

image-20210605140747345

2)給abc文件的所有者出去執行的權限,增加組的用戶寫權限

image-20210605140956725

3)給abc文件的所有用戶添加讀的權限

image-20210605141129116

第二種方式:通過數字變更權限

r=4 w=2 x=1 rwx=4+2+1=7

chmod   u=rwx,g=rx,o=x   文件目錄名
相當于   chmod  751  文件名稱		
  • 案例演示

要求:將/home/abc.txt文件的權限修改為,rwx r-xr-x,使用給數字的方式實現(這里面是每三個符號一組)

rwx = 4+2+1=7

r-x=4+1=5

r-x=4+1=5

指令chmod 755 /home/abc.txt

修改文件所有者-chown

基本介紹

chown newowner file 改變文件的所有者

chown newowner:newgroup file 改變用戶的所有者和所有組

帶上-R參數如果是目錄 則使其下所有子文件或目標遞歸生效

案例演示

1)請將/home/abc.txt文件的所有者修改為tom

image-20210605173226639

2)請將/home/kkk目錄下所有的文件和目錄的所有者都修改為zwj

首先我們應該使用root用戶來操作。

image-20210608082532219

修改文件所在組-chgrp

基本介紹

chgrp [選項]  newgroup(改變文件的所有組) file  
選項:-R表示遞歸修改其下所有子文件或者目錄

案例演示

1)請將/home/abc.txt文件的所有組修改成bandit(土匪組)

image-20210608083308485

2)請將/home/kkk目錄下的所有文件和目錄的所在組都修改成bandit(土匪組)

image-20210608083455029

最佳實踐-警察和土匪游戲

police , bandit

jack,jerry警察

xh , xq:土匪

1)創建組

groupadd police
groupadd bandit

2)創建用戶

image-20210608104428477

將密碼都指定為123

image-20210608104618827

3)jack創建一個文件,自己可以讀寫,本組人可以讀,其他組人沒有任何權限

chmod 640 jack01.txt
也可以用 chmod o= jack01.txt	 

image-20210608105321299

4)jack修改該文件,讓其他組人可以讀。本組人可以讀寫

image-20210608113125027

5)xq投靠警察,看看是否可以讀寫

先用root修改xq的組:

image-20210608155135961

再使用jack給他的家目錄/home/jack所在組一個rx權限

image-20210608160222949

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3Ih9FvKS-1625659084602)(…/…/…/AppData/Roaming/Typora/typora-user-images/image-20210608155408201.png)]

文件聯系權限管理[課后練習1]

建立兩個組(神仙,妖怪)

建立四個用戶(唐僧,悟空,八戒,沙僧)

把悟空,八戒放在妖怪組,唐僧沙僧放進神仙組

用悟空建立一個文件(monkey.java該文件要輸出 i am monkey)

給八戒一個rw的權限

image-20210608165547626

唐僧沙僧對該文件沒有權限

image-20210608165641017

把沙僧放入妖怪組

image-20210608165901057

讓沙僧修改該文件monkey,加入一句話(“我是沙僧,我是妖怪!”);

文件聯系權限管理[課后練習2]

1)用root登錄,建立用戶mycentos,自己設定密碼

image-20210609083753792

2)用mycentos登錄,在主目錄下建立目錄test/t11/t1

image-20210609084051839

3)在t1中建立一個文本文件aa,用vi編輯器內容為ls -al

image-20210609084159138

4)改變aa的權限為可執行文件[可以將當前日期追加到一個文件],運行該文件./aa

image-20210609084344890

image-20210609084743768

5)刪除新建立的目錄test/t11/t1

image-20210609084906028

6)刪除用戶mycentos以及其主目錄中的內容

image-20210609085329973

7)將Linux設置到圖形界面

8)重新啟動Linux或關機

reboot 重啟
halt 關機

定時任務調度

crond任務調度

crond進行定時任務的設置

原理示意圖

image-20210609105611466

概述

任務調度是指在系統的某個時間執行的特定的命令或者程序。

任務調度分類:1、系統工作:游戲重要的工作必須是周而復始的執行。比如病毒掃描等

2、個別用戶工作:個別用戶可能希望執行某些程序,比如對mysql數據庫的備份。

基本語法

crontab  [常用 選項]

常用選項

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

任務要求

設置任務跳讀文件:/etc/crontab

設置個人任務調度。執行crontab -e 命令

接著輸入任務到調度文件

如:*/1 ****ls -l / etc />/ tmp/to.txt

意思說每小時的每分鐘執行ls -l /etc/ > /tmp/to.txt命令

步驟如下

1) cron -e
2) */1 * * * * ls -l /etc>> /tmp/to.txt
3) 當保存后就退出程序
4) 在每一分鐘都會調用  ls -l /etc>> /tmp/to.txt

細節參數說明

  • 5個占位符的說明
項目含義范圍
第一個“*”一小時中的第幾分鐘0-59
第二個“*”一天中的第幾小時0-23
第三個“*”一月中的第幾天1-31
第四個“*”一年中的第幾月1-12
第五個“*”一周中的星期幾0-7(0和7都代表星期日)
  • 特殊符號的說明
特殊符號含義
*代表任何時間。比如第一個“*”就代表一個小時中每分鐘都執行一次的意思。
代表不連續的時間。比如“0 8 ,12 ,16 * * * 命令”,就代表在每天的8點0分,12點0分,16點0分都執行一次命令
-代表連續的時間范圍。比如“0 5 * * 1-6命令 ” ,代表在周一到周六的凌晨5點0分執行命令
*/n代表沒隔多久執行一次。比如“*/10 * * * * 命令” ,代表每隔10分鐘就執行一遍命令
  • 特定時間執行任務案例
時間含義
45 22 * * * 命令在22點45分執行命令
0 17 * * 1 命令在每周1的17點0分執行命令
0 5 1 ,15 * * 命令在每月1號和15號的凌晨5點0分執行命令
40 4 * * 1-5 命令每周一到周五的凌晨4點40分執行命令
*/10 4 * * * 命令每天的凌晨4點,每隔十分鐘執行一次命令
00 1 , 15 * 1命令每月1號和15號,每周1點0分都會執行命令。注意:星期幾和幾號最好不要同時出現,因為他們的定義都是天。非常容易讓管理員混亂

crond任務調度應用實例

案例

案例1:每隔一分鐘,就將當前的日期信息,追加到 /tmp/mydate文件中

1)先編寫一個文件 /home/mytask1.sh

指令
vim /home/mytask1.sh
date >> /tmp/mydate

2)給mytask1.sh一個可執行權限

chmod 744 /home/mytask1.sh

3)crontab -e

image-20210609195310486

4)*/1 * * * * /home/mytask1.sh

5)成功

案例2:每隔一分鐘,將當前日期和日歷都追加到 /home/mycal文件中

1)先編寫一個文件 /home/mytask2.sh

指令
vim /home/mytask2.sh
date >> /tmp/mcycal

2)給mytask1.sh一個可執行權限

chmod 744 /home/mytask2.sh

3)crontab -e

4)*/1 * * * * /home/mytask2.sh

5)成功

案例3:每天凌晨2:00將mysql數據庫testdb。備份到文件中。

crond相關的指令

crontab -r :終止任務調度
crontab -l :列出當前有哪些任務調度
service crond restart [重啟任務調度]

Linux磁盤分區、掛載

分區基礎知識

分區的方式(了解

1)mbr分區:

1.最多支持四個主分區

2.系統只能安裝在主分區

3.擴展分區只要占一個主分區

4.MBR最大支持2TB,但擁有最好的兼容性

2)gtp分區:

1.支持多個主分區(但操作系統可能限制,比如Windows下最多128個分區)

2.最大支持18EB的大容量(EB=1024PB,PB=1024TB)

3.windows7 64位以后支持gtp

Windows下的磁盤分區

image-20210615123834985

Linux分區

原理介紹

1)Linux來說無論有幾個分區,分給哪一個目錄使用,它歸根結底就只有一個根目錄,一個獨立且唯一的文件結構,Linux中每一個分區都是用來組成文件系統的一部分。

2)Linux采用一種叫做“載入”的處理方法,它的整個文件系統中包含了一整套文件和目錄,且將一個分區和一個目錄聯系起來。這是要載入一個分區將它的存儲空間在一個目錄下獲得。

3)示意圖

image-20210615124800040

硬盤說明

1)Linux硬盤分為IDE硬盤和SCSI硬盤,目前基本上是SCSI硬盤

2)對于IDE硬盤,驅動器標識符為“hdx~”,其中 “hd”表明分區所在設備的類型,這是指IDE硬盤了。“x”為盤號(a為基本盤,b為基本從屬盤,c為輔助主盤,d為輔助從屬盤),“~”代表分區,前四個分區用數字1到4表示,他們是主分區或擴展分區,hbd2表示為第二個IDE硬盤上過的第二個主分區或擴展分區。

3)對于SCSI硬盤則表示為“sdx”,SCSI硬盤是用“sd”來表示分區所在設備的類型的,其余則和IDE硬盤的表示方法一樣。

使用 lsblk 指令查看當前系統的分區情況

image-20210615134934383

image-20210616132658380

掛載的經典案例

需求是給我們的Linux系統增加一個新的硬盤,并且掛載到/home/newdisk

image-20210616133040682

如何增加一塊硬盤

1)虛擬機添加硬盤

2)分區

fdisk /dev/sdb

3)格式化

mkfs -t ext4 /dev/sdb1 mkfs是格式化的意思
這里表示的是把dev下面的sdb1格式化成ext4類型的文件類型

4)掛載

先創建 /home/newdisk
再進行掛載  mount  /dev/sdb1  /home/newdisk 

image-20210616134840082

5)設置可以自動掛載(永久掛載,當你重啟機系統后,仍然可以掛載到 /home/newdisk上面去)。

vim /etc/fstab  進入之后加上
/dev/sdb1                /home/newdisk                  ext4     defaults        0 0

具體的操作步驟

虛擬機增加硬盤步驟1(增加硬盤)

【虛擬機】菜單中,選擇【設置】,然后設備列表里面添加硬盤,然后一路【下一步】,中間只有選擇磁盤大小的地方需要修改,直至完成。然后重啟系統(才能識別)!

image-20210616172349248

虛擬機增加硬盤步驟2(對磁盤進行分區 )

分區命令

fdisk  /dev/sdb

開始對/sdb分區

  • m 顯示命令列表
  • n 顯示磁盤分區 同 fdisk -1
  • d 刪除分區
  • w 寫入并退出

說明:開始分區后輸入n,新增分區,然后選擇p,分區類型為主分區。兩次回車默認全部空間,最后輸入w并退出,若不保存推出輸入q。

image-20210616173745730

虛擬機增加硬盤步驟3(格式化磁盤)

格式化磁盤

分區命令:mkfs -t ext4 /dev/sdb1

其中ext4是分區類型

虛擬機增加硬盤步驟4 (掛載)

掛載:將一個分區于一個目錄聯系起來

mount  設備名稱    掛載目錄例如:mount   /dev/sdb1    /newdisk
umount   設備名稱  或者   掛載目錄   (相當于卸載)例如:umount /dev/sdb1    或者   umount   /newdisk

虛擬機增加硬盤步驟5(實現永久掛載)

永久掛載:通過修改/etc/fstab實現掛載

添加完成后 執行 mount -a 立即生效

image-20210616175225394

磁盤情況查詢

查詢系統整體磁盤使用情況

  • 基本語法

    查看磁盤占用情況   df  -lh
    
  • 應用實例

image-20210618124402629

查詢指定目錄磁盤占用情況

  • 基本語法

    du  -h  /目錄
    查詢指定目錄的磁盤占用情況,默認為當前目錄
    -s  之目錄大小的匯總
    -h  帶計量單位
    -a  含文件
    --max-depth =1  子目錄深度
    -c  列出明細的同時,增加匯總值
    
    • 應用實例

查詢 /opt 目錄的磁盤占用情況,深度為1

image-20210618125721731

磁盤情況-工作實用指令

1)統計 /home 文件夾目錄下的個數

ls -l /home | grep "^-" | wc -l

image-20210618134221489

2)統計/home文件夾下目錄的個數

ls -l /home | grep "^d" | wc -l

image-20210618134328531

3)統計 /home 文件夾下文件的個數,包括子文件夾里面的

ls -lR /home | grep "^-" | wc -l    加上了R就將/home下面的文件的個數,包括子文件夾里面的都遞歸統計

image-20210618190910795

4)統計文件夾下目錄的個數,包括子文件夾里面的

ls -lR /home | grep "^d" | wc -l    加上了R就將/home下面的文件的個數,包括子文件夾里面的都遞歸統計

image-20210618191521215

5)以樹狀顯示目錄結構

tree 指令的安裝
yum install tree

image-20210618192059735

? image-20210618192214345

實操篇之網絡配置

Linux網絡配置的原理圖(含虛擬機)

目前我們采用的是NAT模式。

image-20210622155736574

image-20210618213423266

查看網絡IP和網關

查看虛擬網絡編輯器

VMware 編輯 -----> 虛擬網絡配置

修改IP地址(修改虛擬網卡的IP 也就是vmnet8)

image-20210618214240461

查看網絡IP和網關

image-20210619081710105

查看Windows環境中的VMnet8網絡配置(ipconfig指令)

1)使用ipconfig查看

2)界面查看

image-20210619082120849

ping測試主機之間網絡的連通性

基本語法

ping    目的主機	(功能描述:測試當前服務器是否可以連接目的主機)

應用實例

測試當前服務器是否可以訪問百度

ping 	www.baidu.com

Linux網絡環境配置

第一種方式(自動獲取)

說明:登陸后,通過界面來設置自動獲取IP

image-20210619085547568

特點:Linux啟動后會自動獲取IP,缺點是每次啟動后自動獲取的IP地址可能不一樣。這個不適用于做服務器,因為我們服務器的IP需要是固定的。

第二種方式(指定固定的IP)

  • 說明192.168.122.1

直接修改文件來指定IP,并且可以連接到外網(推薦),編輯 vi /etc/sysconfig/network-scripts/ifcfg-ens33(centos7),( vi /etc/sysconfig/network-scripts/ifcfg-eth0 這個為centos6)

要求:將IP地址設置成靜態的,IP地址為192.168.31.128

image-20210619101559143

修改后,一定要重啟服務

1)service network restart

2)reboot 重啟機器

實操篇之進程管理

基本介紹

1)在Linux中,每個執行的**程序(代碼)**都成為一個進程。每個進程都分配一個id號。

2)每個進程,都會對應一個父進程,而這個父進程可以復制多個子進程。例如www服務器。

3)每個進程都可能以兩種方式存在。前臺和后臺,所謂前臺進程就是用戶目前屏幕上可以進行的操作。后臺進程實際在操作,由于屏幕上無法看到進程,通常使用后臺方式執行。

4)一般系統的服務都是以后臺進程的方式存在,而且都會常駐在系統中。知道關機才結束。

顯示執行的進程

說明:查看進程使用的指令是ps ,一般來說使用的參數是 -aus

ps顯示信息選項:

字段說明
PID進程識別號
TTY終端機號
TIME此進程所消耗CUP時間
CMD正在執行的命令或進程名
ps -a 	:顯示當前終端的所有進程信息
ps -u	:以用戶的格式顯示進程信息
ps -x	:顯示后臺進程運行的參數
ps -aux | more

image-20210619175857359

ps詳解

1)指令:ps -aux | grep xxx ,比如看看有沒有sshd服務

2)指令說明

  • System V 展示風格
  • USER :用戶名稱
  • PID:進程號
  • %CPU:進程占用CPU的百分比
  • %MEM:進程占用的物理內存的百分比
  • VSZ:進程占用虛擬內存的大小(單位:KB)
  • RSS:進程占用的物理內存的大小(單位:KB)
  • TT:終端名稱,縮寫
  • STAT:進程狀態,其中S-睡眠,s-表示該進程是會話的先導進程,N-表示進程擁有比普通優先級更低的優先級,R-正在運行,D-短期等待,Z-僵死進程,T-被跟蹤或被停止等待
  • STARTED:進程的啟動時間
  • TIME:CPU時間,即進程使用CPU的總時間。
  • COMMAND:啟動進程所用的命令和參數,如果過長會被截斷顯示

應用實例

要求:以全格式顯示當前所有的進程,查看進程的父進程。

  • ps -ef 是以全格式顯示當前的所有的進程
  • -e 顯示所有進程。-f全格式。
  • ps -ef | grep xxx
  • 是BSD風格
  • UID:用戶ID
  • PID:進程ID
  • PPID:父進程ID
  • C:CPU用于計算執行優先級的因子。數值越大,表明進程是CPU密集型運算,執行優先級會降低;數值越小,表明進程I/O密集型運算,執行優先級會提高

思考題,如果我們希望查看sshd進程的父進程號是多少,應該怎么樣查詢?

ps -ef | grep sshd

image-20210619190657050

終止進程kill和killall

介紹

若是某個進程執行一般需要停止時,或是已消了很大的系統資源時,可以考慮停止該進程。使用kill命令來完成此項任務。

基本語法

kill   [選項]   進程號  (功能描述:通過進程號來殺死進程)
killall  進程名稱  (功能描述:通過進程名稱殺死進程,也支持通配符,這在系統因負載過大而變得很慢時很有用)

常用選項

-9 表示強迫進程立即停止

最佳實踐:

案例一:踢掉某個非法登錄的用戶

ps -aux | grep sshd

image-20210620093212557

案例二:終止遠程登陸服務sshd,在適當時候再次重啟sshd服務

ps -aux | grep sshd
kill 1467
ps -aux | grep sshd

image-20210620114833970

案例三:種植多個gedit編輯器 【killall ,通過進程名稱來終止進程】

gedit 執行兩次
killall  gedit

image-20210620115211999

案例四:強制殺死一個終端

ps -aux | grep bash
kill -9 [終端端口號]

image-20210620115915404

查看進程樹pstree

基本語法

pstree [選項]   ,可以更加直觀的來觀看進程

常用選項

-p : 顯示進程的PID
-u : 顯示進程的所屬用戶

應用實例

案例一:請你以樹狀形式顯示進程的pid

pstree -p | more

image-20210620120703674

案例二:請你以樹狀形式顯示用戶的id

pstree -u | more 

image-20210620120759535

服務(service)管理

介紹

服務(service)本質就是進程,但是運行在后臺的,同城都會監聽某個端口,等待其他程序的請求,比如(mysql,sshd,防火墻等),因此我們又稱為守護進程,是Linux中非常重要的知識點。

【原理圖】

image-20210620121056540

service (CentOS6 )systemctl(CentOS7.0 ) 管理命令

CentOS7.0 systemctl [start | stop | restart | reload | status |
mask ] 服務名 這里的mask 是表示禁用的意思,reload表示的是重載

service服務指令在/etc/init.d/

image-20210622160142001

systemctl指令管理的服務是在/usr/lib/systemd/system查看

image-20210623081039798

service  服務名  [start | stop | restart | reload | status |mask ]
在CentOS7.0后  不再使用service ,而是systemctl
systemctl   [start | stop | restart | reload | status | mask ]    服務名 這個很重要

chconfig指令

介紹

1、通過chconfig命令可以給服務的各個運行級別設置自 啟動 / 關閉

2、chconfig指令管理的服務在/etc/init.d查看

3、注意:CentOS7后,很多服務使用systemctl管理

chconfig基本語法

  • 查看服務 chconfig --list [ | grep xxx ]
  • chconfig 服務名 --list

image-20210622222047028

  • ckconfig --level 5 服務名 on/off

案例演示:對network 服務進行各種操作,把network在運行級別3關閉自啟動

chkconfig --level 3 network off
chkconfig --level 3 network on

image-20210622222415266

image-20210622222510465

使用細節

chconfig重新設置服務后自啟動或關閉,需要重啟機器reboot生效

systemctl指令的常見使用

systemctl基本介紹:在Centos 中 systemctl 是設置系統服務的命令,即 service , 它融合之前service和chkconfig的功能于一體。

可以使用它永久性或只在當前會話中啟用/禁用服務。

systemctl 設置服務的自啟動狀態
systemctl							輸出激活的單元,即列出所有正在運行的服務
systemctl	list-units		 		 輸出激活的單元
systemctl	--failed		 		輸出運行失敗的單元
systemctl	list-unit-files	 [[|grep  服務名] 		(查看服務開機啟動狀態,grep可以進行過濾)
systemctl enbale  服務名	(設置服務開機啟動)
systemctl disabale  服務名   (關閉服務開機啟動)
systemctl is-enbaled   服務名   (查詢某個服務是否是自啟動的)

啟動一個服務

systemctl start sshd.service 也可以省略(.service)

在開機啟動或者關閉服務:

systemctl enbale sshd.service
systemctl disable sshd.service

查看是否開機啟動

systemctl is-enbaled sshd.service

查看已啟動的服務列表:

 systemctl list-unit-files | grep enabled

查看啟動失敗的服務列表:

systemctl --failed

查看防火墻服務

 ls -l /usr/lib/systemd/system | grep firewalld

image-20210623081740177

查看防火墻的自啟動狀態

systemctl list-unit-files | grep firewalld

image-20210623081920967

systemctl is-enabled firewalld

image-20210623082011662

查看網絡狀態

netstat  -anp |more

image-20210623082620812

使用案例

1)查看當前防火墻的狀況,關閉防火墻和重啟防火墻 ( CentOS7.0中)

systemctl status firewalld     firewalld  表示的是防火墻的意思
systemctl stop firewalld   關閉防火墻

image-20210620123454237

細節討論:

1)關閉或者其用防火墻后,立即生效。 [telnet 測試某個端口即可]

image-20210620141035729

2)這種方式這是臨時生效,當重啟系統后,還是回歸以后對服務的設置

3)如果希望設置,某個服務自動啟動或關閉永久生效,使用chekconfig指令。

查看服務名

方式一:使用setup --> 系統服務 就可以看到

setup

image-20210620141823089

方式二: /etc/init.d/服務名稱

image-20210620142323462

服務的運行級別(runlevel):

Linux系統有七種運行級別(runlevel):常用的是級別3和5

運行級別0:系統停機狀態,系統默認的運行級別不能設置為0,否則不能正常啟動

運行級別1:單用戶工作狀態,root權限,用于系統維護,禁止遠程登陸

運行級別2:多用戶狀態(有NFS),不支持網絡

運行級別3:完全的多用戶狀態(有NFS)無界面,登陸后進入控制臺命令行模式

運行級別4:系統未使用,保留

運行級別5:X11控制臺,登錄后進入圖形GUI模式

運行級別6:系統正常關閉并重啟,默認運行級別不能設置為6,否則不能正常啟動

  • 開機的流程

開機 -----》 BIOS -------》 /boot -------》systemd進程1----------》運行級別------------》運行級別對應的服務

1、查看默認的運行級別

systemctl get-default

image-20210622192404552

2、設置運行級別為3號級別

systemctl set-default multi-user.target

image-20210622192616836

3、設置成圖形化界面

systemctl set-default graphical.target

image-20210622192958284

示意圖

image-20210623085342071

打開或者關閉指定端口

在真正的生產環境中,往往需要防火墻打開,如果把防火墻打開,那么外部請求數據包就不能跟服務器監聽通訊。這時,需要打開指定端口。比如80、22、8080等。

firewall指令

打開端口:
firewall-cmd --permanet	 --add-port=端口號/協議關閉端口:firewall-cmd --permanet --remove-port=端口號/協議需要重新載入,才能生效:firewall-cmd  --reload查詢端口是否開放:firewall-cmd  --query-port=端口/協議

應用案例

1、啟用防火墻,測試111端口是否能telnet ,不行

2、開放111端口

image-20210623105103990

3、再次關閉111端口

關閉端口:firewall-cmd --permanet --remove-port =端口號/協議
需要重新載入,才能生效:firewall-cmd  --reload

image-20210623110755819

動態監控進程

介紹

top與ps命令很相似。他們都是用來顯示正在執行的進程。Top與ps的最大不同之處,在于top執行一段時間后可以更新正在運行的進程。

基本語法

top  [選項]

選項說明

選項功能
-d 秒數指定top命令每隔幾秒更新。默認是3秒
-i使top不顯示任何閑置或者僵尸進程
-p通過指定監控進程ID來僅僅監控某個進程的狀態

使用top指令動態監控進程

下圖的zombie是僵尸進程,已經死掉了,但是內存沒有釋放

image-20210623112345015

交互操作說明

操作功能
P以CUP使用率排序,默認就是此項
M一內存使用率排序
N以PID排序
q退出top

應用實例

案例一:監視特定用戶

top:輸入此命令,按回車鍵,查看執行的進程。

u:然后輸入"u"回車,再輸入用戶名,即可。

image-20210623191023100

案例二:終止此進程,比如我們要結束pzx登錄

top:輸入此命令,按回車鍵,查看執行的進程。

k:然后輸入“k”回車,再輸入要結束的進程的ID號。(然后在輸入9,進行強制殺死)

案例三:指定系統裝態更新的時間(每隔10秒自動更行),默認是3秒

top -d 10

監控網絡狀態

查看系統的網絡狀態情況netstat

基本語法

netstst  [選項]
選項說明
-an   按一定順序排列輸出
-p   顯示哪一個進程在調用

應用案例

查看系統的網絡狀態情況netstat

image-20210623192416838

查看sshd服務的服務信息

netstat -anp | grep sshd

網絡有問題的處理方法

image-20210624193814271

linux和Windows之間建立通信(這個其實就是建立tcp通信)

image-20210623192932774

RPM和YUM

rpm包的管理

介紹

rpm用于互聯網下載包的打包以安裝工具,它包含在某些Linux發行版中。它生成具有.RPM拓展名的文件。RPM是RedHat Package Manager (RedHat 軟件包管理工具)縮寫,類似于windows中的setup.exe。 Linux的發行版都采用(suse,redhat,centos等等)

rpm的簡單查詢指令

查詢已經安裝的rpm列表  
rpm  -qa  |  grep xxx

案例演示:請查詢是否安裝firefox

    rpm -qa | grep firefox

image-20210623205227158

rpm包的其他查詢指令:

rpm  -qa  查詢所安裝的所有rpm軟件包
rpm  -qa | more
rpm  -qa | grep X[rpm -qa | grep firefox]
rpm  -q   軟件包名:查詢軟件包是否安裝
rpm  -q   firefox
rpm  -qi  軟件包名:查詢軟件包信息
rpm  -q  file
rpm  -ql  軟件包名:查詢軟件包中的文件
rpm  -qi  firefoxrpm  -qf  文件全路徑名  查詢文件所屬的軟件包
rpm  -qf  /etc/passwd
rpm  -qf  /root/install.log

image-20210623205954028

查詢firefox安裝在哪里

rpm  -q  file firefox

image-20210623210345146

rpm -qf /etc/passwd

image-20210623210613970

卸載rpm包

  • 基本語法
rpm -e  RPM的名稱
  • 應用案例

1)刪除firefox軟件包

rpm -e firefox

image-20210623211021073

  • 細節討論

1)如果其他軟件包依賴于你要卸載的軟件包,卸載時則會產生錯誤信息。

如:$rpm -e foo	

removing these packages would break dependences:foo is needed by bar-1.0-1

2)如果我們就是要刪除foo這個rpm包,可以增加參數–nodeps ,就可以進行強制刪除了,但是一般不推薦這樣做,因為依賴于這些軟件包的程序可能無法運行。

如:$rpm -e –nodeps foo 帶上–nodeps就是強制刪除的意思

安裝rpm包

基本語法

rpm -ivh RPM包的全路徑名稱

參數說明

i=install 安裝
v=verbose 提示
h=hash    進度條

應用實例

1)演示安裝firefox瀏覽器

步驟:

1、先找到firefox的安裝rpm包,你需要掛載到我們安裝的centos的iso文件

2、到 /mdeia/ 下去找rpm

cp firefox-68.10.0-1.el7.centos.x86_64.rpm /opt/

image-20210624122936318

yum

介紹

Yum是一個shell前端軟件包管理器。基于RPM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴關系,并且一次安裝所有依賴的軟件包。(有點像maven使用yum的前提是可以聯網。

示意圖
image-20210624124018202

yum的基本指令

查詢yum服務是否具有需要安裝的軟件

yum  list  |  grep  xxx軟件列表

安裝指定的yum包

yum install xxx   下載安裝  [-y]  -y可選就不會詢問你要不要安裝了

yum應用實例

請使用yum的方式來安裝firefox

1)先查看firefox rpm 在yum服務器上有沒有

image-20210624124333702

2)安裝

yum insatll firefox
默認會安裝最新版本的軟件

image-20210624125044364

JavaEE定制篇 搭建JavaEE環境

概述

image-20210624134136606

如果需要在Linux下進行JavaEE開發,需要安裝如下軟件

安裝jdk

  1. 先將軟件通過xftp7上傳到/opt

  2. 解壓縮到/opt

image-20210624181308670

JAVA_HOME=/opt/jdk1.7.0_79
PATH=/opt/jdk1.7.0_79/bin:$PATH
export JAVA_HOME PATH
  1. 需要注銷用戶,環境變量才能生效

1、如果是3運行級別,直接logout

2、如果是5運行級別 (可以使用 source /etc/profile 來刷新配置文件

先用javac指令生成字節碼文件,再用java指令運行。

javac Hello.java 
java Hello

image-20210624183255605
image-20210624183425081
image-20210624183329066

安裝tomcat

步驟

1、先通過xftp傳輸壓縮包到Linux上,然后解壓到/opt

tar -zxvf apache-tomcat-7.0.70.tar.gz

image-20210624184015616

2、啟動tomca ./startup.sh

先進入到tomcat的bin目錄
image-20210624191149690

./startup.sh  啟動tomcat

image-20210624191416250

使用Linux本地的瀏覽器是可以訪問到tomcat

3)開放放端口 vim/etc/sysconfig/firewall

在windows下訪問http://localhost:8080/

eclipse的安裝

步驟

1)解壓到/opt

tar -zxvf eclipse-jee-mars-2-linux-gtk-x86_64.tar.gz 
tar -zxvf eclipse-jee-mars-2-linux-gtk-x86_64.tar.gz 

image-20210625112922649

2)啟動eclipse,配置jre和server

cd 切換到eclipse目錄下
然后再用 ./eclipse 進行啟動

3)編寫Hello World程序并測試成功

4)編寫jsp頁面并測試成功

mysql的安裝和配置

1、先查看是否已經下載了mysql

rpm -qa | grep mysql

如果有就刪掉

rpm -e (--nodeps強制刪除) mysql-libs

2、安裝mysql的環境

yum -y install make gcc-c++ cmake bsion-devel ncurses-devel

3、解壓mysql包

 tar -zxvf mysql-5.6.14.tar.gz 

4、切換到MySQL的目錄下

cd mysql-5.6.14/ 

shell編程

為什么要學shell編程?

1)Linux運維工程師再進行對服務器集群管理時,需要編寫shell程序來進行服務器的管理。

2)對于JavaEE和python程序員來說,工作需要,需要些shell腳本進行程序或者是服務器的維護,比如編寫一個定時備份數據庫的腳本。

3)對于大數據程序員來說,需要編寫Shell程序來管理集群。

Shell是什么

shell是一個命令行解釋器,它為用戶提供一個向Linux內核發送請求以便運行程序的界面系統級程序,用戶可以用shell來啟動、掛起、停止甚至是編寫一些程序。
image-20210626093320313

shell編程快速入門-shell腳本的執行方式

腳本的要求

1)腳本以#!/bin/bash開頭 (告訴編輯器是用bash來進行解析的)

2)腳本需要有可執行權限

編寫第一個shell腳本

需求說明

創建一個shell腳本,輸出hello world!

查看案例:
image-20210626093947711

腳本的常用執行方式

方式一:(輸入腳本的絕對路徑或者相對路徑)

1)首先要賦予helloworld.sh腳本的 +x權限
image-20210626094500814

方式二(sh+腳本,不推薦使用

說明:不用賦予腳本+x權限,直接執行即可

image-20210626094834001

shell的變量

shell的變量的介紹

1)Linux Shell 中的變量分為,系統變量用戶自定義變量

2)系統變量:SHOME 、 PWD、PWD 、PWDSHELL、 $USER等等

比如:echo $HOME 等等
image-20210626095648035

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

shell變量的定義

基本語法

1)定義變量:變量=值

2)撤銷變量:unset 變量

3)聲明靜態變量:readonly 變量,注意:不能用unset

快速入門

案例1:定義變量A

案例2:撤銷變量A
image-20210626100739165

? 案例3:聲明一個只讀變量B=2 (readonly 就相當于Java中的final),不能unset
image-20210626101953724

案例四:可以把一個變量提升為一個全局環境變量,可供其他shell程序使用

定義變量的規則

1)變量名稱可以由字母數字和下劃線組成,但是不能以數字開頭。

2)等號兩側不能有空格

3)變量名稱一般習慣大寫

將命令的返回值賦值給變量(重點)

A=`ls -la`反引號,運行里面的命令,并把結果返回給變量A

image-20210628103507936

設置環境變量

image-20210628103906011

基本語法

1)export 變量名=變量值 (功能描述:將shell變量輸出為環境變量)

2)source 配置文件 (功能描述:讓修改后的文件信息立即生效)

3)在另一個shell程序中使用TOMCAT_HOME

注意:在輸出TOMCAT_HOME環境變量前,要讓起生效

這個是刷新配置文件的意思:source/etc/profile

多行注釋   :<<! 要注釋的內容  !

image-20210628105153321

位置參數變量

介紹

當我們執行一個shell腳本時,如果希望獲得命令行的參數信息。就可以使用到位置參數變量。比如:./myshell.sh 100 200 ,這個就是執行shell命令行,可以在myshell腳本中獲取到參數信息 (有點類似于Java方法傳參數

基本語法

$n(功能描述:n為數字,$0代表命令本身,$1-9代表第一到第九個參數,十以上的參數需要用大括號包含,如9代表第一到第九個參數,十以上的參數需要用大括號包含,如9{10})

?(功能描述:這個變量代表命令行中所有參數,<fontcolor=′red′>* (功能描述:這個變量代表命令行中所有參數,<font color='red'>?<fontcolor=red>*把所有的參數看成一個整體)

@(功能描述:這個變量也代表命令行中的所有參數,<fontcolor=′red′>不過@(功能描述:這個變量也代表命令行中的所有參數,<font color='red'>不過@<fontcolor=red>@把每個參數區分對待)

$#(功能描述:這個變量代表命令行中的所有參數的個數)

位置參數變量的應用實例

案例:編寫一個shell腳本positionPara.sh,在腳本中獲得命令行中各個參數信息
image-20210628172425041

image-20210628172519512

預定義變量

基本介紹

就是shell設計者事先已經定義好的變量,可以直接在shell腳本中使用。

基本語法

$$				(功能描述:當前進程的進程號(pid))
$!				(功能描述:后臺運行的最后一個進程的進程號(pid))
$?				(功能描述:最后一次執行的命令的返回狀態。如果這個變量的值為0,證明上一個命令正確執行;如果這個變量的值為非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確了。)

應用實例

在一個shell腳本中簡單使用一下預定義變量。

image-20210628214059047

運算符

基本介紹

學習如何在shell中進行運算操作

基本語法

1)“((運算式))”或“((運算式))” 或 “(())[運算式]”

2)expr m + n

注意expr運算符間要有空格

3)expr m -n

4)expr \* , / , % 乘,除,取余 (expr : expression)

  • 應用實例
  • 注意在寫shell腳本的時候變量和等號之間不要有空格

案例一:計算(2+3)X4的值

  1. $((運算式))image-20210705161634409
  2. $[運算式]image-20210705161851739
  3. exprimage-20210705163236697

案例二:請求算出命令行兩個參數之和image-20210705164140704

條件判斷

基本語法

[ condition ] (注意condition前后要有空格)
#非空返回true,可使用$?驗證(0為true,>1為false)

應用實例

[ atguigu ]			返回true
[]  				返回false
[ condition ] && echo OK  || echo notok  條件滿足,執行后面的語句

判斷語句

  • 常用的判斷條件

1) 兩個整數的比較

=字符串的比較
-lt小于  lt=less than
-le小于等于  
-eq等于   eq=equal than
-gt大于   gt=great than
-ge大于等于 ge=great equal
-ne不等于  ne=not equal

按照文件所有權進行判斷

-r  有讀的權限
-w  有些的權限
-x  有執行的權限

按照文件類型進行判斷

-f  文件存在并且是個常規文件
-e  文件存在
-d  文件存在并且是個目錄

應用實例

案例一:“ok”是否等于“ok”

判斷語句:image-20210705181744621

案例二:判斷23是否大于等于22

這里的結束 fi ,就是把 if 反著寫,后面的要學的 case   結束的關鍵字就是 esac

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳image-20210705182351705

案例三:判斷/root/shell/aaa.txt是否存在

判斷語句:
image-20210705182923634

shell 流程控制

if判斷

基本語法

if [ 條件判斷式 ];then程序elif [ 條件判斷式 ]then程序 
fi	
或者
if [ 條件判斷式 ]		then程序elif [ 條件判斷式 ]then程序 
fi	

注意事項:(1)[ 條件判斷式 ] ,中括號和條件判斷式之間必須有空格

(2)推薦使用第二種方式

應用案例

#案例:請編寫一個shell程序,如果輸入的參數大于等于60,則輸出”及格了“ ,如果小于60,則輸出“不及格”image-20210705202737022

case語句

基本語法

case $變量名  in   
"值1")
如果變量名等于值1,則執行程序1
;;
"值2")
如果變量等于值2,則執行程序2
;;
...省略其他分支...
*)
如果變量的值都不是以上的值,則執行此程序
;;
esac

應用案例

案例1:當命令行參數是1時,輸出“周一”,是2時,輸出“周二”,其他情況輸出“other”

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳image-20210705214122831

for循環

基本語法(這個相當于增強for循環,foreach)

for  變量  in 值1  值2 值3 ...
do
程序
done

應用實例

案例1:打印命令行輸入的參數【會使用到$* $@】

這里的$i表示的是引用上面的i的意思
image-20210705220256804

image-20210706164634006

基本語法

for ((初始值;循環控制條件;變量變化))
do
程序
done

應用實例

案例1:從一加到一百的值輸出顯示[這里可以看出$* 和 $@的區別]

#!/bin/bash
#求1到100的值
#定義一個結果變量
sum=0
for ((i=1;i <= 100 ;i++ ))do
sum=$[ $sum+i ]
done
echo "sum=$sum"

image-20210706165734779

while循環

基本語法

while  [條件判斷式]
do
程序
done

應用實例

案例一:從命令行輸出一個數n,統計從1+…+n的值是多少?

讀取控制臺的輸入

基本語法

read (選項)  (參數)
選項:
-p :指定讀取時的提示符號
-t :指定讀取時等待的時間(),如果沒有在指定的時間內輸入,就不再等待了
參數
變量:指定讀取值的變量名

應用實例

案例一:從控制臺讀取一個num值。

? image-20210706172933098
案例二:讀取控制臺輸入一個num值,在10秒內輸入。

image-20210706172956207

函數

函數介紹

shell編程和其它語言一樣,有系統函數,也可以有自定義函數。在系統函數中,就介紹這兩個。

系統函數

  • bashname基本語法

功能:返回完整路徑下最后 / 部分,常用于獲取文件名

basename [pathname]  [suffix]
basename [string]  [suffix]  功能描述:basename命令會刪掉所有的前綴包括最后一個('/')
字符,然后將字符顯示出來
選項
suffix 為后綴,如果suffix被指定了,basename會將pathname或string中的suffix去掉

應用實例

案例一:請返回 /home/aaa/test.txt的”test.txt“部分
image-20210707101457436

dirname基本語法

功能:返回完整路徑最后 / 的前面的部分,常用于返回路徑部分

dirname文件絕對路徑(功能描述:從給定的包含絕對路徑的文件中去除文件名(非目錄部分),然后返回剩下的路徑(目錄部分))

應用實例

案例一:請返回/home/aaa/test.txt的/home/aaa
image-20210707102533380

自定義函數

  • 基本語法
[ function ] funname [()]
{Action;[return int;]}
調用直接寫函數名: funname
注意[]這個是可選的,里面的內容可寫可不寫
  • 應用實例

案例1:計算輸出兩個參數的和,getSum
image-20210707104022527

shell編程的綜合案例

需求分析

  1. 每天凌晨2:10備份數據庫atguiguDB到/data/backup/db
  2. 備份開始和備份結束能夠給出相應的提示信息
  3. 備份后的文件要求以備份時間為文件名,并打成.tar.gz的形式,比如: 2018-03-12_230201.tar.gz
  4. 在備份的同時,檢查是否有10天前的備份的數據庫文件,如果有就將其刪除

編寫一個shell腳本。

思路分析:
image-20210707154848109

代碼實現:

#!/bin/bash
#完成數據庫的定時備份
#定義備份的路徑
BACKUP=/data/backup/db
#當前的時間作為文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以輸出變量調試
#echo $DATETIME
#!/bin/bash
#完成數據庫的定時備份
#定義備份的路徑
BACKUP=/data/backup/db
#!/bin/bash
#完成數據庫的定時備份
#定義備份的路徑
BACKUP=/data/backup/db
#當前的時間作為文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以輸出變量調試
#echo $DATETIME
echo "======開始備份======"
echo "======備份的路徑是$BACKUP/$DATETIME.tar.gz ======"#主機
HOST=localhost
#用戶名
DB_USER=root
#密碼
DB_PWD=root
#備份數據庫名
DATABASE=atguiguDB
#創建備份的路徑
#如果備份的文件夾存在就使用,否則就創建
#mkdir -p :遞歸創建目錄,即使上級目錄不存在,會按目錄層級自動創建目錄[ ! -d "$BACKUP/$DATETIM"   ] && mkdir -p "$BACKUP/$DATETIME"
#執行mysql的備份數據庫的指令
mysqldump   -u${DB_USER} -P${DB_PWD}   --host=$HOST   $DATABASE | gzip  >  $BACKUP/$DATETIME.sql.gz
#打包備份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz  $DATETIME
#刪除臨時目錄
rm -rf $BACKUP/$DATETIME
#刪除十天前的備份文件
#下面那條指令的意思:find是查找指令,-m表示按照時間查找+10表示十天前的 
#-name 表示按照名稱查找以.tar.gz結尾的文件   
#exec代表著執行 執行后面的  rm -rf {} \; 就是刪除找到的那些文件,這個是一個固定的寫法
find $BCAKUP  -m  +10  -name  "*.tar.gz" -exec  rm -rf {} \;
echo "======備份文件成功======"

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6vsb03e0-1625659084658)(https://qlwy.oss-cn-shenzhen.aliyuncs.com/img/20210707194758.png)]

2020/7/7Linux學習完結撒花

77事變84周年,吾輩當自強

UR4z-1625659084653)]

for循環

基本語法(這個相當于增強for循環,foreach)

for  變量  in 值1  值2 值3 ...
do
程序
done

應用實例

案例1:打印命令行輸入的參數【會使用到$* $@】

這里的$i表示的是引用上面的i的意思

image-20210705220256804

image-20210706164634006

基本語法

for ((初始值;循環控制條件;變量變化))
do
程序
done

應用實例

案例1:從一加到一百的值輸出顯示[這里可以看出$* 和 $@的區別]

#!/bin/bash
#求1到100的值
#定義一個結果變量
sum=0
for ((i=1;i <= 100 ;i++ ))do
sum=$[ $sum+i ]
done
echo "sum=$sum"

image-20210706165734779

while循環

基本語法

while  [條件判斷式]
do
程序
done

應用實例

案例一:從命令行輸出一個數n,統計從1+…+n的值是多少?

讀取控制臺的輸入

基本語法

read (選項)  (參數)
選項:
-p :指定讀取時的提示符號
-t :指定讀取時等待的時間(),如果沒有在指定的時間內輸入,就不再等待了
參數
變量:指定讀取值的變量名

應用實例

案例一:從控制臺讀取一個num值。
image-20210706172933098

案例二:讀取控制臺輸入一個num值,在10秒內輸入。

image-20210706172956207

函數

函數介紹

shell編程和其它語言一樣,有系統函數,也可以有自定義函數。在系統函數中,就介紹這兩個。

系統函數

  • bashname基本語法

功能:返回完整路徑下最后 / 部分,常用于獲取文件名

basename [pathname]  [suffix]
basename [string]  [suffix]  功能描述:basename命令會刪掉所有的前綴包括最后一個('/')
字符,然后將字符顯示出來
選項
suffix 為后綴,如果suffix被指定了,basename會將pathname或string中的suffix去掉

應用實例

案例一:請返回 /home/aaa/test.txt的”test.txt“部分
image-20210707101457436

dirname基本語法

功能:返回完整路徑最后 / 的前面的部分,常用于返回路徑部分

dirname文件絕對路徑(功能描述:從給定的包含絕對路徑的文件中去除文件名(非目錄部分),然后返回剩下的路徑(目錄部分))

應用實例

案例一:請返回/home/aaa/test.txt的/home/aaa

image-20210707102533380

自定義函數

  • 基本語法
[ function ] funname [()]
{Action;[return int;]}
調用直接寫函數名: funname
注意[]這個是可選的,里面的內容可寫可不寫
  • 應用實例

案例1:計算輸出兩個參數的和,getSum
image-20210707104022527

shell編程的綜合案例

需求分析

  1. 每天凌晨2:10備份數據庫atguiguDB到/data/backup/db
  2. 備份開始和備份結束能夠給出相應的提示信息
  3. 備份后的文件要求以備份時間為文件名,并打成.tar.gz的形式,比如: 2018-03-12_230201.tar.gz
  4. 在備份的同時,檢查是否有10天前的備份的數據庫文件,如果有就將其刪除

編寫一個shell腳本。

思路分析:

image-20210707154848109

代碼實現:

#!/bin/bash
#完成數據庫的定時備份
#定義備份的路徑
BACKUP=/data/backup/db
#當前的時間作為文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以輸出變量調試
#echo $DATETIME
#!/bin/bash
#完成數據庫的定時備份
#定義備份的路徑
BACKUP=/data/backup/db
#!/bin/bash
#完成數據庫的定時備份
#定義備份的路徑
BACKUP=/data/backup/db
#當前的時間作為文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以輸出變量調試
#echo $DATETIME
echo "======開始備份======"
echo "======備份的路徑是$BACKUP/$DATETIME.tar.gz ======"#主機
HOST=localhost
#用戶名
DB_USER=root
#密碼
DB_PWD=root
#備份數據庫名
DATABASE=atguiguDB
#創建備份的路徑
#如果備份的文件夾存在就使用,否則就創建
#mkdir -p :遞歸創建目錄,即使上級目錄不存在,會按目錄層級自動創建目錄[ ! -d "$BACKUP/$DATETIM"   ] && mkdir -p "$BACKUP/$DATETIME"
#執行mysql的備份數據庫的指令
mysqldump   -u${DB_USER} -P${DB_PWD}   --host=$HOST   $DATABASE | gzip  >  $BACKUP/$DATETIME.sql.gz
#打包備份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz  $DATETIME
#刪除臨時目錄
rm -rf $BACKUP/$DATETIME
#刪除十天前的備份文件
#下面那條指令的意思:find是查找指令,-m表示按照時間查找+10表示十天前的 
#-name 表示按照名稱查找以.tar.gz結尾的文件   
#exec代表著執行 執行后面的  rm -rf {} \; 就是刪除找到的那些文件,這個是一個固定的寫法
find $BCAKUP  -m  +10  -name  "*.tar.gz" -exec  rm -rf {} \;
echo "======備份文件成功======"

image-20210707194750770

2021/7/7Linux學習完結撒花

77事變84周年,吾輩當自強

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/124173.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息