Linux知識補充點

完成基礎知識後,多搜索網絡綜合文檔,整理爲我所用html

/sed
/模式空間
/awk
seq
split

Network
iptables
selinux

watch
crontab
eval
expr

FTP
SSH


/LVM
/Heartbeat
/Keepalived


/linux服務器優化
/負載均衡

/經常使用腳本、命令

seq

以指定增量打印數字序列。linux

基本用法shell

seq [選項]... 尾數
seq [選項]... 首數 尾數
seq [選項]... 首數 增量 尾數

選項:安全

-f, --format=格式 使用printf 樣式的浮點格式
-s, --separator=字符串 使用指定字符串分隔數字(默認使用:\n)
-w, --equal-width 在列前添加0 使得寬度相同

例:bash

  • 儘量顯示大整數

seq --format=%1.f 1000000 1000001服務器

顯示
1000000
1000001網絡

對比,不使用--format的狀況,默認使用%g顯示負載均衡

[plain]
$ seq 1000000 1000001

顯示
1e+06
1e+06ssh

  • 顯示等寬數字,位數不足用前導0補齊

seq -w -s ' ' 0 10優化

顯示
00 01 02 03 04 05 06 07 08 09 10

注:-s用於改變字數間的分隔符,-w用以保證等寬顯示。

split

切割文件

split [--help][--version][-<行數>][-b <字節>][-C <字節>][-l <行數>][要切割的文件][輸出文件名]

參數:

-<行數>或-l<行數>  指定每多少行就要切成一個小文件。

  -b <字節>  指定每多少字就要切成一個小文件。支持單位:m,k

  -C <字節>  與-b參數相似,但切割時儘可能維持每行的完整性。

  --help  顯示幫助。

  --version  顯示版本信息。

  [輸出文件名]  設置切割後文件的前置文件名,split會自動在前置文件名後再加上編號。

說明:
split可將文件切成較小的文件,預設每1000行會切成一個小文件。

 
使用例子:

split -b 100m 1111.log (按照字節分隔)
split -l 1000000 1111.log(按照行數分隔)

eval

eval cmd

eval對cmd兩遍掃描,如第一遍掃描後,cmdLine是普通命令,則執行;如cmdLine含變量間接引用,則保證間接引用語義。

舉例以下:

set 11 22 33 44

如要輸出最近一參數,即44,使用:

echo $4

但如咱們不知道幾個參數,要輸出最後一個,使用$#來輸出最後一個參數:

echo "\$$#"

結果$4,
非44。

使用eval:

eval echo "\$$#"

結果爲44

expr

求表達式變量的值,通常用於整數值,也可用於字符串。

字串長度

# expr length "this is a test" 
14

數字求商數

# expr 14 % 9 
5

從位置處抓取字串

# expr substr "this is a test" 3 5 
is is

數字串only the first character

# expr index "testforthegame" e 
2

字串真實重現

# expr quote thisisatestformela 
thisisatestformela

selinux

查看SELinux狀態:

一、sestatus -v       #若是SELinux status參數爲enabled即爲開啓狀態

二、getenforce                 ##也能夠用這個命令檢查

關閉SELinux:

一、臨時關閉(不用重啓機器):
setenforce 0                  ##設置SELinux 成爲permissive模式
                              ##setenforce 1 設置SELinux 成爲enforcing模式

二、修改配置文件須要重啓機器:
修改/etc/selinux/config,將SELINUX=enforcing改成SELINUX=disabled

重啓

watch

命令格式:

watch[參數][命令]

命令功能:

將命令的輸出結果輸出到標準輸出設備,多用於週期性執行命令/定時執行命令

命令參數:

-n或--interval   缺省每2秒運行一下程序,可用-n或-interval來指定間隔的時間
-d或--differences    高亮顯示變化的區域 
-d=cumulative  把變更過的地方(無論最近的那次有沒有變更)都高亮顯示出來
-t 或-no-title  會關閉watch命令在頂部的時間間隔,命令,當前時間的輸出
-h, --help 查看幫助文檔

使用實例:

實例1:每隔一秒高亮顯示網絡連接數的變化狀況

watch -n 1 -d netstat -ant

其它操做:
切換終端: Ctrl+x
退出watch:Ctrl+g

實例2:每隔一秒高亮顯示http連接數的變化狀況

watch -n 1 -d 'pstree|grep http'

每隔一秒高亮顯示http連接數的變化狀況。 後面接的命令若帶有管道符,須要加''將命令區域歸整。

實例3:實時查看模擬攻擊客戶機創建起來的鏈接數

watch 'netstat -an | grep:21 | \ grep<模擬攻擊客戶機的IP>| wc -l'

實例4:監測當前目錄中 scf' 的文件的變化

watch -d 'ls -l|grep scf'

實例5:10秒一次輸出系統的平均負載

watch -n 10 'cat /proc/loadavg'

crontab

crontab [-u username] [-l|-e|-r]

選項:

-u  :只有 root 才能進行這個任務,亦即幫其餘使用者建立/移除 crontab 工做排程;
-e  :編輯 crontab 的工做內容
-l  :查閱 crontab 的工做內容
-r  :移除全部的 crontab 的工做內容,若僅要移除一項,請用 -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 每一個小時的第幾分鐘執行該任務 
Hour 天天的第幾個小時執行該任務 
Day 每個月的第幾天執行該任務 
Month 每一年的第幾個月執行該任務 
DayOfWeek 每週的第幾天執行該任務,0表示週日
Command 指定要執行的程序 、腳本或命令

Command必須,其它可選。不指定字段,用*填補。

幾個特殊符號的含義

*表明取值範圍內的數字, 
/表明」每」, 
-表明從某個數字到某個數字, 
,分開幾個離散的數字

關於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 任務運行環境變量:

SHELL--指定shell 環境(默認bash shell)
PATH --執行命令的程序路徑
MAILTO--cron任務的輸出郵件給變量定義的用戶名,空串(MAILTO="")不寄;
HOME --執行命令或腳本的主目錄

若cron 任務須要根據調度來執行,而不是每小時、每日、每週、或每個月地執行,它可被添加到/etc/cron.d目錄。
該目錄中的全部文件使用和 /etc/crontab 中同樣的語法。

編輯完cron設置,在/var/spool/cron生成一與用戶同名文件,不可直接編輯,只可用crontab -e 編輯。

cron啓動後每一分鐘讀該文件,檢查是否要執行裏面的命令。

常見cron示例參考

5  * * * * ls 指定每小時的第5分鐘執行一次ls命令

30 5 * * * ls 指定天天的 5:30 執行ls命令 

30 7 8 * * ls 指定每個月8號的7:30分執行ls命令

30 5 8 6 * ls 指定每一年的6月8日5:30執行ls命令 

30 6 * * 0 ls 指定每星期日6:30執行ls命令
[注:0表示星期天,1表示星期1,以此類推,也能夠用英文來表示,sun表示星期天,mon表示星期一等。] 

30 3 10,20 * * ls 每個月10號及20號的3:30執行ls命令[注:「,」用來鏈接多個不連續的時段] 

25 8-11 * * * ls 天天8-11點的第25分鐘執行ls命令[注:「-」用來鏈接連續的時段] 

*/15 * * * * ls 每15分鐘執行一次ls命令 [即每一個小時的第0 15 30 45 60分鐘執行ls命令 ] 

30 6 */10 * * ls 每月中,每隔10天6:30執行一次ls命令[即每個月一、十一、2一、31日是的6:30執行一次ls命令 ]

天天7:50以root 身份執行/etc/cron.daily目錄中的全部可執行文件

50 7 * *  * root run-parts  /etc/cron.daily [ 注:run-parts參數表示,執行後面目錄中的全部可執行文件

第十、20、30分鐘輸出到/tmp/cron1.txt:

10,20,30 * * * * echo "第十、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、將腳本改爲可執行
chmod +x filename

SSH

SSH爲Secure Shell的縮寫,爲建立在應用層和傳輸層基礎上的安全協議。

基本功能:

鏈接到遠程主機:

ssh name@remoteserver
或
ssh remoteserver -l name

說明:server表明遠程主機,name爲登陸遠程主機用戶名。

鏈接到遠程主機指定的端口:

ssh name@remoteserver -p 2222
或
ssh remoteserver -l name –p 2222

說明:
p 參數指定端口號
一般在路由裏作端口映射時,咱們不會把22端口直接映射出去,而是轉換成其餘端口號,這時就須要使用-p 端口號命令格式。

經過遠程主機1跳到遠程主機2:

ssh -t remoteserver1 ssh remoteserver2

說明:
當remoteserver2沒法直達,可以使用-t參數,而後由remoteserver1跳轉到remoteserver2。

經過SSH運行遠程shell命令:

ssh -l name remoteserver ‘command’

說明:
鏈接到遠程主機,並執行遠程主機的command命令。

例如:查看遠程主機的內存使用狀況。

修改SSH監聽端口

默認SSH監聽端口22,攻擊者使用端口掃描軟件就能夠看到主機是否運行有SSH服務.

將SSH端口修改成大於1024的端口是一個明智的選擇.

因大多數端口掃描軟件(包括nmap)默認狀況都不掃描高位端口。打開/etc/ssh/sshd_config文件並查找下面這樣的行:

Port  22

去掉該行前面的# 號,而後修改端口號並從新啓動SSH服務:

$ /etc/init.d/ssh restart

僅容許SSH協議版本2

兩個SSH協議版本,僅使用SSH協議版本2會更安全,SSH協議版本1有安全問題,包括中間人攻擊(man-in-the-middle)和注入(insertion)攻擊。

編輯/etc/ssh/sshd_config文件並查找下面這樣的行:

# Protocol 2,1

修改成:
Protocol 2

禁止root用戶登陸:

一般狀況下,不採用直接用root用戶登陸到遠程主機,因爲root用戶擁有超級權限,這樣會帶來安全隱患,因此,通常咱們用普通用戶登陸,當須要管理遠程主機時,再切換到root用戶下。

打開/etc/ssh/sshd_config文件並查找下面這樣的行:

#PermitRootLogin yes

將#號去掉,而後將yes修改爲no,重啓ssh服務,這樣就能夠禁止root用戶登陸。

設置登陸時提示信息

首先編輯一個文件,如bannertest.txt,文件內容自行定義。而後打開/etc/ssh/sshd_config文件並查找下面這樣的行:

#Banner /some/path

將#號去掉,而後將bannertest.txt文件的全路徑替換/some/path,而後保存,重啓ssh服務。當客戶端登陸時,就會看到bannertest.txt文件中的提示信息。

scp命令

在兩臺服務器之間傳送文件。傳輸過程當中仍使用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服務器

ftp [hostname| ip-address]

a)在Linux命令行下輸入:
ftp 192.168.1.1

b)服務器詢問你用戶名和密碼,分別輸入用戶名和相應密碼,待認證經過便可。

2. 下載文件

get和mget。

get

將文件從遠端主機中傳送至本地主機中:

get [remote-file] [local-file]

如要獲取遠程服務器上/usr/your/1.htm,則

ftp> get /usr/your/1.htm 1.htm (回車)

mget      

遠端主機接收一批文件至本地主機:

mget [remote-files]

如要獲取服務器上/usr/your/下的全部文件,則

ftp> cd /usr/your/
ftp> mget *.* (回車)

此時每下載一個文件,都會有提示。若是要除掉提示,則在mget . 命令前先執行: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文件上傳到服務器/usr/your/ 下

ftp> cd /usr/your (回車)
ftp> mput *.htm (回車)

注意:上傳文件都來自於主機的當前目錄下。好比,在 /usr/my下運行的ftp命令,則只有在/usr/my下的文件linux纔會上傳到服務器/usr/your 下。

4. 斷開鏈接

bye:中斷與服務器的鏈接。

ftp> bye (回車)

模式空間

sed之因此能以行爲單位的編輯或修改,緣由在於它使用了兩個空間:

活動的「模式空間(pattern space)」
起輔助做用的「暫存緩衝區(holdingspace)

Linux服務器優化

相關文章
相關標籤/搜索