用html制作網(wǎng)頁(yè)青島seo關(guān)鍵詞
目錄
?My學(xué)習(xí)Linux命令小記錄(12)?
46.arp指令
47.tcpdump指令
48.chmod指令
49.chown指令
50.bash調(diào)用腳本指令
shell介紹
shell腳本的組成部分
腳本執(zhí)行方式
檢查腳本語(yǔ)法
bash之變量
變量的種類(lèi):根據(jù)生效的范圍不同來(lái)區(qū)分
bash的配置文件
profile類(lèi):為交互式登錄的shell提供配置
bashrc類(lèi):為非交互式登錄的shell提供配置
bash的IO重定向
bash算數(shù)運(yùn)算:bash對(duì)數(shù)字進(jìn)行隱式的類(lèi)型轉(zhuǎn)換
bash條件測(cè)試
bash的測(cè)試類(lèi)型:
文件測(cè)試:測(cè)試文件存在與否,屬性信息等
bash的邏輯運(yùn)算:true(0)、false(1-255)
編寫(xiě)腳本backup.sh,可實(shí)現(xiàn)每日將/etc/目錄備份到 /root/etcYYYY-mm-dd中
編寫(xiě)腳本nologin.sh和login.sh,實(shí)現(xiàn)禁止和允許普通用戶登錄系統(tǒng)
編寫(xiě)腳本disk.sh,顯示當(dāng)前硬盤(pán)分區(qū)中空間利用率最大的值??????????????????????????????????????????????????????????????????
?My學(xué)習(xí)Linux命令小記錄(12)?
46.arp指令
功能說(shuō)明:arp 命令用于顯示和修改 IP 到 MAC 轉(zhuǎn)換表。
(ps.arp 命令是 Address Resolution Protocol,地址解析協(xié)議,是通過(guò)解析網(wǎng)絡(luò)層地址來(lái)找尋數(shù)據(jù)鏈路層地址的一個(gè)網(wǎng)絡(luò)協(xié)議包中極其重要的網(wǎng)絡(luò)傳輸協(xié)議。而該命令可以顯示和修改 arp 協(xié)議解析表中的緩沖數(shù)據(jù)。它將 IP 地址映射到物理 MAC 地址。) ??
基本語(yǔ)法:arp(選項(xiàng))(參數(shù))
選項(xiàng):
-a 主機(jī) :顯示 arp 緩沖區(qū)的所有條目;
-H 地址類(lèi)型 :指定 arp 指令使用的地址類(lèi)型;
-d 主機(jī) :從 arp 緩沖區(qū)中刪除指定主機(jī)的 arp 條目;
-D:使用指定接口的硬件地址;
-e:以 Linux 的顯示風(fēng)格顯示 arp 緩沖區(qū)中的條目;
-i 接口 :指定要操作 arp 緩沖區(qū)的網(wǎng)絡(luò)接口;
-s 主機(jī) MAC 地址 :設(shè)置指定的主機(jī)的 IP 地址與 MAC 地址的靜態(tài)映射;
-n:以數(shù)字方式顯示 arp 緩沖區(qū)中的條目;
-v:顯示詳細(xì)的?arp 緩沖區(qū)條目,包括緩沖區(qū)條目的統(tǒng)計(jì)信息;
-f 文件 :設(shè)置主機(jī)的 IP 地址與 MAC 地址的靜態(tài)映射。
實(shí)例:
# arp -a??#顯示系統(tǒng)的 ARP 表
# arp -v??#顯示arp 緩沖區(qū)內(nèi)容
#添加靜態(tài) arp 映射
arp?-s?IP?MAC-ADDRESS
arp -s?192.168.1.1?00:b1:b2:b3:b4:b5??
#刪除?arp 緩存條目
arp -d?192.168.1.1
47.tcpdump指令
功能說(shuō)明:一款sniffer工具,是Linux上的抓包工具,嗅探器。
(ps.tcpdump命令是一款抓包,嗅探器工具,它可以打印所有經(jīng)過(guò)網(wǎng)絡(luò)接口的數(shù)據(jù)包的頭信息,也可以使用-w選項(xiàng)將數(shù)據(jù)包保存到文件中,方便以后分析。)
基本語(yǔ)法:tcpdump(選項(xiàng))
選項(xiàng):
-a:嘗試將網(wǎng)絡(luò)和廣播地址轉(zhuǎn)換成名稱;
-c<數(shù)據(jù)包數(shù)目>:收到指定的數(shù)據(jù)包數(shù)目后,就停止進(jìn)行傾倒操作;
-d:把編譯過(guò)的數(shù)據(jù)包編碼轉(zhuǎn)換成可閱讀的格式,并傾倒到標(biāo)準(zhǔn)輸出;
-dd:把編譯過(guò)的數(shù)據(jù)包編碼轉(zhuǎn)換成C語(yǔ)言的格式,并傾倒到標(biāo)準(zhǔn)輸出;
-ddd:把編譯過(guò)的數(shù)據(jù)包編碼轉(zhuǎn)換成十進(jìn)制數(shù)字的格式,并傾倒到標(biāo)準(zhǔn)輸出;
-e:在每列傾倒資料上顯示連接層級(jí)的文件頭;
-f:用數(shù)字顯示網(wǎng)際網(wǎng)絡(luò)地址;
-F<表達(dá)文件>:指定內(nèi)含表達(dá)方式的文件;
-i<網(wǎng)絡(luò)界面>:使用指定的網(wǎng)絡(luò)截面送出數(shù)據(jù)包;
-l:使用標(biāo)準(zhǔn)輸出列的緩沖區(qū);
-n:不把主機(jī)的網(wǎng)絡(luò)地址轉(zhuǎn)換成名字;
-N:不列出域名;
-O:不將數(shù)據(jù)包編碼最佳化;
-p:不讓網(wǎng)絡(luò)界面進(jìn)入混雜模式;
-q :快速輸出,僅列出少數(shù)的傳輸協(xié)議信息;
-r<數(shù)據(jù)包文件>:從指定的文件讀取數(shù)據(jù)包數(shù)據(jù);
-s<數(shù)據(jù)包大小>:設(shè)置每個(gè)數(shù)據(jù)包的大小;
-S:用絕對(duì)而非相對(duì)數(shù)值列出TCP關(guān)聯(lián)數(shù);
-t:在每列傾倒資料上不顯示時(shí)間戳記;
-tt: 在每列傾倒資料上顯示未經(jīng)格式化的時(shí)間戳記;
-T<數(shù)據(jù)包類(lèi)型>:強(qiáng)制將表達(dá)方式所指定的數(shù)據(jù)包轉(zhuǎn)譯成設(shè)置的數(shù)據(jù)包類(lèi)型;
-v:詳細(xì)顯示指令執(zhí)行過(guò)程;
-vv:更詳細(xì)顯示指令執(zhí)行過(guò)程;
-x:用十六進(jìn)制字碼列出數(shù)據(jù)包資料;
-w<數(shù)據(jù)包文件>:把數(shù)據(jù)包數(shù)據(jù)寫(xiě)入指定的文件。
實(shí)例:
# tcpdump ??#直接啟動(dòng)tcpdump將監(jiān)視第一個(gè)網(wǎng)絡(luò)接口上所有流過(guò)的數(shù)據(jù)包
#?tcpdump?-i eth0 ??#捕獲指定網(wǎng)絡(luò)接口的所有數(shù)據(jù)包
# tcpdump udp port?123???#對(duì)本機(jī)的udp 123 端口進(jìn)行監(jiān)視 123 為ntp的服務(wù)端口
# tcpdump -i any?port 80 -A???#抓取80端口的HTTP報(bào)文,以文本形式展示
#?tcpdump?ip?and not net localnet???#打印所有源地址或目標(biāo)地址是本地主機(jī)的IP數(shù)據(jù)包(如果本地網(wǎng)絡(luò)通過(guò)網(wǎng)關(guān)連到了另一網(wǎng)絡(luò),則另一網(wǎng)絡(luò)并不能算作本地網(wǎng)絡(luò)。)
# tcpdump?host 192.168.1.1 ??#捕獲指定主機(jī)的數(shù)據(jù)包
# tcpdump?src port?80?or dst port?80 ??#捕獲源或目標(biāo)端口為80的數(shù)據(jù)包
# tcpdump -X ??#顯示數(shù)據(jù)包的內(nèi)容(以16進(jìn)制和ASCII形式)
# tcpdump -i eth0?-w?capture.pcap???#將捕獲的數(shù)據(jù)包保存到文件中
# tcpdump -r?capture.pcap???#從保存的文件中讀取數(shù)據(jù)包進(jìn)行分析
# tcpdump -v ??#顯示捕獲的數(shù)據(jù)包的包頭信息
# tcpdump -vv???#顯示更詳細(xì)的包頭信息
# tcpdump?-i eth0 -n?'tcp port 80'???#捕獲并顯示特定協(xié)議的數(shù)據(jù)包(例如,只顯示HTTP流量)
48.chmod指令
功能說(shuō)明:用來(lái)變更文件或目錄的權(quán)限。
(ps.chmod命令 用來(lái)變更文件或目錄的權(quán)限。在UNIX系統(tǒng)家族里,文件或目錄權(quán)限的控制分別以讀取、寫(xiě)入、執(zhí)行3種一般權(quán)限來(lái)區(qū)分,另有3種特殊權(quán)限可供運(yùn)用。用戶可以使用chmod指令去變更文件與目錄的權(quán)限,設(shè)置方式采用文字或數(shù)字代號(hào)皆可。符號(hào)連接的權(quán)限無(wú)法變更,如果用戶對(duì)符號(hào)連接修改權(quán)限,其改變會(huì)作用在被連接的原始文件。)
權(quán)限范圍的表示法如下:
u?User,即文件或目錄的擁有者;
g?Group,即文件或目錄的所屬群組;
o?Other,除了文件或目錄擁有者或所屬群組之外,其他用戶皆屬于這個(gè)范圍;
a?All,即全部的用戶,包含擁有者,所屬群組以及其他用戶;
r?讀取權(quán)限,數(shù)字代號(hào)為“4”;
w?寫(xiě)入權(quán)限,數(shù)字代號(hào)為“2”;
x?執(zhí)行或切換權(quán)限,數(shù)字代號(hào)為“1”;
-?不具任何權(quán)限,數(shù)字代號(hào)為“0”;
s?特殊功能說(shuō)明:變更文件或目錄的權(quán)限。
基本語(yǔ)法:?chmod(選項(xiàng))(參數(shù))
選項(xiàng):
u ?# 操作對(duì)象簡(jiǎn)稱,用戶user,文件或目錄的所有者。
g ?# 操作對(duì)象簡(jiǎn)稱,同組用戶group,文件或目錄所屬群組
o ?# 操作對(duì)象簡(jiǎn)稱,其它用戶others
a ?# 操作對(duì)象簡(jiǎn)稱,所有用戶all,系統(tǒng)默認(rèn)使用此項(xiàng)
+ ?# 權(quán)限操作符,添加某些權(quán)限
- ?# 權(quán)限操作符,取消某些權(quán)限
= ?# 權(quán)限操作符,設(shè)置文件的權(quán)限為給定的權(quán)限
r ?# 權(quán)限設(shè)定(英文),表示可讀權(quán)限
w ?# 權(quán)限設(shè)定(英文),表示可寫(xiě)權(quán)限
x ?# 權(quán)限設(shè)定(英文),表示可執(zhí)行權(quán)限
- ?# 權(quán)限設(shè)定(英文字符),表示沒(méi)有權(quán)限
X ?# 權(quán)限設(shè)定,如果目標(biāo)文件是可執(zhí)行文件或目錄,可給其設(shè)置可執(zhí)行權(quán)限
s ?# 權(quán)限設(shè)定,設(shè)置權(quán)限suid和sgid,使用權(quán)限組合“u+s”設(shè)定文件的用戶的ID位,“g+s”設(shè)置組ID位
t ?# 權(quán)限設(shè)定,只有目錄或文件的所有者才可以刪除目錄下的文件
-c或——changes ???# 效果類(lèi)似“-v”參數(shù),但僅回報(bào)更改的部分,如果文件權(quán)限已經(jīng)改變,顯示其操作信息;
-f或--quiet或——silent # 操作過(guò)程中不顯示任何錯(cuò)誤信息;
-R或——recursive ?# 遞歸處理,將指令目錄下的所有文件及子目錄一并處理;
-v或——verbose ???# 顯示命令運(yùn)行時(shí)的詳細(xì)執(zhí)行過(guò)程;
--reference=<參考文件或目錄> # 把指定文件或目錄的所屬群組全部設(shè)成和參考文件或目錄的所屬群組相同;
<權(quán)限范圍>+<權(quán)限設(shè)置> # 開(kāi)啟權(quán)限范圍的文件或目錄的該選項(xiàng)權(quán)限設(shè)置;
<權(quán)限范圍>-<權(quán)限設(shè)置> # 關(guān)閉權(quán)限范圍的文件或目錄的該選項(xiàng)權(quán)限設(shè)置;
<權(quán)限范圍>=<權(quán)限設(shè)置> # 指定權(quán)限范圍的文件或目錄的該選項(xiàng)權(quán)限設(shè)置;
--help ???# 顯示幫助信息
--version # 顯示版本信息
知識(shí)擴(kuò)展和實(shí)例:
Linux用戶分為:擁有者、組群(Group)、其他(other),Linux系統(tǒng)中,預(yù)設(shè)的情況下,系統(tǒng)中所有的帳號(hào)與一般身份使用者,以及root的相關(guān)信息, 都是記錄在/etc/passwd文件中。每個(gè)人的密碼則是記錄在/etc/shadow文件下。 此外,所有的組群名稱記錄在/etc/group內(nèi)!
linux文件的用戶權(quán)限的分析圖
??-rw-r--r-- ??1 user ?staff ??651 Oct 12 12:53 .gitmodules
# ↑╰┬╯╰┬╯╰┬╯
# ┆ ┆ ?┆ ?╰┈ 0 其他人
# ┆ ┆ ?╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 屬組
# ┆ ╰┈┈┈┈ u 屬組
# ╰┈┈ 第一個(gè)字母 `d`?代表目錄,`-` 代表普通文件
例:rwx rw- r--
r=讀取屬性 //值=4
w=寫(xiě)入屬性 //值=2
x=執(zhí)行屬性 //值=1
#?chmod u+x,g+w abc.txt # 為文件abc.txt設(shè)置自己可以執(zhí)行,組員可以寫(xiě)入的權(quán)限
# chmod u=rwx,g=rw,o=r?abc.txt??#給文件abc.txt設(shè)置權(quán)限,使用者權(quán)限為rwx即可讀可寫(xiě)可執(zhí)行,組員權(quán)限可讀可寫(xiě)不可執(zhí)行,其他人權(quán)限只可讀
#?chmod 764?abc.txt ?#為文件abc.txt增加權(quán)限764,使用者權(quán)限7(4+2+1)讀可寫(xiě)可執(zhí)行,組員權(quán)限6(4+2)可讀可寫(xiě)不可執(zhí)行,其他人權(quán)限4(4)只可讀
#?chmod a+x?abc.txt ???# 對(duì)文件abc.txt的u,g,o都設(shè)置可執(zhí)行屬性
將/home/wwwroot/里的所有文件和文件夾設(shè)置為755權(quán)限
①# chmod -R?755?/home/wwwroot/*
②# cd /home/wwwroot
# chmod?-Rv?755 * ????#注意:“*”表示通配符,指的是所有文件和文件
#?sudo chmod?o+rw /shared ?#設(shè)置文件夾權(quán)限以保證其余用戶可以訪問(wèn)它
49.chown指令
功能說(shuō)明:用來(lái)變更文件或目錄的擁有者或所屬群組。
(ps.chown命令 改變某個(gè)文件或目錄的所有者和所屬的組,該命令可以向某個(gè)用戶授權(quán),使該用戶變成指定文件的所有者或者改變文件所屬的組。用戶可以是用戶或者是用戶D,用戶組可以是組名或組id。文件名可以使由空格分開(kāi)的文件列表,在文件名中可以包含通配符。
只有文件主和超級(jí)用戶才可以便用該命令。)
語(yǔ)法:chown(選項(xiàng))(參數(shù))
選項(xiàng):
-c或——changes:效果類(lèi)似“-v”參數(shù),但僅回報(bào)更改的部分;
-f或--quite或——silent:不顯示錯(cuò)誤信息;
-h或--no-dereference:只對(duì)符號(hào)連接的文件作修改,而不更改其他任何相關(guān)文件;
-R或——recursive:遞歸處理,將指定目錄下的所有文件及子目錄一并處理;
-v或——version:顯示指令執(zhí)行過(guò)程;
--dereference:效果和“-h”參數(shù)相同;
--help:在線幫助;
--reference=<參考文件或目錄>:把指定文件或目錄的擁有者與所屬群組全部設(shè)成和參考文件或目錄的擁有者與所屬群組相同;
--version:顯示版本信息。
實(shí)例:
# chown -R?rosy /usr/meng ?#將目錄/usr/meng及其下面的所有文件、子目錄的文件主改成 rosy
50.bash調(diào)用腳本指令
編程語(yǔ)言分為兩種
過(guò)程式:以指令為中心,數(shù)據(jù)服務(wù)于指令
對(duì)象式:以數(shù)據(jù)為中心,指令服務(wù)于數(shù)據(jù)
shell介紹
shell是一個(gè)用C語(yǔ)言編寫(xiě)的程序,它是用戶使用Linux系統(tǒng)的窗口,一個(gè)橋梁,起到人機(jī)交互的作用。
shell既是一種命令語(yǔ)言,又是一種簡(jiǎn)單的程序設(shè)計(jì)語(yǔ)言,為什么說(shuō)簡(jiǎn)單,因?yàn)橛泻芏鄰?fù)雜的工作不用Shell去做。
shell本身是一種應(yīng)用程序,運(yùn)行與內(nèi)核之上,這個(gè)應(yīng)用程序?yàn)樘峁┝艘粋€(gè)界面,用戶可通過(guò)這個(gè)界面訪問(wèn)操作系統(tǒng)內(nèi)核的服務(wù)。shell是Linux系統(tǒng)內(nèi)嵌的,安裝操作系統(tǒng)之后看到的界面就是一個(gè)shell程序提供的界面。
shell程序: 是一個(gè)過(guò)程式的解釋器,把源代碼翻譯成機(jī)器語(yǔ)言,然后執(zhí)行,對(duì)于過(guò)程式語(yǔ)言來(lái)講,是一行一行翻譯并執(zhí)行的;
shell腳本的組成部分
shell程序開(kāi)頭的環(huán)境指定:稱之為shebang,如下:
#!/bin/bash
#!/bin/python
#!/bin/perl
shebang是告訴操作系統(tǒng)內(nèi)核通過(guò)哪一個(gè)解釋器來(lái)執(zhí)行當(dāng)前腳本;
#:行首為#號(hào)則為注釋行,額外的解釋信息
第一個(gè)腳本
#!/bin/bash
echo "Hello World !!!"
腳本執(zhí)行方式
需給予腳本執(zhí)行權(quán)限
#?chmod +x hello.sh
通過(guò)腳本文件所在絕對(duì)路徑進(jìn)行執(zhí)行
# /root/hello.sh
直接運(yùn)行解釋器,將腳本作為解釋器的參數(shù)來(lái)執(zhí)行
#?sh?hello.sh
檢查腳本語(yǔ)法
bash -n?:測(cè)試語(yǔ)法是否正確
bahs -x?:查看腳本執(zhí)行過(guò)程
bash -xv?:更詳細(xì)的查看腳本執(zhí)行過(guò)程
例:bash?-x hello.sh
bash之變量
變量=變量名+指向的內(nèi)存空間
將數(shù)據(jù)存放于內(nèi)存中,為了方便使用,為這段數(shù)據(jù)取了個(gè)名字,使用時(shí),直接調(diào)用變量名,系統(tǒng)會(huì)根據(jù)變量名指向的數(shù)據(jù)位置將數(shù)據(jù)提取,進(jìn)行使用。
變量賦值:就是將數(shù)據(jù)存儲(chǔ)于這個(gè)變量名指向的內(nèi)存空間的過(guò)程
變量的類(lèi)型:定義數(shù)據(jù)存儲(chǔ)的格式
①字符型
②數(shù)值型:整數(shù)型、浮點(diǎn)型
對(duì)于編程語(yǔ)言來(lái)說(shuō)變量還分為:強(qiáng)類(lèi)型和弱類(lèi)型,bash為弱類(lèi)型變量語(yǔ)言,如果沒(méi)有明確表明,bash把所有變量統(tǒng)統(tǒng)視為字符型,而當(dāng)我們運(yùn)算時(shí),bash會(huì)自動(dòng)將變量值轉(zhuǎn)為數(shù)值型。bash不支持浮點(diǎn)型,除非借助外部工具。
bash中的變量無(wú)需事先聲明,隨用隨時(shí)到內(nèi)存空間中定義。
變量的種類(lèi):根據(jù)生效的范圍不同來(lái)區(qū)分
本地變量:范圍是當(dāng)前shell進(jìn)程
環(huán)境變量:范圍是當(dāng)前shell進(jìn)程和子shell進(jìn)程
局部變量:范圍是當(dāng)前shell進(jìn)程某個(gè)代碼塊(通常指函數(shù))
位置變量:用于放在腳本代碼塊中調(diào)用通過(guò)命令行傳遞給腳本的參數(shù)
特殊變量:
$?:命令執(zhí)行的狀態(tài)值,值的范圍0-255,其中0為真,表示命令執(zhí)行成功,1-255為假,表示命令執(zhí)行失敗。
$#:傳遞給腳本的參數(shù)的個(gè)數(shù)。
$*:傳遞給腳本的所有參數(shù),全部參數(shù)合為一個(gè)字符串。
$@:傳遞給腳本的所有參數(shù),每個(gè)參數(shù)為獨(dú)立字符串。
$0:表示命令本身。
本地變量:
變量賦值:name="value"
value的值也可以引用:
可以直接使用字符串:name="username"
可以使其他變量的值:name="$username"
可以直接引用命令的值:name=`hostname`或者name=#(hostname);
變量引用:${var_name},可簡(jiǎn)寫(xiě)為$var_name
"":弱引用,其中的變量引用會(huì)被替換成變量的值
例:[root@centos_7 ~]# NUM="$PATH";echo $NUM ????????????
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
'':強(qiáng)引用,其中的變量引用不會(huì)被替換,而是保留引號(hào)內(nèi)原字符串
例:[root@centos_7 ~]# NUM='$PATH';echo $NUM ?
$PATH
``:命令引用,如括號(hào)內(nèi)是命令,會(huì)被識(shí)別,返回的是命令執(zhí)行完成的值
?? 例:[root@centos_7 ~]# NUM=`seq 1 10`;echo $NUM
1 2 3 4 5 6 7 8 9 10
查看變量:set
撤銷(xiāo)變量:unset name
輸出變量:echo $name
環(huán)境變量:
變量賦值:export name=value
???declare -x?name=value
查看變量:export、declare、env
撤銷(xiāo)變量:unset name
輸出變量:echo $name
bash有許多內(nèi)建的環(huán)境變量:
PATH,PWD,USER,HOSTNAME,SHELL,UID,HOME等等
只讀變量:只讀變量的證明周期為當(dāng)前shell進(jìn)程的生命周期,隨著shell進(jìn)程的終止而終止
變量賦值:declare -r name
??readonly name?
位置變量:$1,$2……$10,對(duì)應(yīng)第1,第2個(gè)參數(shù)
shift:輪替,將第1個(gè)參數(shù)踢掉,第2個(gè)參數(shù)變?yōu)榈谝粋€(gè)參數(shù),可一次踢多個(gè),shift#;
set –?:清空所有位置變量
命令行中定義的變量會(huì)隨著當(dāng)前shell進(jìn)程的生命周期,Shell進(jìn)程結(jié)束,變量時(shí)效
變量名的命名規(guī)則:
只能用數(shù)字,字母,下劃線,且不能使數(shù)字開(kāi)頭。
變量名盡量做到見(jiàn)名知意
且不能使用程序的保留字,如PATH、PWD、if、else之類(lèi)的 。
bash的配置文件
全局配置文件:對(duì)當(dāng)前主機(jī)所有用生效
/etc/profile
/etc/profile.d/*.sh
個(gè)人配置文件:只對(duì)當(dāng)前用戶生效
.bash_profile
.bashrc
按照功能分,分為兩類(lèi):
profile類(lèi):為交互式登錄的shell提供配置
交互式登錄:直接通過(guò)某終端輸入賬號(hào)和密碼后登錄打開(kāi)的shell進(jìn)程
使用su -命令登陸的方式:su - username
全局:/etc/profile,/etc/profile.d/*.sh
個(gè)人:.bash_profile
作用:用于定義環(huán)境變量
??運(yùn)行命令或腳本
交互式登錄方式文件的讀取順序:
/etc/profile --> /etc/profile.d/*.sh --> .bash_profile --> /etc/bashrc --> .bashrc
注意:僅管理員可修改全局配置文件
bashrc類(lèi):為非交互式登錄的shell提供配置
非交互式登錄:圖形界面下打開(kāi)的終端
??使用su username
??運(yùn)行腳本
全局:/etc/bashrc
個(gè)人:.bashrc
作用:定義本地變量
??定義命令別名
非交互式登錄文件的讀取順序:
.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
配置文件定義的特性,只對(duì)隨后的shell進(jìn)程生效
讓通過(guò)編輯配置穩(wěn)健的特性立即生效:
退出并重新登錄
通過(guò)命令行重復(fù)定義一次
讓shell進(jìn)程重讀配置文件
source FileName
. FileName
bash的IO重定向
輸出重定向:
> :覆蓋輸出
>> :追加輸出,在原有文件的尾部添加內(nèi)容
set -C??:禁止覆蓋輸出重定向至已存在的文件
>| :強(qiáng)行覆蓋輸出
set +C :關(guān)閉上述特性
錯(cuò)誤輸出重定向:
2> :錯(cuò)誤覆蓋
2>> :錯(cuò)誤追加
合并正常輸出和錯(cuò)誤輸出:
&> :覆蓋
&>> :追加
/dev/null:相當(dāng)于一個(gè)垃圾箱,當(dāng)我們不需要將命令執(zhí)行結(jié)果輸出至屏幕時(shí),可使用&> /dev/null,把結(jié)果丟進(jìn)垃圾箱,只判斷命令執(zhí)行狀態(tài)返回值;
重定向?qū)懭胛募?/strong>:
cat << EOF
content
...
EOF
----
cat > /PATH/TO/FILE << EOF
content
……
EOF
bash算數(shù)運(yùn)算:bash對(duì)數(shù)字進(jìn)行隱式的類(lèi)型轉(zhuǎn)換
+,-,*,/,%(取模),**(乘方)
實(shí)現(xiàn)算數(shù)運(yùn)算:
let var=算數(shù)表達(dá)式,如:let var=1+2
??例:
[root@centos_7 ~]# let var=1+2
[root@centos_7 ~]# echo $var
3
var=$[算數(shù)表達(dá)式],如:var=$[1+2]
var=$((算數(shù)表達(dá)式)),如:var=$((1+2))
echo '算數(shù)表達(dá)式' | bc ,如echo ‘1+2’ | bc
expr 數(shù)值1 運(yùn)算符 數(shù)值2,如expr 1 + 2
增強(qiáng)型復(fù)制:
+=,-=,*=,/=,%=
使用方法:let 變量名運(yùn)算符算數(shù)表達(dá)式
例:let=i+=1即i=i+1
自增,自減
let i+=1?即let i++
let i-=1?即let i--
?例:
[root@centos_7 ~]# let i++;echo $i
1
[root@centos_7 ~]# let i++;echo $i
2
[root@centos_7 ~]# let i++;echo $i
3
bash條件測(cè)試
判斷某條件是否滿足,滿足則完成某項(xiàng)任務(wù),不滿足則退出
條件測(cè)試命令的表達(dá)式:
test 表達(dá)式
[ 表達(dá)式 ]
[[ 表達(dá)式 ]]
與[ ]不同,[[ ]]雙括號(hào)內(nèi)支持正則表達(dá)式,而[ ]單括號(hào)不支持
常用例:N=abc;[[ $N =~ ^[0-9]+$ ]] && echo true || echo false :解釋為,如果$N的值為整數(shù)型,則返回true,否則返回false。
注意:表達(dá)式兩邊必須要有空格!
bash的測(cè)試類(lèi)型:
數(shù)值測(cè)試:
-eq:是否等于
-ne:是否不等
-gt:是否大于
-lt:是否小于
-ge:是否大于或等于
-le:是否小于或等于
字符測(cè)試:
==:是否等于
!=:是否不等
>:是否大于
<:是否小于
=~:左側(cè)字符串是否能被右側(cè)模式所匹配
-z "string":測(cè)試字符串是否為空,空則為真,不空則為假
-n "string":測(cè)試字符串是否不空,不空為真,空則為假
文件測(cè)試:測(cè)試文件存在與否,屬性信息等
- 測(cè)試文件是否存在和文件類(lèi)別
-e?file:測(cè)試指定文件是否存在,存在為真,不存在則為假
-b?file:文件是否存在且為塊設(shè)備
-d?file:文件是否存在且為目錄
-c file:文件是否存在且為字符設(shè)備
-f?file:文件是否存在且為普通文件
-h?file:文件是否存在且為符號(hào)鏈接文件
-p?file:文件是否存在且為命名管道文件
-S?file:文件是否存在且為套接字文件
1)文件權(quán)限測(cè)試
-r?file:文件是否存在且當(dāng)前用戶是否可讀
-w?file:文件是否存在且當(dāng)前用戶是否可寫(xiě)
-x file:文件是否存在且當(dāng)前用戶是否有執(zhí)行權(quán)限
-u?file:文件是否存在且擁有suid權(quán)限
-g?file:文件是否存在且擁有sgid權(quán)限
-k?file:文件是否存在且擁有sticky權(quán)限
2)文件大小測(cè)試
-s?file:文件是否存在且非空
3)文件是否被打開(kāi)
-N?file:文件自從上一次被讀取之后是否被修改過(guò)
-O?file:當(dāng)前用戶是否為文件屬主
-G?file:當(dāng)前用戶是否為文件屬組
bash的邏輯運(yùn)算:true(0)、false(1-255)
與運(yùn)算:
真 && 真 = 真
真 && 假 = 假
假 && 真 = 假
假 && 假 = 假
只要有假便為假
或運(yùn)算:
真 || 真 = 真
真 || 假 = 真
假 || 真 = 真
假 || 假 = 假
只要有真便為真
非運(yùn)算:
! 真 = 假
! 假 = 真
ls / &> /dev/null?&&?echo 'hello' :當(dāng)&&左邊條件為真時(shí),&&右邊條件執(zhí)行,&&左邊條件為假時(shí),&&右邊條件不執(zhí)行
ls /// &> /dev/null || echo 'hello' :當(dāng)||左邊條件為假時(shí),||右邊條件執(zhí)行,||左邊條件為真時(shí),||右邊條件不執(zhí)行
第二種方式:
-a:與遠(yuǎn)算
-o:或運(yùn)算
!:非運(yùn)算
例:主機(jī)名是否為localhost,如果是改為centos
[ `hostname` == localhsot ] && hostname centos || echo "current hostname is `hostname`"
例:測(cè)試文件是否存在
[ -e /etc/passwd ] && cat /etc/passwd || echo "file not exist.."
例:測(cè)試主機(jī)名是否為空或者為localhost,如果為空或者為localhost則將其改為centos
[ -z `hostname` -o hostname == `hostname` ] && hostname centos || echo "current hostname is `hostname`"
編寫(xiě)腳本backup.sh,可實(shí)現(xiàn)每日將/etc/目錄備份到 /root/etcYYYY-mm-dd中
#!/bin/bash#Filename: backup.sh
#Description: create script file
#Date: 2019-08-20 11:20:30
#*************************************************dir=etc`date +"%Y-%m-%d"`
DIR=/root/$dir
[ -d $DIR ] && echo "dir exist.." && exit 0
mkdir $DIR
cp -ar /etc/* $DIR && echo -e "\033[1;5;31mcopy finished...\033[0m"
編寫(xiě)腳本nologin.sh和login.sh,實(shí)現(xiàn)禁止和允許普通用戶登錄系統(tǒng)
[root@centos7 bin]#cat nologin.sh
#!/bin/bash##*************************************************
#Filename: login.sh
#Description: create script file
#Date: 2019-08-20 11:38:59
#*************************************************[ `id -u $1` -ge 1000 ] || exit 1
[ $# -lt 1 ] && echo "please input a users .." && exit 0
read -p "your ensure ban user nologin ? input y/n:" NOLOGIN
[ $NOLOGIN == y ] && sed -i -r '/^'''$1'''/s#(.*:)([^:]+)$#\1/bin/nologin#' /etc/passwd && exit 0
[ $NOLOGIN == n ] && exit 0
[root@centos7 bin]#cat login.sh
#!/bin/bash##*************************************************
#Filename: login.sh
#Description: create script file
#Date: 2019-08-20 12:55:48
#*************************************************[ $# -lt 1 ] && echo "please input a user .." && exit 0
[ ` id -u $1 ` -ge 1000 ] && sed -i -r '/^'''$1'''/s#(.*:)([^:]+)$#\1/bin/bash#' /etc/passwd
read -p "you need login system ? input y/n :" LOGIN
[ $LOGIN == y ] && su - $1
[ $LOGIN == n ] && exit 0
編寫(xiě)腳本disk.sh,顯示當(dāng)前硬盤(pán)分區(qū)中空間利用率最大的值??????????????????????????????????????????????????????????????????
[root@centos7 bin]#cat disk.sh
#!/bin/bash##*************************************************
#Filename: disk.sh
#Description: create script file
#Date: 2019-08-20 13:08:14
#*************************************************device=`df | grep "/dev/sd" |tr -s " " % | sort -t% -k5 -nr | cut -d% -f1 |head -1`
DISK=`df | grep "/dev/sd" | tr -s " " : | cut -d: -f5 | sort -nr|head -1`
echo "The most used is $device already use $DISK"
?My學(xué)習(xí)Linux命令小記錄(12)?over~