完成基礎(chǔ)知識后,多搜索網(wǎng)絡(luò)綜合文檔,整理為我所用
/sed
/模式空間
/awk
seq
split
Network
iptables
selinux
watch
crontab
eval
expr
FTP
SSH
/LVM
/Heartbeat
/Keepalived
/linux服務(wù)器優(yōu)化
/負載均衡
/常用腳本、命令
seq
以指定增量打印數(shù)字序列。
基本用法
seq [選項]... 尾數(shù)
seq [選項]... 首數(shù) 尾數(shù)
seq [選項]... 首數(shù) 增量 尾數(shù)
選項:
-f, --format=格式 使用printf 樣式的浮點格式
-s, --separator=字符串 使用指定字符串分隔數(shù)字(默認使用:\n)
-w, --equal-width 在列前添加0 使得寬度相同
例:
- 盡可能顯示大整數(shù)
seq --format=%1.f 1000000 1000001
顯示
1000000
1000001
對比,不使用--format的情況,默認使用%g顯示
[plain]
$ seq 1000000 1000001
顯示
1e+06
1e+06
- 顯示等寬數(shù)字,位數(shù)不足用前導0補齊
seq -w -s ' ' 0 10
顯示
00 01 02 03 04 05 06 07 08 09 10
注:-s用于改變字數(shù)間的分隔符,-w用以保證等寬顯示。
split
切割文件
split [--help][--version][-<行數(shù)>][-b <字節(jié)>][-C <字節(jié)>][-l <行數(shù)>][要切割的文件][輸出文件名]
參數(shù):
-<行數(shù)>或-l<行數(shù)> 指定每多少行就要切成一個小文件。
-b<字節(jié)> 指定每多少字就要切成一個小文件。支持單位:m,k
-C<字節(jié)> 與-b參數(shù)類似,但切割時盡量維持每行的完整性。
--help 顯示幫助。
--version 顯示版本信息。
[輸出文件名] 設(shè)置切割后文件的前置文件名,split會自動在前置文件名后再加上編號。
說明:
split可將文件切成較小的文件,預設(shè)每1000行會切成一個小文件。
使用例子:
split -b 100m 1111.log (按照字節(jié)分隔)
split -l 1000000 1111.log(按照行數(shù)分隔)
eval
eval cmd
eval對cmd兩遍掃描,如第一遍掃描后,cmdLine是普通命令,則執(zhí)行;如cmdLine含變量間接引用,則保證間接引用語義。
舉例如下:
set 11 22 33 44
如要輸出最近一參數(shù),即44,使用:
echo $4
但如我們不知道幾個參數(shù),要輸出最后一個,使用$#來輸出最后一個參數(shù):
echo "\$$#"
結(jié)果$4,
非44。
使用eval:
eval echo "\$$#"
結(jié)果為44
expr
求表達式變量的值,一般用于整數(shù)值,也可用于字符串。
字串長度
# expr length "this is a test"
14
數(shù)字求商數(shù)
# expr 14 % 9
5
從位置處抓取字串
# expr substr "this is a test" 3 5
is is
數(shù)字串only the first character
# expr index "testforthegame" e
2
字串真實重現(xiàn)
# expr quote thisisatestformela
thisisatestformela
selinux
查看SELinux狀態(tài):
1、sestatus -v #如果SELinux status參數(shù)為enabled即為開啟狀態(tài)
2、getenforce ##也可以用這個命令檢查
關(guān)閉SELinux:
1、臨時關(guān)閉(不用重啟機器):
setenforce 0 ##設(shè)置SELinux 成為permissive模式
##setenforce 1 設(shè)置SELinux 成為enforcing模式
2、修改配置文件需要重啟機器:
修改/etc/selinux/config,將SELINUX=enforcing改為SELINUX=disabled
重啟
watch
命令格式:
watch[參數(shù)][命令]
命令功能:
將命令的輸出結(jié)果輸出到標準輸出設(shè)備,多用于周期性執(zhí)行命令/定時執(zhí)行命令
命令參數(shù):
-n或--interval 缺省每2秒運行一下程序,可用-n或-interval來指定間隔的時間
-d或--differences 高亮顯示變化的區(qū)域
-d=cumulative 把變動過的地方(不管最近的那次有沒有變動)都高亮顯示出來
-t 或-no-title 會關(guān)閉watch命令在頂部的時間間隔,命令,當前時間的輸出
-h, --help 查看幫助文檔
使用實例:
實例1:每隔一秒高亮顯示網(wǎng)絡(luò)鏈接數(shù)的變化情況
watch -n 1 -d netstat -ant
其它操作:
切換終端: Ctrl+x
退出watch:Ctrl+g
實例2:每隔一秒高亮顯示http鏈接數(shù)的變化情況
watch -n 1 -d 'pstree|grep http'
每隔一秒高亮顯示http鏈接數(shù)的變化情況。 后面接的命令若帶有管道符,需要加''將命令區(qū)域歸整。
實例3:實時查看模擬攻擊客戶機建立起來的連接數(shù)
watch 'netstat -an | grep:21 | \ grep<模擬攻擊客戶機的IP>| wc -l'
實例4:監(jiān)測當前目錄中 scf' 的文件的變化
watch -d 'ls -l|grep scf'
實例5:10秒一次輸出系統(tǒng)的平均負載
watch -n 10 'cat /proc/loadavg'
crontab
crontab [-u username] [-l|-e|-r]
選項:
-u :只有 root 才能進行這個任務(wù),亦即幫其他使用者創(chuàng)建/移除 crontab 工作排程;
-e :編輯 crontab 的工作內(nèi)容
-l :查閱 crontab 的工作內(nèi)容
-r :移除所有的 crontab 的工作內(nèi)容,若僅要移除一項,請用 -e 去編輯
cron文件語法
crontab -e命令編輯/var/spool/cron對應用戶cron文件,也可修改/etc/crontab文件。
具體格式如下:
Minute Hour Day Month Week command
分鐘 小時 天 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command
每個字段代表的含義如下:
Minute 每個小時的第幾分鐘執(zhí)行該任務(wù)
Hour 每天的第幾個小時執(zhí)行該任務(wù)
Day 每月的第幾天執(zhí)行該任務(wù)
Month 每年的第幾個月執(zhí)行該任務(wù)
DayOfWeek 每周的第幾天執(zhí)行該任務(wù),0表示周日
Command 指定要執(zhí)行的程序 、腳本或命令
Command必須,其它可選。不指定字段,用*填補。
幾個特殊符號的含義
*代表取值范圍內(nèi)的數(shù)字,
/代表”每”,
-代表從某個數(shù)字到某個數(shù)字,
,分開幾個離散的數(shù)字
關(guān)于cron配置文件/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
前四行配置 cron 任務(wù)運行環(huán)境變量:
SHELL--指定shell 環(huán)境(默認bash shell)
PATH --執(zhí)行命令的程序路徑
MAILTO--cron任務(wù)的輸出郵件給變量定義的用戶名,空串(MAILTO="")不寄;
HOME --執(zhí)行命令或腳本的主目錄
若cron 任務(wù)需要根據(jù)調(diào)度來執(zhí)行,而不是每小時、每日、每周、或每月地執(zhí)行,它可被添加到/etc/cron.d目錄。
該目錄中的所有文件使用和 /etc/crontab 中一樣的語法。
編輯完cron設(shè)置,在/var/spool/cron生成一與用戶同名文件,不可直接編輯,只可用crontab -e 編輯。
cron啟動后每一分鐘讀該文件,檢查是否要執(zhí)行里面的命令。
常見cron示例參考
5 * * * * ls 指定每小時的第5分鐘執(zhí)行一次ls命令
30 5 * * * ls 指定每天的 5:30 執(zhí)行l(wèi)s命令
30 7 8 * * ls 指定每月8號的7:30分執(zhí)行l(wèi)s命令
30 5 8 6 * ls 指定每年的6月8日5:30執(zhí)行l(wèi)s命令
30 6 * * 0 ls 指定每星期日6:30執(zhí)行l(wèi)s命令
[注:0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等。]
30 3 10,20 * * ls 每月10號及20號的3:30執(zhí)行l(wèi)s命令[注:“,”用來連接多個不連續(xù)的時段]
25 8-11 * * * ls 每天8-11點的第25分鐘執(zhí)行l(wèi)s命令[注:“-”用來連接連續(xù)的時段]
*/15 * * * * ls 每15分鐘執(zhí)行一次ls命令 [即每個小時的第0 15 30 45 60分鐘執(zhí)行l(wèi)s命令 ]
30 6 */10 * * ls 每個月中,每隔10天6:30執(zhí)行一次ls命令[即每月1、11、21、31日是的6:30執(zhí)行一次ls命令 ]
每天7:50以root 身份執(zhí)行/etc/cron.daily目錄中的所有可執(zhí)行文件
50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts參數(shù)表示,執(zhí)行后面目錄中的所有可執(zhí)行文件
第10、20、30分鐘輸出到/tmp/cron1.txt:
10,20,30 * * * * echo "第10、20、30分鐘輸出一次" >> /tmp/cron1.txt
以用戶lzw.me的身份每兩小時就運行某個程序:
0 */2 * * * lzw.me /usr/bin/somecommand >> /dev/null 2>&1
特別提示
A、cron配置文件路徑
#vi /etc/crontab
B、重啟cron的方法
#/etc/rc.d/init.d/crond restart
Usage: /etc/rc.d/init.d/crond {start|stop|status|reload|restart|condrestart}
C、將腳本改成可執(zhí)行
chmod +x filename
SSH
SSH為Secure Shell的縮寫,為創(chuàng)建在應用層和傳輸層基礎(chǔ)上的安全協(xié)議。
基本功能:
連接到遠程主機:
ssh name@remoteserver
或
ssh remoteserver -l name
說明:server代表遠程主機,name為登錄遠程主機用戶名。
連接到遠程主機指定的端口:
ssh name@remoteserver -p 2222
或
ssh remoteserver -l name –p 2222
說明:
p 參數(shù)指定端口號
通常在路由里做端口映射時,我們不會把22端口直接映射出去,而是轉(zhuǎn)換成其他端口號,這時就需要使用-p 端口號命令格式。
通過遠程主機1跳到遠程主機2:
ssh -t remoteserver1 ssh remoteserver2
說明:
當remoteserver2無法直達,可使用-t參數(shù),然后由remoteserver1跳轉(zhuǎn)到remoteserver2。
通過SSH運行遠程shell命令:
ssh -l name remoteserver ‘command’
說明:
連接到遠程主機,并執(zhí)行遠程主機的command命令。
例如:查看遠程主機的內(nèi)存使用情況。
修改SSH監(jiān)聽端口
默認SSH監(jiān)聽端口22,攻擊者使用端口掃描軟件就可以看到主機是否運行有SSH服務(wù).
將SSH端口修改為大于1024的端口是一個明智的選擇.
因大多數(shù)端口掃描軟件(包括nmap)默認情況都不掃描高位端口。打開/etc/ssh/sshd_config文件并查找下面這樣的行:
Port 22
去掉該行前面的# 號,然后修改端口號并重新啟動SSH服務(wù):
$ /etc/init.d/ssh restart
僅允許SSH協(xié)議版本2
兩個SSH協(xié)議版本,僅使用SSH協(xié)議版本2會更安全,SSH協(xié)議版本1有安全問題,包括中間人攻擊(man-in-the-middle)和注入(insertion)攻擊。
編輯/etc/ssh/sshd_config文件并查找下面這樣的行:
# Protocol 2,1
修改為:
Protocol 2
禁止root用戶登錄:
通常情況下,不采用直接用root用戶登錄到遠程主機,由于root用戶擁有超級權(quán)限,這樣會帶來安全隱患,所以,一般我們用普通用戶登錄,當需要管理遠程主機時,再切換到root用戶下。
打開/etc/ssh/sshd_config文件并查找下面這樣的行:
#PermitRootLogin yes
將#號去掉,然后將yes修改成no,重啟ssh服務(wù),這樣就可以禁止root用戶登錄。
設(shè)置登錄時提示信息
首先編輯一個文件,如bannertest.txt,文件內(nèi)容自行定義。然后打開/etc/ssh/sshd_config文件并查找下面這樣的行:
#Banner /some/path
將#號去掉,然后將bannertest.txt文件的全路徑替換/some/path,然后保存,重啟ssh服務(wù)。當客戶端登錄時,就會看到bannertest.txt文件中的提示信息。
scp命令
在兩臺服務(wù)器之間傳送文件。傳輸過程中仍使用ssh加密。
將遠程主機的/tmp/test 文件復制到本地的/bak文件夾下
scp -p root@192.168.1.120:/tmp/test /bak
將本地/bak/1234 文件復制到遠程主機的/tmp路徑下
scp -p /bak/1234 root@192.168.1.120:/tmp
FTP
1. 連接ftp服務(wù)器
ftp [hostname| ip-address]
a)在Linux命令行下輸入:
ftp 192.168.1.1b)服務(wù)器詢問你用戶名和密碼,分別輸入用戶名和相應密碼,待認證通過即可。
2. 下載文件
get和mget。
get
將文件從遠端主機中傳送至本地主機中:
get [remote-file] [local-file]
如要獲取遠程服務(wù)器上/usr/your/1.htm,則
ftp> get /usr/your/1.htm 1.htm (回車)
mget
遠端主機接收一批文件至本地主機:
mget [remote-files]
如要獲取服務(wù)器上/usr/your/下的所有文件,則
ftp> cd /usr/your/
ftp> mget *.* (回車)
此時每下載一個文件,都會有提示。如果要除掉提示,則在mget . 命令前先執(zhí)行:prompt off
注意:文件都下載到了linux主機的當前目錄下。比如,在 /usr/my下運行的ftp命令,則文件都下載到了/usr/my下。
3.上傳文件
put
將本地一個文件傳送至遠端主機中
put local-file [remote-file]
如要把本地的1.htm傳送到遠端主機/usr/your,并改名為2.htm
ftp> put 1.htm /usr/your/2.htm (回車)
mput
將本地主機中一批文件傳送至遠端主機。
mput local-files
如要把本地當前目錄下所有html文件上傳到服務(wù)器/usr/your/ 下
ftp> cd /usr/your (回車)
ftp> mput *.htm?。ɑ剀嚕?
注意:上傳文件都來自于主機的當前目錄下。比如,在 /usr/my下運行的ftp命令,則只有在/usr/my下的文件linux才會上傳到服務(wù)器/usr/your 下。
4. 斷開連接
bye:中斷與服務(wù)器的連接。
ftp> bye (回車)
模式空間
sed之所以能以行為單位的編輯或修改,原因在于它使用了兩個空間:
活動的“模式空間(pattern space)”
起輔助作用的“暫存緩沖區(qū)(holdingspace)