`
所有的 Linux 系統都會內建 vi 文本編輯器。 Vim 具有程序編輯的能力,可以看做是Vi的增強版本,可以主動的以字體顏色辨別 語法的正確性,方便程序設計。代碼補完、編譯及錯誤跳轉等方便編程的功能特別 豐富,在程序員中被廣泛使用。
正常模式:
插入模式:
命令行模式:
vi和vim的基本使用
使用vim Hello.java 對Hello.java進行編輯
快捷鍵練習使用:
基本介紹
shutdown -h now 立即進行關機
shutdown -h 1 “hello,一分鐘之后關機”
shutdown -r now 現在重啟計算機
halt 關機,作用和上面一樣 (CentOS6)
reboot 現在重新啟動計算機
sync 把內存的數據同步到磁盤中
poweroff也是關機指令
注意細節
不管是重啟系統還是關閉系統,首先要運行sync命,把內存中的數據寫到磁盤中
基本介紹: 1) 登錄時盡量少用root帳號登錄,因為它是系統管理員,最大的權限,避免操作失誤。可 以利用普通用戶登錄,登錄后再用”su - 用戶名’命令來切換成系統管理員身份. 2) 在提示符下輸入 logout 即可注銷用戶
在命令行里注銷用戶
直接輸入logout(使用細節:logout注銷指令在圖形界面運行級別無效,在運行級別3有效)
基本語法
useradd [選項] 用戶名
cd 表示change directory,是切換目錄
應用案例
1)添加一個用戶xiaoming
細節說明
1)當創建用戶成功后,會自動的創建和用戶同名的家目錄
2)也可以通過useradd -d指定目錄 新的用戶名,給新創建的用戶指定家目錄
指定密碼
passwd 用戶名
修改密碼
基本語法
userdel [選項] 用戶名 選項:-r 表示刪除的同時,將其家目錄也一同刪除了
引用案例
1)刪除用戶xm,但是要保留家目錄
2)刪除用戶xh以及用戶主目錄
細節:在刪除用戶時,我們一般不刪除家目錄
id 用戶名
應用示例:查詢root用戶信息
如果用戶不存在,則返回無此用戶
su - 切換用戶名
應用實例
1)創建一個用戶zf,指定密碼,然后切換到zf
從普通用戶切換回root用戶兩種方式
1)
2)
細節說明
1)從權限高的用戶切換到權限低的用戶,不需要輸入密碼,繁殖需要。
2)當需要返回到用戶時,使用exit指令
whoami / who am I
介紹:類似于角色,系統可以對共性的多個用戶進行統一的管理。
groupadd 組名
案例演示(創建一個組)
指令(基本語法)
groupdel 組名
案例演示
增加用戶時直接加上組
指令(基本語法)
useradd -g 用戶組 用戶名
案例演示
增加一個用戶zwj,直接將zwj指定到wudang
步驟如下演示
指令(基本語法)
usermod -g 用戶組(新的用戶組) 用戶名
案例演示
創建一個shaolin組,將zwj修改到shaolin
init[0123456]
案例1:通過init來切換不同的運行級別,比如從5----->3,然后關機
init 3
init 5
init 0
如何找回root密碼,如果不小心忘記了root密碼,怎么找回?
思路:進入到單用戶模式,然后修改root密碼。因為進入單用戶模式,root不需要密碼就可以登錄。
演示
開機 —>在引導時輸入 回車鍵 ----->看到一個界面輸入 e ---->看到一個新的界面,選中第二行(編輯內核)
再輸入 e ---->在這一行的最后輸入 1 ,再輸入回車鍵 ----->再次輸入b,這時就進入了單用戶模式 再用paswd root進行更改密碼(上面的圖片沒有截完整)
2)請設置我們的運行級別,Linux運行后,直接進入到命令行界面,即進入到3運行級別vim /etc/inittab
將id:initdefault:這一行中的數字,5這個數改成3即可
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提供的幫助指令來了解指令的使用方法。
案例:查看ls命令的幫助信息
help指令
基本語法
help 命令(功能描述,獲得shell內置命令的幫助信息)
應用實例
? 案例:查看cd命令的幫助信息
pwd(功能描述:顯示當前工作目錄的絕對路徑)
ls [選項] [目錄或是文件]
? -a :顯示當前目錄所有的文件和目錄,包括隱藏的。
? -l :以列表的方式顯示信息
? 案例:查看當前目錄所有內容信息
重點是腦海中要有一個目錄樹
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 ~
mkdir [選項] 要創建的目錄
在home目錄下創建pig目錄
在home目錄下同時創建animal,同時創建tiger,記住創建多級目錄要帶上-p這個選項
rmdir 指令刪除空目錄
rmdir刪除的是空目錄,如果目錄下有內容時無法刪除。
提示:如果需要刪除的非空目錄,如要使用rm -rf要刪除的目錄
touch 文件名稱(后面可以接多個文件名,用于創建多個文件)
cp [選項] source dest (source就是源文件的位置,dest就是要拷貝的目標文件的位置)
常用選項
-r:遞歸復制整個文件夾
案例一:將/home/aaa.txt拷貝到/home/bbb目錄下面
案例二:遞歸復制整個文件夾,舉例
將/home/test整個目錄拷貝到/home/zwj目錄(用-r表示遞歸復制)
技術小技巧
可以通過 上下箭頭鍵,調出原來使用過的指令。
rm指令移除文件或目錄
rm [選項] 要刪除的文件或目錄
常用選項
-r:遞歸刪除整個文件夾
-f:強制刪除不提示
案例一:將/home/aaa.txt刪除
案例二:遞歸刪除整個文件夾/home/bbb
強制刪除不提示的方法:帶上-f參數即可
mv移動文件與目錄或重命名(move)
mv oldNameFile newNameFile (功能描述:重命名)可以理解為,把當前文件夾下的oldNameFile,移動到當前目錄下面,發現已經有了,就是重名了
mv/temp/movefile/targetFolder (功能描述,移動文件)
案例一:將 /home/aaa.txt文件 重新命名為pig.txt
案例二:將/home/pig.txt文件移動到 /root目錄下
cat 查看文件內容,是以只讀的方式打開
cat [選項] 要查看的文件
常用選項
-n : 顯示行號
案例一:/etc /profile 文件內容,并顯示行號
cat只能瀏覽文件,而不能修改文件,為了瀏覽方便,一般會帶上 管道命令 | more
cat 文件名 | more[分頁瀏覽]
more指令是一個基于VI編輯器的文本過濾器,它以全屏幕的方式按頁顯示文本文件的內容。
more指令中內置了若干快捷鍵,詳見操作說明。
more 要查看的文件
操作 | 功能說明 |
---|---|
空白鍵(space) | 代表向下翻頁 |
Enter | 代表向下翻[一行] |
q | 代表立刻離開more,不再顯示文件內容 |
Ctrl+F | 向下滾動一屏 |
Ctrl+B | 返回上一屏 |
= | 輸出當前的行號 |
:f | 輸出文件名和當前行的行號 |
less指令用來分屏查看文件的內容,它的功能與more指令類似。但是比more指令更加強大,支持各種顯示終端。less指令在顯示文件內容時,并不是將整個文件加載之后才顯示,而是根據現實需要加載內容,對于顯示大型文件具有較高的效率。
less要查看的文件
操作 | 功能說明 |
---|---|
空白鍵 | 向下翻動一頁 |
[pagedown] | 向下翻的一頁 |
[pageup] | 向上翻動一頁 |
/字串 | 向下搜尋[字串]的功能:n:向下查找 N:向上查找 |
?字串 | 向上搜尋[字串]的功能:n:向上查找 N:向下查找 |
q | 離開less這個程序 |
案例:采用less查看一個大文件文件/opt/金庸-射雕英雄傳txt精校本.txt
>輸出重定向 和>>追加(追加到文件末尾)
輸出重定向:會將原來的文件內容覆蓋
追加:不會覆蓋原來的文件的內容而是追加到文件的尾部
1)ls -l > 文件 (功能描述:列表內容寫入到文件a.txt中(覆蓋寫))
- ls -al >> 文件 (功能描述:列表內容追加入到文件a.txt末尾)
說明:ls -l > a.txt,將ls -l顯示的內容覆蓋寫入到a.txt文件中,如果該文件不存在則創建該文件,反之,則覆蓋
- cat 文件1> 文件2 (功能描述:將文件1內容覆蓋到文件2)
4)echo “內容” >> 文件
案例一:將/home目錄下的文件列表寫入到/home/info.txt中
案例二:將當前日歷信息追加到/home/mycal文件中[提示cal]
echo輸出內容到控制臺
echo [選項] [輸出內容]
案例:使用echo指令輸出環境變量 ,輸出當前的環境的路徑。
案例:使用echo指令輸出hello,world!
head用于顯示文件的開頭部分,默認情況下head顯示文件的前10行內容
head 文件 (功能描述:查看文件的頭10行內容)
head -n 5 文件 (功能描述:查看文件的頭5行內容,5可以是任意數)
案例:查看 /etc/profile的前面5行代碼
tail用于輸出文件中末尾的內容,默認情況下tail顯示文件的后10行內容。
tail 文件 (功能描述:查看文件后10行內容)
tail -n 5 文件 (功能描述:查看文件的后5行內容,5可以是任意數)
tail -f 文件 (功能描述:實時追蹤該文檔的所有更新)(工作中經常使用)Ctrl+c退出追蹤
案例一:查看/etc/profile最后5行的代碼
案例二:實時監控mydate.txt,看看到文件有變化時,是否會看到,實時的追加日期
軟鏈接也叫符號鏈接,類似于windows里面的快捷方式,主要是存放了鏈接其他文件的路徑
ln -s [源文件或目錄] [軟鏈接名] (功能描述:給源文件創建一個軟連接)
案例1:在/home目錄下創建一個軟鏈接linkToRoot,連接到/root目錄
案例2:刪除軟鏈接linkToRoot
當我們使用pwd指令查看目錄時,仍然看到的是軟鏈接所在目錄。
查看已經執行過的命令,也可以執行歷史指令
history (功能描述:查看已經執行過的歷史命令)
histroy number (顯示最近number條指令)
!number (執行第number條指令)
案例一:顯示所有的歷史命令
案例二:顯示最近使用的10個命令
案例三:執行歷史編號為5的指令
date (功能描述:顯示當前時間)
date +%Y (功能描述:顯示當前年份)
date +%m (功能描述:顯示當前月份)
date +%d (功能描述:顯示當前是哪一天)
date +"%Y-%m-%d %H:%M:%s" (功能描述:顯示年月日時分秒)
注意:這個+一定得加上
案例一:顯示當前時間信息
案例二:顯示當前時間年月日
案例三:顯示檔期那時間年月日時分秒
date -s 字符串時間
案例一:設置系統當前時間,比如設置成2021-5-28 11:22:22
查看日歷指令
cal [選項] (功能描述:不加選項,顯示本月日歷) canlender的簡寫
案例一:顯示當前日歷
案例二:顯示2020年日歷
find指令將從指定目錄向下遞歸地遍歷其各個子目錄,將滿足條件的文件或者目錄顯示在終端。
find [搜索范圍] [選項]
選項 | 功能 |
---|---|
-name<查詢方式> | 按照指定的文件名查找模式查找文件 |
-user<用戶名> | 查找屬于指定用戶名地所有文件 |
-size<文件大小> | 按照指定的文件大小查找文件 |
案例一:按文件名:更具名稱查找/home目錄下的hello.txt文件
案例二:按擁有者:查找/opt目錄下,用戶名稱為nobody的文件
案例三:查找整個linux系統下大于20M的文件(+n大于 -n小于 n等于,注意這里的n表示的是數字,單位可以根據實際情況來調整,k得用小寫)
案例四:查詢小于20M的文件
案例五:查詢根目錄下面以txt后綴結尾的文件
locate指令可以快速定位文件路徑。locate指令利用實現建立的系統中所有文件名稱以及路徑的locate數據庫實現快速定位給定的文件。locate指令無需遍歷整個文件系統,查詢速度較快。
locate 搜索文件
由于locate指令基于數據進行查詢,所以第一次運行前,必須使用updatedb指令創建locate數據庫
案例一:請使用locate指令快速定位hello.txt文件所在目錄
grep過濾查找,管道符,"|",表示將前一個命令的處理結果輸出傳遞給后面的命令處理。 ("|",這后面的就是加上條件)
grep [選項] 查找內容 源文件
選項 功能
-n 顯示匹配行以及行號。
-i 忽略字母大小寫
案例一:請在hello.txt文件中,查找"yes"所在行,并顯示行號。
gzip用于壓縮文件,gunzip用于解壓
gzip 文件 (功能描述:壓縮文件,只能將文件壓縮為*.gz文件)
gunzip 文件.gz (功能描述:解壓縮文件命令)
案例一:gzip壓縮,將/home下的hello.txt文件進行壓縮
案例二:gunzip壓縮,將/home下的hello.txt.gz文件進行解壓縮
當我們使用gzip對文件進行壓縮后,不會保留原來的文件。
zip用于壓縮文件,unzip用于解壓文件,這個在項目打包發布中很有用的
zip [選項] XXX.zip 將要壓縮的內容 (功能描述:壓縮文件和目錄的命令)
uzip [選項] XXX.zip (功能描述:解壓文件)
zip常用選項
-r: 遞歸壓縮,即壓縮目錄
uzip的常用選項
-d <目錄> :指定壓縮后的文件的存放目錄
案例一:將/home下的所有文件壓縮成mypackage.zip
案例二:將mypackage.zip解壓到/opt/tmp目錄下
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
案例二:將/home的文件夾壓縮成myhome.tar.gz
案例三:將a.tar.gz解壓到當前目錄
案例四:將myhome.tar.gz解壓到/opt/tmp2目錄下
在Linux中的每個用戶必須屬于一個組,不能獨立于組外。在Linux中每個文件有所有者、躲在組、其他組的概念。
1)所有組
2)所在組
3)其他組
4)改變用戶所在組
一般文件的創建者,設創建了該文件,就自然成為了該文件的所有者。
指令: ls -ahl
應用實例: 創建一個組police,再創建一個用戶tom,然后使用tom來創建一個文件,看看情況如何
指令 : chown 用戶名 文件名 (chown:就是change own)
要求:使用root創建一個文件apple.txt,然后將所有者修改為tom
groupadd 組名
創建一個組,monster
創建一個用戶fox,并放入到monster組中
當某個用戶創建了一個文件后,默認這個文件的所在組就是該用戶所在的組。
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組
出去文件的所有者和所在組的用戶外,系統的其他用戶都是文件的其他在。
在添加用戶時,可以指定將該用戶添加到哪個組中,同樣的用root的管理權限才可以改變某個用戶所在的組。
usermod -g 組名 用戶名
usermod -d 目錄名 用戶名 改變該用戶登陸的初始目錄
創建一個土匪組(bandit)將tom這個用戶從原來所在的police組,修改到bandit(土匪)組。
r(Read,讀取):對文件而言,具有讀取文件內容的權限;對目錄來說,具有瀏覽目錄的權限。
w(Write,寫入):對文件而言,具有新增,修改,刪除文件內容的權限;對目錄來說,具有新建,刪除,修改,移動目錄內文件的權限。
x(eXecute,執行):對文件而言,具有執行文件的權限;對目錄了來說該用戶具有進入目錄的權限。
1、目錄的只讀訪問不允許使用cd進入目錄,必須要有執行的權限才能進入。
2、只有執行權限只能進入目錄,不能看到目錄下的內容,要想看到目錄下的文件名和目錄名,需要可讀權限。
3、一個文件能不能被刪除,主要看該文件所在的目錄對用戶是否具有寫權限,如果目錄對用戶沒有寫權限,則該目錄下的所有文件都不能被刪除,文件所有者除外
4、目錄的w位不設置,即使你擁有目錄中某文件的w權限也不能寫該文件
[r]代表可讀(read):可以讀取,查看
[w]代表可寫(write):可以修改,但是不代表可以刪除文件,刪除文件的前提條件是對該文件所在的目錄有寫權限,才能刪除該文件.
[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指令,可以修改文件或者目錄的權限。
u:所有者 g:所有組 o:其他人 a:所有人(u、g、o的總和)
chmod u=rwx , g=rx , o=x文件目錄名
chmod o+w 文件目錄名
chmod a-x 文件目錄名
1)給abc文件的所有者讀寫執行權限,給所在組執行權限,給其他組的用戶讀執行權限。
2)給abc文件的所有者出去執行的權限,增加組的用戶寫權限
3)給abc文件的所有用戶添加讀的權限
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 newowner file 改變文件的所有者
chown newowner:newgroup file 改變用戶的所有者和所有組
帶上-R參數如果是目錄 則使其下所有子文件或目標遞歸生效
1)請將/home/abc.txt文件的所有者修改為tom
2)請將/home/kkk目錄下所有的文件和目錄的所有者都修改為zwj
首先我們應該使用root用戶來操作。
chgrp [選項] newgroup(改變文件的所有組) file
選項:-R表示遞歸修改其下所有子文件或者目錄
1)請將/home/abc.txt文件的所有組修改成bandit(土匪組)
2)請將/home/kkk目錄下的所有文件和目錄的所在組都修改成bandit(土匪組)
police , bandit
jack,jerry警察
xh , xq:土匪
1)創建組
groupadd police
groupadd bandit
2)創建用戶
將密碼都指定為123
3)jack創建一個文件,自己可以讀寫,本組人可以讀,其他組人沒有任何權限
chmod 640 jack01.txt
也可以用 chmod o= jack01.txt
4)jack修改該文件,讓其他組人可以讀。本組人可以讀寫
5)xq投靠警察,看看是否可以讀寫
先用root修改xq的組:
再使用jack給他的家目錄/home/jack所在組一個rx權限
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3Ih9FvKS-1625659084602)(…/…/…/AppData/Roaming/Typora/typora-user-images/image-20210608155408201.png)]
建立兩個組(神仙,妖怪)
建立四個用戶(唐僧,悟空,八戒,沙僧)
把悟空,八戒放在妖怪組,唐僧沙僧放進神仙組
用悟空建立一個文件(monkey.java該文件要輸出 i am monkey)
給八戒一個rw的權限
唐僧沙僧對該文件沒有權限
把沙僧放入妖怪組
讓沙僧修改該文件monkey,加入一句話(“我是沙僧,我是妖怪!”);
1)用root登錄,建立用戶mycentos,自己設定密碼
2)用mycentos登錄,在主目錄下建立目錄test/t11/t1
3)在t1中建立一個文本文件aa,用vi編輯器內容為ls -al
4)改變aa的權限為可執行文件[可以將當前日期追加到一個文件],運行該文件./aa
5)刪除新建立的目錄test/t11/t1
6)刪除用戶mycentos以及其主目錄中的內容
7)將Linux設置到圖形界面
8)重新啟動Linux或關機
reboot 重啟
halt 關機
crond進行定時任務的設置
任務調度是指在系統的某個時間執行的特定的命令或者程序。
任務調度分類: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
項目 | 含義 | 范圍 |
---|---|---|
第一個“*” | 一小時中的第幾分鐘 | 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分都會執行命令。注意:星期幾和幾號最好不要同時出現,因為他們的定義都是天。非常容易讓管理員混亂 |
案例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
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。備份到文件中。
crontab -r :終止任務調度
crontab -l :列出當前有哪些任務調度
service crond restart [重啟任務調度]
1)mbr分區:
1.最多支持四個主分區
2.系統只能安裝在主分區
3.擴展分區只要占一個主分區
4.MBR最大支持2TB,但擁有最好的兼容性
2)gtp分區:
1.支持多個主分區(但操作系統可能限制,比如Windows下最多128個分區)
2.最大支持18EB的大容量(EB=1024PB,PB=1024TB)
3.windows7 64位以后支持gtp
1)Linux來說無論有幾個分區,分給哪一個目錄使用,它歸根結底就只有一個根目錄,一個獨立且唯一的文件結構,Linux中每一個分區都是用來組成文件系統的一部分。
2)Linux采用一種叫做“載入”的處理方法,它的整個文件系統中包含了一整套文件和目錄,且將一個分區和一個目錄聯系起來。這是要載入一個分區將它的存儲空間在一個目錄下獲得。
3)示意圖
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硬盤的表示方法一樣。
需求是給我們的Linux系統增加一個新的硬盤,并且掛載到/home/newdisk
1)虛擬機添加硬盤
2)分區
fdisk /dev/sdb
3)格式化
mkfs -t ext4 /dev/sdb1 mkfs是格式化的意思
這里表示的是把dev下面的sdb1格式化成ext4類型的文件類型
4)掛載
先創建 /home/newdisk
再進行掛載 mount /dev/sdb1 /home/newdisk
5)設置可以自動掛載(永久掛載,當你重啟機系統后,仍然可以掛載到 /home/newdisk上面去)。
vim /etc/fstab 進入之后加上
/dev/sdb1 /home/newdisk ext4 defaults 0 0
在【虛擬機】菜單中,選擇【設置】,然后設備列表里面添加硬盤,然后一路【下一步】,中間只有選擇磁盤大小的地方需要修改,直至完成。然后重啟系統(才能識別)!
分區命令
fdisk /dev/sdb
開始對/sdb分區
說明:開始分區后輸入n,新增分區,然后選擇p,分區類型為主分區。兩次回車默認全部空間,最后輸入w并退出,若不保存推出輸入q。
格式化磁盤
分區命令:mkfs -t ext4 /dev/sdb1
其中ext4是分區類型
掛載:將一個分區于一個目錄聯系起來
mount 設備名稱 掛載目錄例如:mount /dev/sdb1 /newdisk
umount 設備名稱 或者 掛載目錄 (相當于卸載)例如:umount /dev/sdb1 或者 umount /newdisk
永久掛載:通過修改/etc/fstab實現掛載
添加完成后 執行 mount -a 立即生效
基本語法
查看磁盤占用情況 df -lh
應用實例
基本語法
du -h /目錄
查詢指定目錄的磁盤占用情況,默認為當前目錄
-s 之目錄大小的匯總
-h 帶計量單位
-a 含文件
--max-depth =1 子目錄深度
-c 列出明細的同時,增加匯總值
查詢 /opt 目錄的磁盤占用情況,深度為1
1)統計 /home 文件夾目錄下的個數
ls -l /home | grep "^-" | wc -l
2)統計/home文件夾下目錄的個數
ls -l /home | grep "^d" | wc -l
3)統計 /home 文件夾下文件的個數,包括子文件夾里面的
ls -lR /home | grep "^-" | wc -l 加上了R就將/home下面的文件的個數,包括子文件夾里面的都遞歸統計
4)統計文件夾下目錄的個數,包括子文件夾里面的
ls -lR /home | grep "^d" | wc -l 加上了R就將/home下面的文件的個數,包括子文件夾里面的都遞歸統計
5)以樹狀顯示目錄結構
tree 指令的安裝
yum install tree
?
目前我們采用的是NAT模式。
VMware 編輯 -----> 虛擬網絡配置
1)使用ipconfig查看
2)界面查看
ping 目的主機 (功能描述:測試當前服務器是否可以連接目的主機)
測試當前服務器是否可以訪問百度
ping www.baidu.com
說明:登陸后,通過界面來設置自動獲取IP
特點:Linux啟動后會自動獲取IP,缺點是每次啟動后自動獲取的IP地址可能不一樣。這個不適用于做服務器,因為我們服務器的IP需要是固定的。
直接修改文件來指定IP,并且可以連接到外網(推薦),編輯 vi /etc/sysconfig/network-scripts/ifcfg-ens33(centos7),( vi /etc/sysconfig/network-scripts/ifcfg-eth0 這個為centos6)
要求:將IP地址設置成靜態的,IP地址為192.168.31.128
修改后,一定要重啟服務
1)service network restart
2)reboot 重啟機器
1)在Linux中,每個執行的**程序(代碼)**都成為一個進程。每個進程都分配一個id號。
2)每個進程,都會對應一個父進程,而這個父進程可以復制多個子進程。例如www服務器。
3)每個進程都可能以兩種方式存在。前臺和后臺,所謂前臺進程就是用戶目前屏幕上可以進行的操作。后臺進程實際在操作,由于屏幕上無法看到進程,通常使用后臺方式執行。
4)一般系統的服務都是以后臺進程的方式存在,而且都會常駐在系統中。知道關機才結束。
ps顯示信息選項:
字段 | 說明 |
---|---|
PID | 進程識別號 |
TTY | 終端機號 |
TIME | 此進程所消耗CUP時間 |
CMD | 正在執行的命令或進程名 |
ps -a :顯示當前終端的所有進程信息
ps -u :以用戶的格式顯示進程信息
ps -x :顯示后臺進程運行的參數
ps -aux | more
1)指令:ps -aux | grep xxx ,比如看看有沒有sshd服務
2)指令說明
要求:以全格式顯示當前所有的進程,查看進程的父進程。
思考題,如果我們希望查看sshd進程的父進程號是多少,應該怎么樣查詢?
ps -ef | grep sshd
若是某個進程執行一般需要停止時,或是已消了很大的系統資源時,可以考慮停止該進程。使用kill命令來完成此項任務。
kill [選項] 進程號 (功能描述:通過進程號來殺死進程)
killall 進程名稱 (功能描述:通過進程名稱殺死進程,也支持通配符,這在系統因負載過大而變得很慢時很有用)
-9 表示強迫進程立即停止
案例一:踢掉某個非法登錄的用戶
ps -aux | grep sshd
案例二:終止遠程登陸服務sshd,在適當時候再次重啟sshd服務
ps -aux | grep sshd
kill 1467
ps -aux | grep sshd
案例三:種植多個gedit編輯器 【killall ,通過進程名稱來終止進程】
gedit 執行兩次
killall gedit
案例四:強制殺死一個終端
ps -aux | grep bash
kill -9 [終端端口號]
pstree [選項] ,可以更加直觀的來觀看進程
-p : 顯示進程的PID
-u : 顯示進程的所屬用戶
案例一:請你以樹狀形式顯示進程的pid
pstree -p | more
案例二:請你以樹狀形式顯示用戶的id
pstree -u | more
服務(service)本質就是進程,但是運行在后臺的,同城都會監聽某個端口,等待其他程序的請求,比如(mysql,sshd,防火墻等),因此我們又稱為守護進程,是Linux中非常重要的知識點。
【原理圖】
CentOS7.0 systemctl [start | stop | restart | reload | status |
mask ] 服務名 這里的mask 是表示禁用的意思,reload表示的是重載
service服務指令在/etc/init.d/
systemctl指令管理的服務是在/usr/lib/systemd/system查看
service 服務名 [start | stop | restart | reload | status |mask ]
在CentOS7.0后 不再使用service ,而是systemctl
systemctl [start | stop | restart | reload | status | mask ] 服務名 這個很重要
1、通過chconfig命令可以給服務的各個運行級別設置自 啟動 / 關閉
2、chconfig指令管理的服務在/etc/init.d查看
3、注意:CentOS7后,很多服務使用systemctl管理
案例演示:對network 服務進行各種操作,把network在運行級別3關閉自啟動
chkconfig --level 3 network off
chkconfig --level 3 network on
使用細節
chconfig重新設置服務后自啟動或關閉,需要重啟機器reboot生效
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
查看防火墻的自啟動狀態
systemctl list-unit-files | grep firewalld
systemctl is-enabled firewalld
查看網絡狀態
netstat -anp |more
1)查看當前防火墻的狀況,關閉防火墻和重啟防火墻 ( CentOS7.0中)
systemctl status firewalld firewalld 表示的是防火墻的意思
systemctl stop firewalld 關閉防火墻
1)關閉或者其用防火墻后,立即生效。 [telnet 測試某個端口即可]
2)這種方式這是臨時生效,當重啟系統后,還是回歸以后對服務的設置
3)如果希望設置,某個服務自動啟動或關閉永久生效,使用chekconfig指令。
方式一:使用setup --> 系統服務 就可以看到
setup
方式二: /etc/init.d/服務名稱
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
2、設置運行級別為3號級別
systemctl set-default multi-user.target
3、設置成圖形化界面
systemctl set-default graphical.target
示意圖
在真正的生產環境中,往往需要防火墻打開,如果把防火墻打開,那么外部請求數據包就不能跟服務器監聽通訊。這時,需要打開指定端口。比如80、22、8080等。
打開端口:
firewall-cmd --permanet --add-port=端口號/協議關閉端口:firewall-cmd --permanet --remove-port=端口號/協議需要重新載入,才能生效:firewall-cmd --reload查詢端口是否開放:firewall-cmd --query-port=端口/協議
1、啟用防火墻,測試111端口是否能telnet ,不行
2、開放111端口
3、再次關閉111端口
關閉端口:firewall-cmd --permanet --remove-port =端口號/協議
需要重新載入,才能生效:firewall-cmd --reload
top與ps命令很相似。他們都是用來顯示正在執行的進程。Top與ps的最大不同之處,在于top執行一段時間后可以更新正在運行的進程。
top [選項]
選項 | 功能 |
---|---|
-d 秒數 | 指定top命令每隔幾秒更新。默認是3秒 |
-i | 使top不顯示任何閑置或者僵尸進程 |
-p | 通過指定監控進程ID來僅僅監控某個進程的狀態 |
使用top指令動態監控進程
下圖的zombie是僵尸進程,已經死掉了,但是內存沒有釋放
操作 | 功能 |
---|---|
P | 以CUP使用率排序,默認就是此項 |
M | 一內存使用率排序 |
N | 以PID排序 |
q | 退出top |
案例一:監視特定用戶
top:輸入此命令,按回車鍵,查看執行的進程。
u:然后輸入"u"回車,再輸入用戶名,即可。
案例二:終止此進程,比如我們要結束pzx登錄
top:輸入此命令,按回車鍵,查看執行的進程。
k:然后輸入“k”回車,再輸入要結束的進程的ID號。(然后在輸入9,進行強制殺死)
案例三:指定系統裝態更新的時間(每隔10秒自動更行),默認是3秒
top -d 10
查看系統的網絡狀態情況netstat
netstst [選項]
選項說明
-an 按一定順序排列輸出
-p 顯示哪一個進程在調用
查看系統的網絡狀態情況netstat
查看sshd服務的服務信息
netstat -anp | grep sshd
rpm用于互聯網下載包的打包以安裝工具,它包含在某些Linux發行版中。它生成具有.RPM拓展名的文件。RPM是RedHat Package Manager (RedHat 軟件包管理工具)縮寫,類似于windows中的setup.exe。 Linux的發行版都采用(suse,redhat,centos等等)
查詢已經安裝的rpm列表
rpm -qa | grep xxx
案例演示:請查詢是否安裝firefox
rpm -qa | grep firefox
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
查詢firefox安裝在哪里
rpm -q file firefox
rpm -qf /etc/passwd
rpm -e RPM的名稱
1)刪除firefox軟件包
rpm -e firefox
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 -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/
Yum是一個shell前端軟件包管理器。基于RPM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴關系,并且一次安裝所有依賴的軟件包。(有點像maven)使用yum的前提是可以聯網。
示意圖
查詢yum服務是否具有需要安裝的軟件
yum list | grep xxx軟件列表
安裝指定的yum包
yum install xxx 下載安裝 [-y] -y可選就不會詢問你要不要安裝了
請使用yum的方式來安裝firefox
1)先查看firefox rpm 在yum服務器上有沒有
2)安裝
yum insatll firefox
默認會安裝最新版本的軟件
如果需要在Linux下進行JavaEE開發,需要安裝如下軟件
先將軟件通過xftp7上傳到/opt
解壓縮到/opt
JAVA_HOME=/opt/jdk1.7.0_79
PATH=/opt/jdk1.7.0_79/bin:$PATH
export JAVA_HOME PATH
1、如果是3運行級別,直接logout
2、如果是5運行級別 (可以使用 source /etc/profile 來刷新配置文件)
先用javac指令生成字節碼文件,再用java指令運行。
javac Hello.java
java Hello
1、先通過xftp傳輸壓縮包到Linux上,然后解壓到/opt
tar -zxvf apache-tomcat-7.0.70.tar.gz
2、啟動tomca ./startup.sh
先進入到tomcat的bin目錄
./startup.sh 啟動tomcat
使用Linux本地的瀏覽器是可以訪問到tomcat
3)開放放端口 vim/etc/sysconfig/firewall
在windows下訪問http://localhost:8080/
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
2)啟動eclipse,配置jre和server
cd 切換到eclipse目錄下
然后再用 ./eclipse 進行啟動
3)編寫Hello World程序并測試成功
4)編寫jsp頁面并測試成功
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/
1)Linux運維工程師再進行對服務器集群管理時,需要編寫shell程序來進行服務器的管理。
2)對于JavaEE和python程序員來說,工作需要,需要些shell腳本進行程序或者是服務器的維護,比如編寫一個定時備份數據庫的腳本。
3)對于大數據程序員來說,需要編寫Shell程序來管理集群。
shell是一個命令行解釋器,它為用戶提供一個向Linux內核發送請求以便運行程序的界面系統級程序,用戶可以用shell來啟動、掛起、停止甚至是編寫一些程序。
1)腳本以#!/bin/bash開頭 (告訴編輯器是用bash來進行解析的)
2)腳本需要有可執行權限
需求說明
創建一個shell腳本,輸出hello world!
查看案例:
方式一:(輸入腳本的絕對路徑或者相對路徑)
1)首先要賦予helloworld.sh腳本的 +x權限
方式二(sh+腳本,不推薦使用)
說明:不用賦予腳本+x權限,直接執行即可
1)Linux Shell 中的變量分為,系統變量和用戶自定義變量。
2)系統變量:SHOME 、 PWD、PWD 、PWD、SHELL、 $USER等等
比如:echo $HOME 等等
3)顯示當前shell中的所有變量:set
基本語法
1)定義變量:變量=值
2)撤銷變量:unset 變量
3)聲明靜態變量:readonly 變量,注意:不能用unset
快速入門
案例1:定義變量A
案例2:撤銷變量A
? 案例3:聲明一個只讀變量B=2 (readonly 就相當于Java中的final),不能unset
案例四:可以把一個變量提升為一個全局環境變量,可供其他shell程序使用
1)變量名稱可以由字母數字和下劃線組成,但是不能以數字開頭。
2)等號兩側不能有空格
3)變量名稱一般習慣大寫
A=`ls -la`反引號,運行里面的命令,并把結果返回給變量A
1)export 變量名=變量值 (功能描述:將shell變量輸出為環境變量)
2)source 配置文件 (功能描述:讓修改后的文件信息立即生效)
3)在另一個shell程序中使用TOMCAT_HOME
注意:在輸出TOMCAT_HOME環境變量前,要讓起生效
這個是刷新配置文件的意思:source/etc/profile
多行注釋 :<<! 要注釋的內容 !
當我們執行一個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,在腳本中獲得命令行中各個參數信息
就是shell設計者事先已經定義好的變量,可以直接在shell腳本中使用。
$$ (功能描述:當前進程的進程號(pid))
$! (功能描述:后臺運行的最后一個進程的進程號(pid))
$? (功能描述:最后一次執行的命令的返回狀態。如果這個變量的值為0,證明上一個命令正確執行;如果這個變量的值為非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確了。)
在一個shell腳本中簡單使用一下預定義變量。
學習如何在shell中進行運算操作
1)“((運算式))”或“((運算式))” 或 “((運算式))”或“[運算式]”
2)expr m + n
注意expr運算符間要有空格
3)expr m -n
4)expr \* , / , % 乘,除,取余 (expr : expression)
案例一:計算(2+3)X4的值
案例二:請求算出命令行兩個參數之和
[ 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”
判斷語句:
案例二:判斷23是否大于等于22
這里的結束 fi ,就是把 if 反著寫,后面的要學的 case 結束的關鍵字就是 esac
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳
案例三:判斷/root/shell/aaa.txt是否存在
判斷語句:
if [ 條件判斷式 ];then程序elif [ 條件判斷式 ]then程序
fi
或者
if [ 條件判斷式 ] then程序elif [ 條件判斷式 ]then程序
fi
注意事項:(1)[ 條件判斷式 ] ,中括號和條件判斷式之間必須有空格
(2)推薦使用第二種方式
#案例:請編寫一個shell程序,如果輸入的參數大于等于60,則輸出”及格了“ ,如果小于60,則輸出“不及格”
case $變量名 in
"值1")
如果變量名等于值1,則執行程序1
;;
"值2")
如果變量等于值2,則執行程序2
;;
...省略其他分支...
*)
如果變量的值都不是以上的值,則執行此程序
;;
esac
案例1:當命令行參數是1時,輸出“周一”,是2時,輸出“周二”,其他情況輸出“other”
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳
for 變量 in 值1 值2 值3 ...
do
程序
done
案例1:打印命令行輸入的參數【會使用到$* $@】
這里的$i表示的是引用上面的i的意思
for ((初始值;循環控制條件;變量變化))
do
程序
done
案例1:從一加到一百的值輸出顯示[這里可以看出$* 和 $@的區別]
#!/bin/bash
#求1到100的值
#定義一個結果變量
sum=0
for ((i=1;i <= 100 ;i++ ))do
sum=$[ $sum+i ]
done
echo "sum=$sum"
while [條件判斷式]
do
程序
done
案例一:從命令行輸出一個數n,統計從1+…+n的值是多少?
read (選項) (參數)
選項:
-p :指定讀取時的提示符號
-t :指定讀取時等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待了
參數
變量:指定讀取值的變量名
案例一:從控制臺讀取一個num值。
?
案例二:讀取控制臺輸入一個num值,在10秒內輸入。
shell編程和其它語言一樣,有系統函數,也可以有自定義函數。在系統函數中,就介紹這兩個。
功能:返回完整路徑下最后 / 部分,常用于獲取文件名
basename [pathname] [suffix]
basename [string] [suffix] 功能描述:basename命令會刪掉所有的前綴包括最后一個('/')
字符,然后將字符顯示出來
選項
suffix 為后綴,如果suffix被指定了,basename會將pathname或string中的suffix去掉
案例一:請返回 /home/aaa/test.txt的”test.txt“部分
功能:返回完整路徑最后 / 的前面的部分,常用于返回路徑部分
dirname文件絕對路徑(功能描述:從給定的包含絕對路徑的文件中去除文件名(非目錄部分),然后返回剩下的路徑(目錄部分))
案例一:請返回/home/aaa/test.txt的/home/aaa
[ function ] funname [()]
{Action;[return int;]}
調用直接寫函數名: funname
注意[]這個是可選的,里面的內容可寫可不寫
案例1:計算輸出兩個參數的和,getSum
編寫一個shell腳本。
思路分析:
代碼實現:
#!/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 變量 in 值1 值2 值3 ...
do
程序
done
案例1:打印命令行輸入的參數【會使用到$* $@】
這里的$i表示的是引用上面的i的意思
for ((初始值;循環控制條件;變量變化))
do
程序
done
案例1:從一加到一百的值輸出顯示[這里可以看出$* 和 $@的區別]
#!/bin/bash
#求1到100的值
#定義一個結果變量
sum=0
for ((i=1;i <= 100 ;i++ ))do
sum=$[ $sum+i ]
done
echo "sum=$sum"
while [條件判斷式]
do
程序
done
案例一:從命令行輸出一個數n,統計從1+…+n的值是多少?
read (選項) (參數)
選項:
-p :指定讀取時的提示符號
-t :指定讀取時等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待了
參數
變量:指定讀取值的變量名
案例一:從控制臺讀取一個num值。
案例二:讀取控制臺輸入一個num值,在10秒內輸入。
shell編程和其它語言一樣,有系統函數,也可以有自定義函數。在系統函數中,就介紹這兩個。
功能:返回完整路徑下最后 / 部分,常用于獲取文件名
basename [pathname] [suffix]
basename [string] [suffix] 功能描述:basename命令會刪掉所有的前綴包括最后一個('/')
字符,然后將字符顯示出來
選項
suffix 為后綴,如果suffix被指定了,basename會將pathname或string中的suffix去掉
案例一:請返回 /home/aaa/test.txt的”test.txt“部分
功能:返回完整路徑最后 / 的前面的部分,常用于返回路徑部分
dirname文件絕對路徑(功能描述:從給定的包含絕對路徑的文件中去除文件名(非目錄部分),然后返回剩下的路徑(目錄部分))
案例一:請返回/home/aaa/test.txt的/home/aaa
[ function ] funname [()]
{Action;[return int;]}
調用直接寫函數名: funname
注意[]這個是可選的,里面的內容可寫可不寫
案例1:計算輸出兩個參數的和,getSum
編寫一個shell腳本。
思路分析:
代碼實現:
#!/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 "======備份文件成功======"
2021/7/7Linux學習完結撒花
77事變84周年,吾輩當自強
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态