linux-小知識-13

小知識

shutdown 2 The system is going down for required maintenance. Please save any important work you are doing now!

free -m
buffers爲寫入緩衝區,sync將緩衝區數據寫入磁盤
cache爲讀取數據的緩存區

隱藏登陸前系統信息提示
>  /etc/issue
>  /etc/issue.net

etc/issue 是顯示在TTY控制檯登陸前(非圖形界面)非ssh遠程登陸的顯示
/etc/motd :這個文件是在你登陸以後顯示的,無論你是 TTY 仍是 PTS 登陸,也無論是  Telnet 或 SSH 都顯示這個文件裏面的信息


PS1='\[\e[31;40m\][\[\e[31;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[31;40m\]]\[\e[1;32;40m \$ \[\e[0m\]'

錄製終端會話

$ script -t 2> timing.log -a output.session
type commands;
…
..
exit 


$ scriptreplay timing.log output.session
# 按播放命令序列輸出



tail   -f 跟蹤顯示文件內容新追加內容

文件權限問題:
文件:
 r 可以使用文件查看類工具獲取其內容
 w 可修改其內容
 x 能夠把此文件提請內核啓動爲一個進程
目錄:
 r 可使用ls查看此目錄中文件列表
 w 可在此目錄中建立文件,也可刪除此目錄中的文件
 x 可使用ls -l查看此目錄中文件元數據(須配合r),能夠cd進入此目錄
 X 只給目錄x權限,不給文件x權限
 
 複製一個文件之目錄
 :cp   file  dir
 file   至少r
 dir  至少  wx
 
 RANDOM%7   取餘數
 
 [[  "$name"   =~  \.sh$    ]]
[[   "$var"   ==   abc*   ]]     == 通配符abc*
☐  裏面只要有字符就爲真  $?  = 0 
[ x"$var"   =  'x'  ]   判斷$var 是否存在

[]   精確匹配
[[]]  模糊匹配  正則表達式

分區利用率斷定大於80
[-v  name ]  判斷name 是是否被設置
[-n  name]  是否爲空




 腳本執行,先查看hash  再看路徑PATH  別名優先級大於本地shell
 
 
 
 一、編輯 grub 配置文件

vim /etc/sysconfig/grub   # 實際上是/etc/default/grub的軟鏈接
# 爲GRUB_CMDLINE_LINUX變量增長2個參數,具體內容以下(加粗):
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap net.ifnames=0 biosdevname=0 rhgb quiet"
二、從新生成 grub 配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg
而後從新啓動 Linux 操做系統,經過 ip addr 能夠看到網卡名稱已經變爲 eth0 。

hostname   -I
本機IP

crontab   -e  
星號(*):表明全部可能的值,例如month字段若是是星號,則表示在知足其它字段的制約條件後每個月都執行該命令操做。
逗號(,):能夠用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」
中槓(-):能夠用整數之間的中槓表示一個整數範圍,例如「2-6」表示「2,3,4,5,6」
正斜線(/):能夠用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線能夠和星號一塊兒使用,例如*/10,若是用在minute字段,表示每十分鐘執行一次。

 xargs命令把從stdin接收到的數據從新格式化,再將其做爲參數提供給其餘命令。

將多行輸入轉換成單行輸出。
將單行輸入轉換成多行輸出。
指定每行最大的參數數量n,咱們能夠將任何來自stdin的文本劃分紅多行,每行n個參數。
每個參數都是由" "(空格)隔開的字符串。空格是默認的定界符
指定每行最大的參數數量n,咱們能夠將任何來自stdin的文本劃分紅多行,每行n個參數
每個參數都是由" "(空格)隔開的字符串。空格是默認的定界符
xargs -I {} ./cecho.sh -p {} -l 
xargs -0將\0做爲輸入定界符

cat files.txt | ( while read arg; do cat $arg; done )
# 等同於cat files.txt | xargs -I {} cat {} 




-----------------------------------------------------------------------------------------------------
孩集羣運維
 
 網絡

nginx   安裝 
./configure   --prefix=/data/nginx   --group=nginx  --user=nginx  --with-http_stub_status_module   --with-http_ssl_module  --conf-path=/etc/nginx/nginx.conf   --http-log-path=/vat/log/nginx/access.log
日誌格式修改 
access_log  /var/log/nginx/access.log combined;

備份文件後修改
nginx -t 
nginx   -s reload



基於域名的虛擬機
server {
        listen       80;
        server_name  www.example.com;

        location / {
            root   html;        ###設定虛擬機目錄
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

基於ip的虛擬機
server {
        listen      192.168.8.1: 80;
        server_name  www.example.com;

        location / {
            root   html;        ###設定虛擬機目錄
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

使用include   包含單獨配置文件
include   file  | mask ;
在 http {
        
include  extra/www.conf
include  extra/bbs.conf

}


打開nginx的status 
查看是否安裝了模塊  --with-http_stub_status_module 
nginx  -V
在http  添加

server {
        listen       80;
        server_name  status.example.com;

        location / {
            
            stub_status  on;
            access_log  off;
        }  
    }

    錯誤日誌配置

    語法
    error_log  file  level;
    默認格式    error_log  logs/error.log;
    訪問日誌
    #log_format  main     '$remote_addr - $remote_user [$time_local] "$request" '
    #                                  '$status $body_bytes_sent "$http_referer" '
    #                                  '"$http_user_agent" "$http_x_forwarded_for"';
    access_log   logs/access.log   main
{
                $remote_addr,  記錄客戶端IP地址
                $http_x_forwarded_for   前端有代理設置web節點記錄客戶端地址,此參數生效的前提是代理服務器也開啓了x_forwarded_for
                $remote_user 記錄客戶端用戶名稱
                $request 記錄請求的URL和HTTP協議
                $status 記錄請求狀態
                $body_bytes_sent 發送給客戶端的字節數,不包括響應頭的大小; 該變量與Apache模塊mod_log_config裏的「%B」參數兼容。
                $bytes_sent 發送給客戶端的總字節數。
                $connection 鏈接的序列號。
                $connection_requests 當前經過一個鏈接得到的請求數量。
                $msec 日誌寫入時間。單位爲秒,精度是毫秒。
                $pipe 若是請求是經過HTTP流水線(pipelined)發送,pipe值爲「p」,不然爲「.」。
                $http_referer 記錄從哪一個頁面連接訪問過來的
                $http_user_agent 記錄客戶端瀏覽器相關信息
                $request_length 請求的長度(包括請求行,請求頭和請求正文)。
                $request_time 請求處理時間,單位爲秒,精度毫秒; 從讀入客戶端的第一個字節開始,直到把最後一個字符發送給客戶端後進行日誌寫入爲止。
                $time_iso8601 ISO8601標準格式下的本地時間。
                $time_local 通用日誌格式下的本地時間。
                }

大日誌切割腳本
將正在寫入的日誌更名並轉移至其餘目錄,而後平滑過渡
!#   /bin/bash 
dateformat=`date  +%Y%m%d`
Basedir=/vat/log/nginx
Nginxdir="$Basedir/logs"
Logname="access"
[      -d   $Basedir   ]     &&  cd   $Nginxdir  || exit  1 
[  -f   ${Logname}.log  ]   ||  exit  1
/bin/mv    ${Logname}.log   ${dateformat}_${Logname}.log

${Basedir}/sbin/nginx   -s  reload 
寫入腳本

00  00  *   *    *    /bin/sh     /path/to/shellnname      >  /dev/nul     2>&1


location   

~      #波浪線表示執行一個正則匹配,區分大小寫
~*    #表示執行一個正則匹配,不區分大小寫
^~    #^~表示普通字符匹配,若是該選項匹配,只匹配該選項,不匹配別的選項,通常用來匹配目錄
=      #進行普通字符精確匹配
@     #"@" 定義一個命名的 location,使用在內部定向時,例如 error_page, try_files

location 匹配的優先級(與location在配置文件中的順序無關)
= 精確匹配會第一個被處理。若是發現精確匹配,nginx中止搜索其餘匹配。
普通字符匹配,正則表達式規則和長的塊規則將被優先和查詢匹配,也就是說若是該項匹配還需去看有沒有正則表達式匹配和更長的匹配。
^~ 則只匹配該規則,nginx中止搜索其餘匹配,不然nginx會繼續處理其餘location指令。
最後匹配理帶有"~"和"~*"的指令,若是找到相應的匹配,則nginx中止搜索其餘匹配;當沒有正則表達式或者沒有正則表達式被匹配的狀況下,那麼匹配程度最高的逐字匹配指令會被使用。

location 優先級官方文檔

Directives with the = prefix that match the query exactly. If found, searching stops.
All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
Regular expressions, in order of definition in the configuration file.
If #3 yielded a match, that result is used. Else the match from #2 is used.
=前綴的指令嚴格匹配這個查詢。若是找到,中止搜索。
全部剩下的常規字符串,最長的匹配。若是這個匹配使用^〜前綴,搜索中止。
正則表達式,在配置文件中定義的順序。
若是第3條規則產生匹配的話,結果被使用。不然,使用第2條規則的結果。

例子
location  = / {
  # 只匹配"/".
  [ configuration A ] 
}
location  / {
  # 匹配任何請求,由於全部請求都是以"/"開始
  # 可是更長字符匹配或者正則表達式匹配會優先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配任何以 /images/ 開始的請求,並中止匹配 其它location
  [ configuration C ] 
}
location ~* .(gif|jpg|jpeg)$ {
  # 匹配以 gif, jpg, or jpeg結尾的請求. 
  # 可是全部 /images/ 目錄的請求將由 [Configuration C]處理.   
  [ configuration D ] 
}

請求URI例子:

/ -> 符合configuration A
/documents/document.html -> 符合configuration B
/images/1.gif -> 符合configuration C
/documents/1.jpg ->符合 configuration D
@location 例子
error_page 404 = @fetch;

location @fetch(
proxy_pass http://fetch;
)




rewrite 

nginx經過ngx_http_rewrite_module模塊支持url重寫、支持if條件判斷,但不支持else。

該模塊須要PCRE支持,應在編譯nginx時指定PCRE源碼目錄

語法:rewrite regex replacement [flag];
默認值:無
做用域:server,location,if
若是一個URI匹配指定的正則表達式regex,URI就按照replacement重寫。
rewrite按配置文件中出現的順序執行。flags標誌能夠中止繼續處理。
若是replacement以"http://"或"https://"開始,將再也不繼續處理,這個重定向將返回給客戶端。
flag能夠是以下參數
last 中止處理後續rewrite指令集,而後對當前重寫的新URI在rewrite指令集上從新查找。
break 中止處理後續rewrite指令集,並不在從新查找,可是當前location內剩餘非rewrite語句和location外的的非rewrite語句能夠執行。
redirect 若是replacement不是以http:// 或https://開始,返回302臨時重定向
permant 返回301永久重定向
最終完整的重定向URL包括請求scheme(http://,https://等),請求的server_name_in_redirect和 port_in_redirec三部分 ,說白了也就是http協議 域名 端口三部分組成。

每日一題

1,防止服務器中木馬
Linux下的木馬經常是惡意者經過Web的上傳目錄的方式來上傳木馬到Linux服務器的,可根據從惡意者訪問網站開始-->Linux系統-->HTTP服務-->中間件服務-->程序代碼-->DB-->存儲,層層設卡防禦。php

  1. 開發程序代碼對上傳文件類型作限制,例如不能上傳.php程序(JS及後端代碼控制)。html

  2. 對上傳的內容(包括文本和文件)檢測,檢測方式可經過程序、Web服務層(中間件層)、數據庫等層面控制。前端

  3. 控制上傳目錄的權限以及非站點目錄的權限(Linux文件目錄權限+Web服務層控制)。node

  4.  傳上木馬文件後的訪問和執行控制(Web服務層+文件系統存儲層)。mysql

  5. 對重要配置文件、命令和WEB配置等文件作md5指紋及備份。linux

  6. 安裝殺毒軟件clamav等,按期監測查殺木馬。ios

  7.  配置服務器防火牆及入侵檢測服務。nginx

  8. 監控服務器文件變動、進程變化、端口變化、重要安全日誌並及時報警web

從內部管理人員角度:防止被提權正則表達式

  1. 管理服務器或Web化管理服務器。

  2. ssh監聽內網。

  3. 採用跳板機、操做審計。

  4. sudo集權管理、鎖定關鍵文件。

  5. 站點目錄、上傳目錄權限屬組控制。

  6. 作系統及站點文件備份指紋監控報警。

  7. 動態口令認證。

對上傳文件類型 和位置坐嚴格限制
上穿的文件配置最小權限
上傳文件的目錄屬主最小合適權限
重要的文件作校驗,MD5備份
服務器開放的端口作監控,有異常及時報警。

▼ kill -0 $pid 2> /dev/null
 kill -0 $pid中的-0表示不發送任何信號給PID對應的進程,可是仍會對變量值PID對應的進程是否存在進行檢查,若是$pid對應的進程存在,則返回0,不存在返回1
2>/dev/null不輸出錯誤信息

▼ 取IP的方式

ifconfig eth0 |sed -n '2p' | awk '{print $2 }'
ifconfig | grep "inet " | awk '{print $2} '
ifconfig | sed -nr 's@.inet ([0-9.]+[0-9]+) .$@\1@p'

▼ 軟硬鏈接區別
硬連接文件與源文件的inode節點號相同,而軟連接文件至關於windows下面的快捷方式(inode節點號與源文件不一樣
特色:
• 不能對目錄建立硬連接,但能夠建立軟連接,對目錄的軟連接會常常被用到

• 軟連接能夠跨文件系統,硬連接不能夠跨文件系統。
• 刪除軟連接文件,對源文件及硬連接文件無任何影響;

• 刪除文件的硬連接文件,對源文件及軟連接文件無任何影響;

• 刪除連接文件的源文件,對硬連接文件無影響,會致使其軟連接失效(紅底白字閃爍狀);

• 同時刪除源文件及其硬連接文件,整個文件纔會被"真正"的刪除。
文件的連接數顯示的是硬連接的個數,和軟連接個數無關
文件:
一、文件既能夠建立軟連接,也能夠建立硬連接
目錄:
一、目錄只能夠建立軟連接,不能夠建立硬連接
二、對於一個空目錄,它有兩個硬連接數,一個是它自己,一個是目錄
   下的 "."文件,它每建立一個次一級目錄,它的硬連接數目都會加
   1,由於每一個次一次目錄下面都有一個「..」文件,但若是在該目錄
   下建立文件硬連接數目就不會變化。
實際應用:
一、軟連接文件能夠做爲快捷方式,簡化繁瑣的文件層次
二、硬連接文件能夠用於重要文件,防止文件被誤刪等狀況發生


域名計數
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html

awk -F "/"  '{ip[$3]++} END{for(  i  in  ip)  print i ,ip[i] }'  awk

▼ 啓動過程
1. 開機BIOS自檢,加載硬盤。

2. MBR引導

    3. grub引導菜單

    4. 加載內核kernel

    5. 啓動init進程

    6. 讀取inittab文件,執行rc.sysinit,rc等腳本

    7. 啓動mingetty,進入系統登錄界面

▼路由轉發,不一樣網段IP互通,添加2個網卡分別在中間主機,分別配置路由,跳板機開啓轉發功能

▼ 數據庫給最基礎權限
▼ 防止命令行或腳本密碼泄露
1,環境變量強制Linux不記錄敏感歷史命令
命令行執行HISTCONTROL=ignorespace後,再輸入帶密碼的命令的前面加一個空格登陸,登陸命令不會被記錄到歷史記錄裏
2,刪除命令行記錄
history -d 歷史命令序號
3,啓動腳本+700 權限
4,密碼寫入my.conf 加700 權限,用戶組改成MySQL

▼ 前端運行的命令放入後端
screen
nohup command &
ctrl +z 暫停,bg後臺運行
▼ 獲取最經常使用的命令
history | awk '{cmd[$2]++} END{for (i in cmd) print i,cmd[i] } ' | sort -nr -k 2 | head | column -t
▼ 生產環境中的硬盤分區



▼查看系統已經登錄的命令
w 顯示誰遠程登陸了系統而且在幹什麼
who---顯示誰遠程登陸了
last--顯示最近遠程登陸的用戶-也能夠查看已經登陸的用戶
lastlog-顯示系統中所用用戶的最近一次的登陸信息

查找出/tmp目錄下面修改時間是7天之前,大小在50k到2M之間,並以.log結尾的文件
find /tmp -type f -mtime +7 -size +50k -size -2M -name "*.log"
▼awk累加
a 1
b 3
c 2
d 7
b 5
a 3
g 2
f 6
d 9
相同字母累加
awk '{count[$1]+=$2} END{for (i in count) print i,count[i]} ' awk

48 Oct 3bc1997 lpas 68.00 lvx2a 138
484 Jan 380sdf1 usp 78.00 deiv 344
483 nov 7pl1998 usp 37.00 kvm9d 644
320 aug der9393 psh 83.00 wiel 293
231 jul sdf9dsf sdfs 99.00 werl 223
230 nov 19dfd9d abd 87.00 sdiv 230
219 sept 5ap1996 usp 65.00 lvx2c 189
216 Sept 3zl1998 usp 86.00 kvm9e 234
要求: 奇數行與偶數行合併輸出
sed 'N;s#\n# #g'
xargs -n14 < file 每行14列
xargs -d "\n" -n2< \n爲分隔符,每行2列
awk'ORS=NR%2==0?"\n":" "'
awk'NR%2==1{line=$0;next}{print line,$0}'

▼線程與進程
進程:
優勢:多進程能夠同時利用多個CPU,可以同時進行多個操做。
缺點:耗費資源(建立一個進程從新開闢內存空間)。
進程不是越多越好,通常進程個數等於cpu個數。
 
線程:
優勢:共享內存,尤爲是進行IO操做(網絡、磁盤)的時候(IO操做不多用cpu),可使用多線程執行併發操做。
缺點:搶佔資源。
線程也不是越多越好,具體案例具體分析,切換線程關係到請求上下文切換耗時。
計算機中執行任務的最小單元:線程。
 
IO密集型(不用cpu):多線程
計算密集型(用cpu):多進程
費時的操做和消耗資源也就是佔內存的操做放在子線程中,更新UI之類的放在主線程中,他們之間經過消息傳遞實現

用戶訪問網站流程

一、用戶訪問網站流程框架
二、DNS解析原理 *****
三、tcp/ip三次握手原理 *****
四、http協議原理(www服務的請求過程)請求報文細節!
五、大規模網站集羣架構細節。
六、http協議原理(www服務的響應過程)響應報文細節!
七、tcp/ip四次揮手過程原理 *****

域名解析IP的過程,http請求鏈接,握手,報文請求網頁,服務器響應,

▼內存佔前三
ps -eo "%C : %p : %z : %a" --sort -vsz
psaux | sort -k4nr | head -3

使用rsync守護進程模式,常常會出現的異常狀況說明

https://blog.51cto.com/lidao/1914588
▼ tcp報文控制字段
【源端口】- 16bit
來源處的端口號; 
   【目的端口】- 16bit 
  目的處的端口號; 
   【序號】- 32bit 
  每個TCP報文段都會有一個序號,序號字段的值實際上是本報文段所發送的數據的第一個字節的序號。
  這是由於TCP是面向鏈接的可靠服務,其每個字節都會對應一個序號,經過序號來確保服務的可靠性和有序性。 
   【確認號】- 32bit 
 確認號,是指望收到對方的下一個報文段的數據的第一個字節的序號。
   【數據偏移】- 4bit 
      其實它本質上就是「首部長度」,由於「數據偏移」是指TCP報文段的數據部分的起始處距離TCP報文段的起始處的距離。
      數據偏移總共佔4bit,所以最大能表示的數值爲15。而數據偏移的單位是「4字節」,
      此處的設計和IP數據報的設計是徹底相同的,因此說TCP報文段首部的長度最長爲15×4=60字節,且首部長度必須爲4字節的整數倍。 
    【保留字段】- 6bit 
      這6bit在標準中是保留字段,我猜想,有兩個目的,
      第一個是預留除URG/ACK/PSH/RST/SYN/FIN/以外的冗餘功能位;
      第二個是爲了對其字節位。 
    【緊急字段URG】- 1bit 
      此字段告訴系統此報文段中有緊急數據,應儘快傳送。當URG=1時, 
    【確認字段ACK】- 1bit 
      當ACK=1時,表示確認,且確認號有效;當ACK=0時,確認號字段無效。 
    【推送字段PSH】- 1bit 
      當PSH=1時,則報文段會被儘快地交付給目的方,不會對這樣的報文段使用緩存策略。 
    【復位字段RST】- 1bit 
      當RST爲1時,代表TCP鏈接中出現了嚴重的差錯,必須釋放鏈接,而後再從新創建鏈接。 
    【同步字段SYN】- 1bit 
      當SYN=1時,表示發起一個鏈接請求。 
    【終止字段FIN】- 1bit 
      用來釋放鏈接。當FIN=1時,代表此報文段的發送端的數據已發送完成,並要求釋放鏈接。 
    【窗口字段】- 16bit 
      此字段用來控制對方發送的數據量,單位爲字節。 
      通常TCP鏈接的其中一端會根據自身的緩存空間大小來肯定本身的接收窗口大小,而後告知另外一端以肯定另外一端的發送窗口大小。 
    【校驗和字段】- 16bit 
      這個校驗和是針對首部和數據兩部分的。 
    【緊急指針字段】- 16bit 
      緊急指針指出在本報文段中的緊急數據的最後一個字節的序號

▼一個網卡添加多個IP
別名及輔助IP
ifconfig eth0:1 10.0.0.100 netmask 255.255.255.224 up
輔助IP(secondary ip address)
ip addr add 10.0.0.100/24 dev eth0
ip addr add 10.0.0.101/24 broadcast 10.0.0.255 dev eth0
ip addr add 10.0.0.101/24 broadcast 10.0.0.255 dev eth0 label eth0:0

輔助IP則是由linux系統的ip命令建立和維護的,ip addr add建立的輔助IP,不能經過ifconfig查看,

    可是通ifconfig建立的別名IP卻可在ip addr show命令查看

 1. heartbeat2.1.4及之前使用的是別名IP,heartbeat2.1.4之後使用的都是輔助IP,提供VIP服務

    2. keepalived一直都是用的輔助IP提供服務

▼查找文件並複製

find /tmp/ -type f -mtime +7 -size +50k -size -2M -name "*.log"|xargs -i cp {} /data
find /tmp/ -typef -mtime +7 -size +50k -size -2M -name "*.log" -exec cp {} /tmp \;
find /tmp/ -type f -mtime +7 -size +50k -size -2M -name "*.log"|xargs  cp -t/data
cp $( find /tmp/ -type f -mtime +7 -size +50k -size -2M -name"*.log")  /data

▼ 登錄環境故障

-bash-4.1$
-bash-4.1$
通常是由於用戶刪除文件的時候,把當前用戶的家目錄的一些隱藏文件刪除所致使的
解決方法:把用戶老家的模板/etc/skel下面的文件複製過來,

▼ 文件命中有特殊字符刪除(空格)
find /oldboy/0413/ -type f -name"*.log" -print0 |xargs -0 ls -l

單引號:
所見即所得:即將單引號內的內容原樣輸出
雙引號: 變量命令展開
無引號:把內容輸出出來,可能不會將含有空格的字符串視爲一個總體輸出, 若是內容中有命令、變量等,會先把變量、命令解析出結果,而後在輸出最終內容來,若是字符串中帶有空格等特殊字符,則不能完整的輸出,須要改加雙引號,通常連續的字符串,數字,路徑等能夠用,不過最好用雙引號替代之


CPU使用率超過80%或硬盤超過85%郵件報警

[root@oldboy scripts]# cat check.sh
#!/bin/bash
LANG=en_US.UTF-8
cpuUsed=`top -n 1|awk -F '[, %]+' 'NR==3 {print100-$11}'`
diskUsed=$(df -h|awk -F '[ %]+'  '/\/$/{print $5}')
logFile=/tmp/jiankong.log
 
function Sendmail(){
    mail -s"監控報警" user@oldboyedu.com <$logFile
}
 
function check(){
    if [ `echo"$cpuUsed>80"|bc` -eq 1 -o $diskUsed -ge 85 ];then
       echo"CPU使用率:${cpuUsed}%,磁盤使用率:${diskUsed}%">$logFile
      Sendmail
    fi
}
 
function main(){
    check
}

main


如何快速刪除Linux中海量小文件
當一個命令接上不少參數(幾十萬以上)會報一個錯誤:Argument list too long

1)  ls|xargs rm -f
2)  find . -type f|xargs rm -f
3)  mkdir /null
rsync-av --delete /null/ /tmp/


出現 kernel: nf_conntrack: table full, dropping packet.如何解決

dmesg或/var/log/messages 出現 kernel: nf_conntrack: table full, dropping packet.
上述結果會讓業務訪問很慢!各類網絡服務耗時大幅上升,各類 timed out,各類丟包,徹底沒法正常提供服務。大併發業務場景下,開防火牆很容易出現這種問題
解決方法1:關閉防火牆服務
解決方法2:修改內核參數/etc/sysctl.conf
更根本的解決方法是增長服務器或使用硬件防火牆分擔請求

net.nf_conntrack_max= 25000000
net.netfilter.nf_conntrack_max= 25000000
net.netfilter.nf_conntrack_tcp_timeout_established= 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait= 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait= 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait= 120


若是分區滿了,如何增長調整分區的容量

  1. 若是使用LVM分區,而且服務器還有多餘的硬盤空間,那麼能夠將這些空間合併到這個分區中。
  2. 若是沒有使用LVM分區,可是服務器還有多餘空間,能夠在這個分區建立一個目錄,而後將其餘分區掛載到這個目錄,變相擴大分區空間。
  3. 若是沒有使用LVM分區,而且服務器沒有剩餘空間,那就須要找一臺容量更大的服務器進行數據遷移。

▼ 1-100 累加
seq -s + 100 | bc
awk 'BEGIN{ for(i=1;i<=100;i++) {sum+=i} ;print sum }'

▼ 父進程產生子shell
執行腳本
command &
()
使用管道命令

▼ 取access ip 數
awk '{print $1}' access_log | sort -nr | uniq -c | sort -nr
awk '{s[$1]++}END{for (i in s) print s[i],i}' access.log |sort -rn

▼ 清除binlog 日誌
從第一個文件刪除到第四個 
mysql> purge binarylogs to 'mysql-bin.000004';
按照時間,刪除指定時間以前的
mysql> PURGE MASTER LOGS BEFORE '2017-03-20 00:00:00';
清除全部bin-log
mysql> reset master;
二、設置自動刪除
自動刪除7天以前的bin-log文件寫入配置文件
expire_logs_days = 7
命令行生效
set global expire_logs_days = 7;
▼ MySQL主從複製常見故障及解決方法

MySQL主從複製延遲問題緣由和解決方案

 問題1:主庫的從庫太多,致使複製延遲
從庫數量通常 3—5個爲宜,要複製的節點過多,致使複製延遲。
問題2:從庫硬件配置比主庫差,致使延遲
查看Master和Slave的配置,可能由於配置不當致使複製的延遲
問題3:慢SQL語句過多
假如一條語句執行時間超過2秒, 就須要進行優化進行調整
問題4:主從複製設計問題
主從複製單線程,若是主庫的寫入併發太大,來不及傳送到從庫,就會致使延遲,更高版本的MySQL能夠支持多線程複製,門戶網站則會本身 
開發多線程同步功能。
問題5:主從庫之間的網絡延遲
主從庫網卡、網線、鏈接的交換機等網絡設備均可能成爲複製的瓶頸,致使複製延遲,另外跨公網主從複製很容易致使主從複製延遲。
問題6:主庫讀寫壓力大,致使複製延遲
主庫硬件要好一些,架構前端要加buffer緩存層。

▼ 腳本開機自啓動
方法一 簡單粗暴/etc/rc.local 注意服務啓動順序

方法二 專業的管理工具chkconfig
    Chkconfig管理一個服務或腳本讓他開機自啓動有下面幾個條件:
    1.這個服務或腳本必須存放在/etc/init.d目錄下面
    2.必需要有執行權限(x權限)
    3.這個腳本或服務的前幾行必需要有
    # chkconfig: 2345 99 99 必需要有這一行不然chkconfig不認識
    #[空格]chkconfig:[空格]默認在哪一個運行級別啓動這個服務或軟件[空格]第幾個開機啓動的[空格]關機的順序
    4.chkconfig --add 服務名字/腳本名字 把服務或腳本加入到chkconfig 管理之中

    方法三
      systemd 服務建立


chmod命令沒有執行權限(x權限)或者chmod命令文件的權限爲000
方法一;

[root@oldboyedu bin]# cp cp /oldboy/chmod.new
(此時複製cp命令文件命名叫chmod.new,此時chmod.new文件有就x的權限,但chmod.new不具有有chmod命令的共功能)

[root@oldboyedu bin]# cd /oldboy/
[root@oldboyedu oldboy]# cat /bin/chmod > chmod.new
(把沒有x權限的chmod命令文件內容cat到chmod.new,此時chmod.new就有了同chmod同樣的功能)

[root@oldboyedu oldboy]# ll
total 52
-rwxr-xr-x 1 root root 52472 May  1 23:09 chmod.new
[root@oldboyedu oldboy]# ./chmod.new +x /bin/chmod
(能夠用chmod.new文件給/bin/chmod命令受權x權限)
方法二:
使用ACL
 setfacl -m u:root:rwx /bin/chmod
 chmod +x /bin/chmod


1)第一個參數爲URL,便可下載的文件;第二個參數爲目錄,即下載後保存的位置;
2)若是用戶給的目錄不存在,則提示用戶是否建立;若是建立就繼續執行,不然,函數返回一個51的錯誤值給調用腳本;
3)若是給的目錄存在,則下載文件;下載命令執行結束後測試文件下載成功與否;若是成功,則返回0給調用腳本,不然,返回52給調用腳本;

root@oldboyedu scripts]# cat downfile.sh
#!/bin/bash
url=$1
dir=$2
download()
{
    if [ ! -e $dir ];then 
        read -p "$dir No such file or directory,create?(y/n)" answer
        if [ "$answer" == "y" ];then
        mkdir -p $dir
        cd $dir
        wget $url 1 >/dev/null 2>&1
        if [ $? -ne 0 ]; then
        return "52"
        fi
        else
        return "51"
        fi
    fi
    }
download $url $dir
echo $?

▼ 轉換爲大寫
tr "[a-z]" "[A-Z]" < test.sh
awk '{print toupper($0) }' test.sh
sed 's#[a-z]#\u&#g' oldboy.txt

變量擴展-${para,pattern}
root@m01 ~]# echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[root@m01 ~]# big=`echo {A..Z}`
[root@m01 ~]# echo $big
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[root@m01 ~]# echo ${big,A}
a B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[root@m01 ~]# echo ${big,*}
a B C D E F G H I J K L M N O P Q R S T U V W X Y Z
[root@m01 ~]# echo ${big,,*}
a b c d e f g h i j k l m n o p q r s t u v w x y z

▼alias 在 /root/.bashrc定義

▼ vim編輯命令的自動縮進功能所影響,所以粘貼帶註釋的代碼時能夠取消自動縮進
:set paste #<--在vim的命令行模式輸入,關閉vim縮進功能
:set nopaste #<--開啓vim縮進功能
修改用戶家目錄下的 .vimrc配置文件:
set pastetoggle=
▼ 邏輯卷配置

通配符
{}最經常使用的就是生成序列echo {a..z}
[]最經常使用的功能是正則表達式中的筐,表示或者 [abc] [a-z] [0-9]
正則
{n,m}
[ ] 中的字符

17/Apr/2015:09:29:24 +0800
變爲 2015-04-17 09:29:24 +0800
sed -r 's@([0-9]+)/Apr/(2015)@\2-04-\1@' soho.txt | sed 's/:/ /'
awk 'BEGIN{FIELDWIDTHS="2 1 3 1 4 1 8 1 5"}{print $5"-04-"$1,$7,$NF}' system_date.txt

▼ 管道與管道| xargs
find  |xargs ls -ld##把前一個命令的結果,經過管道傳遞給後面的命令(ls -ld),傳遞的是文件名
find  | 命令    ##把前一個命令的結果,經過管道傳遞給後面的命令,傳遞的是普通的文本,文字,字符串

find /oldboy -type f |xargs  find命令找到的文件一次性都給 |xargs 處理
find /oldboy -type f -exec   -exec find命令找到一個文件 就傳遞給 -exec 處理一次

一個100M的磁盤分區,寫入0.5K的文件,或寫入1M的文件,分別能夠寫多少個

a、上面的考試題考察的是文件系統inode和block知識。
b、inode是存放文件屬性信息的(也包含指向文件實體的指針),默認大小爲128byte(c58),256byte(c64)
c、block是存放文件實際內容的。默認大小1K(boot)或4K(非系統分區默認給4K),通常企業多用4K的block。
d、一個文件至少要佔用一個inode及一個block。
e、默認較大分區常規企業真實場景狀況下,inode數量是足夠的。而block數量消耗會更快

 一、默認分區常規狀況下,對大文件來說inode是足夠的。而block數量消耗的會更快,block爲4K的狀況下,1M的文件不會有浪費磁盤的狀況,因此文件數量大概爲100/1=100個。
二、對於小文件0.1K,inode會消耗的更快。默認分區block的數量大於inode數量的。每一個小文件都會佔用一個inode和一個block,inode會先消耗完,文件總量是inode的數量。

▼ tmp目錄的下的備份文件忽然沒
在Centos/RHEL/Fedora系統下存在清理機制
tmpwatch命令的做用就是刪除一段時間內不使用的文件
安裝後會在/etc/cron.daily/目錄下生成一個tmpwatch

▼ awk -F: -v OFS=":" '{a=$1;$1=$NF;$NF=a;print }' passwd
調換 /etc/passwd 文件裏 root 位置和/bin/bash 位置
sed -r 's@^([^:]+)(:.:)(/.$)@\1--------\3---@p' passwd

▼ 統計/var/log/下全部文件個數
一、/var/log/下全部文件包括當前目錄和子目錄以及子目錄的子目錄下面的文件
二、linux下文件有不少類型,包括 普通文件、連接文件、字符設備文件、塊設備文件、socket文件等

tree  /var/log/  | awk  'END { print  $3}'
 find  /var/log/     -type   f    | wc -l
  ll -R /var/log/ |egrep "^[sl-][rwx-]{9}"

批量添加20個用戶,用戶名爲user1~20,密碼爲5個隨機字符(要求不能使用shell循環語句)

 echo user{1..20}|xargs -n1|sed -r 's#(.*)#useradd \1 && pass=echo $RANDOM |md5sum |cut -c 1-5 && echo $pass |passwd --stdin \1 && echo \1 $pass>>/tmp/user_passwd.txt#g'|bash

echo user{01..20}|xargs -n1|awk '{print "useradd "$1"&& echo $(uuidgen|cut -c -8)|passwd --stdin "$1}'|bash
echo stu{01..10}|tr " " "\n"|sed -r 's#(.)#useradd \1;pass=$((RANDOM+10000000));echo $pass|passwd --stdin \1;echo \1\t$pass>>/tmp/user_pass.txt#g' | bash

oldboyedu.com
123456789
oldboy
oldgirl
1)刪除文件每行的第二個字符
2)把全部小寫字母用括號()括起來
sed -nr 's@(.)(.)(.
)@\1\3@p' soho.txt | sed -nr 's@([[:lower:]])@(\1)@gp'

sed 's#.##2' passwd
 sed  's@[a-z1-9]@(&)@g'  soho.txt

▼ 在目錄/tmp下找到10個以abc開頭的文件,而後把這些文件的第一行內容保存到文件new中
find . -maxdepth 1 -type f -ls | awk '{ print "cat "$NF " | head -1 >> new" }' |column -t | bash

cat /server/scripts/find.sh
#!/bin/sh
for filename in find /tmp -type f -name "abc*"|head -n 10
do
sed -n '1p' $filename>>new
done

▼ 經過Iptables來限定apache每秒鐘鏈接數爲1,峯值爲3
iptables -A INPUT -d 172.16.100.1 -p tcp --dport -m limit --limit 1/second --limit-burst -j ACCEPT


文件節點問題inode ,mv文件後節點信息及對應點不變
Apache 產生的日誌文件名爲access_log,在apache 正在運行時,執行命令mv access_log access_log.bak,執行完後,請問新的apache 的日誌會打印到哪裏,爲何?

新的日誌會打印在access_log.bak 中,由於apache 啓動時會找access_log 文件,隨時準備向文件中加入日誌信息,雖然此時文件被更名,可是因爲服務正在運行,由於它的inode 節點的位置沒有變,程序打開的fd 仍然會指向原來那個inode,不會由於文件名的改變而改變。apache 會繼續向已更名的文件中追加日誌,可是若重啓apache 服務,系統會檢查access_log文件件是否存在,若不存在則建立

▼ 實現172.16.1.0/24段全部主機經過124.32.54.26外網IP共享上網
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE

▼ trap 信號 linux系統腳本中trap信號都有哪些,如何進行使用

▼ grep -q oldboy /etc/passwd 靜默模式,不打印到屏幕
▼ 讓linux也像windows那樣有一個回收站,避免數據的誤刪除,進而恢復誤刪數據

mkdir -p ~/.trash
cat >> .bashrc <<EOF
alias rm=trash
alias rl='ls ~/.trash'
alias ur=undelfile
undelfile()
{
  mv -i ~/.trash/ \$@ ./
}

trash()
{
  mv\$@ ~/.trash/
}

cleartrash()
{
   read -p "clear sure?[n]" confirm
    [\$confirm == 'y' ] || [ \$confirm == 'Y' ] && /bin/rm -rf ~/.trash/*
}
EOF

▼ ls 00.html  01.html  02.html  03.html  04.html  05.html  06.html  07.html  08.html  09.html  10.html
批量重命名
rename  .html  .jpg  .html
ls 
.html|awk -F. '{print "mv",$1".html",$1".jpg"}'mv 00.html 00.jpg
 for name in ls *.html;do echo $name ${name%.html}.jpg;done

▼Linux沒法聯網
IP設置,ping自身
ping 百度 域名解析狀況
網關是否可達
路由是否異常

▼ /etc/profile 主要用是系統的環境變量,同時咱們也放些別名
/etc/bashrc 主要用來存放系統的別名和本身定義的函數(均可以放到 /etc/profile中)
.bashrc 是用戶本身定義的別名
.bash_profile 是用戶本身定義的環境變量
先讀取/etc/profile文件,而後讀取用戶本身的.bash_profile而後讀取.bashrc的內容最後讀取/etc/bashrc這個文件

/etc/profile /etc/bashrc 爲全局環境變量,到哪均可以用,這裏只針對命令行,在一些軟件中不行
    /etc/profile 放置系統的變量   別名也能夠放在這裏
    /etc/bashrc 放置別名
    .bashrc .bash_profile 只針對當前登錄的用戶生效

▼ 修改主機名
cat /etc/hostname
▼按下ctrl+c都會出現一個比較麻煩的字符信息^C
中斷不顯示^C:  stty -echoctl
終端顯示^C:    stty echoctl
▼ 不顯示文件空行
grep -v "^$" oldboy.txt
sed '/^$/d' oldboy.txt
awk '!/^$/' oldboy.txt
空格
grep -v "^[ ]$" oldboy.txt
sed  '/^[ ]
$/d' oldboy.txt
awk '!/^[ ]$/' oldboy.txt
空格或tab
sed '/^[ \t]
$/d' oldboy.txt
awk '!/^[ \t]*$/' oldboy.txt

實現 Nginx 代理的節點訪問日誌記錄客戶的 IP 而不是代理的 IP

使用proxy反向代理模塊中的proxy_set_header參數

proxy_set_header X-Forwarded-For $remote_addr;
▼帶寬暴增
a.真實遭受DDOS攻擊(遇到過幾回,形成影響的很少見,其中還有黑客勒索的案例)。
 b.內部服務器中毒,大量外發流量(這個問題老男孩接警5次以上)
 c.網站元素(如圖片)被盜連,在門戶頁面被推廣致使大量流量產生(接警3次以上)
 d.合做公司來抓數據,如:對合做單位提供了API數據接口(有合做的公司的朋友瞭解這個)
 e.購買了CDN業務,CDN猛抓源站(這個次數也很多)。
 f.其餘緣由還有一些,不廣泛就不提了。
▼目前已知形成硬盤分區只讀的可能緣由有:
文件系統錯誤
內核相關硬件驅動bug
磁盤壞道
HBA卡故障
RAID卡故障

解決方法:
1.重啓系統後看看是否能夠自動恢復
2.使用fdisk修復
3.卸載只讀的分區,而後從新mount掛載

把第一個文件中的第二、3行內容添加到第二個文件的第3行後面
[root@oldboy ~]# cat 1.txt
111
222
333
[root@oldboy ~]# cat 2.txt AAA
bbb
ccc
ddd
要求修改後的文件

[root@oldboy ~]# cat 2.txt
AAA
bbb
ccc
222
333
ddd
``

sed -n 2,3p 1.txt |xargs |sed -r 's# #\n#g'|sed -r 's#.*#sed -i "3a&" 2.txt#g' |bash
 sed -i "3a$(sed -n '2,3p' 1.txt |xargs |sed 's# #\n#g')" 2.txt 

nfs客戶端掛載信息寫入/etc/fstab中,系統重啓,沒有自動掛載是什麼緣由

系統啓動時,執行掛載操做的時候,網絡服務尚未啓動,而nfs掛 載須要網絡服務
一、 系統啓動時,同時啓動netfs
chkconfig netfs on
二、 掛載命令寫入
/etc/rc.local
▼ nginx 優化內容
1.gzip壓縮優化
2.expires緩存優化
3.網絡IO事件模型優化
4.隱藏軟件名稱和版本號
5.防盜鏈優化
6.禁止惡意域名解析
7.禁止經過IP地址訪問網站。
8.HTTP請求方法優化。
9.防DOS攻擊單IP併發鏈接的控制,與鏈接速率控制。
10.嚴格設置Web站點目錄的權限。
11.將Nginx進程以及站點運行於監牢模式(nginx服務降權啓動(不能使用80端口,使用其餘端口,例如8080)、站點目錄設置普通用戶)。
12.經過robot協議以及HTTP_USER_AGENT防爬蟲優化
13.配置錯誤頁面根據錯誤碼指定網頁反饋給用戶
14.Nginx日誌相關優化
  訪問日誌切割輪詢、不記錄指定元素日誌、最小化日誌目錄權限。
15.限制上傳到資源目錄的程序被訪問,防止木馬入侵系統破壞文件。
16.FastCGI參數buffer和cache以及超時等的優化。
17.php.ini和php-fpm.conf配置文件的優化。
18.有關Web服務的linux內核方面深度優化(網絡鏈接、IO、內存等)。
19.Nginx加密傳輸優化(SSL)。
20.Web服務器磁盤掛載及網絡文件系統優化。
21.使用Nginx cache。
22.nginx WAF(nginx+lua) 安全。

▼企業生產MySQL如何優化
a:硬件的優化:
一、 採用64位cpu,cpu至少4顆,L2緩存越大越好
二、 內存要大,32-64G運行1-2個實例,96-128G運行3-4個實例
三、 機械盤選用sas盤,轉速15000以上,用可能的話使用ssd
四、 raid卡使用raid10
五、 網卡多塊,千兆以上
六、 數據庫不要使用虛擬化,slave硬件要好於master

b:操做系統優化
    一、    操做系統選擇x86_64位,儘可能採用xfs文件系統
    二、    優化磁盤存儲參數
    三、    優化內核參數
    四、    優化網絡等

    c:mysql構架優化
    一、根據內存大小,配置服務器跑多實例
    二、主從複製採用mixed模式,儘可能不要跨機房同步,若要跨機房,儘可能採用遠程寫,本地讀
    三、按期檢查、修復主從複製的數據差別
    四、業務拆分,搜索功能不使用MySQL數據庫執行;某些高併發,安全性通常的業務使用nosql,如:memcache、 redis等
    五、數據庫前端加cache,如memcache,用於用戶登陸,商品查詢
    六、動態數據靜態化,整個文件靜態化,頁面片斷靜態化
    七、數據庫集羣讀寫分離,一主多從,經過dbproxy進行集羣讀寫分離
    八、單表超過800萬,拆庫拆表,如人工將(登陸、商品、訂單)拆表拆庫
    九、選擇從庫備份,而且對數據庫進行分表分庫備份

    d:MySQL數據庫層面優化
    一、    優化my.cnf參數
    二、    優化庫表設計,包括字符集、字符串長度、建立短索引、多用複合索引;
    三、    SQL語句優化,減小慢語句數量;

    e:數據庫管理流程、制度優化
    一、    人的流程:開發—>核心運維/DBA
    二、    測試流程:內網 IDC測試線上執行
    三、    客戶端管理,PHPMYADMIN

    f:MySQL數據庫安全優化
    一、    數據庫禁止設置外網
    二、    數據庫文件權限優化;
    三、    受權用戶權限限制,儘可能專庫專用戶
    四、    限制開發對生產庫的操做權限
    五、    防止SQL語句注入

▼ 顯示/etc/inittab中以#開頭,且後面跟了一個或多個空白字符,然後又跟了任意非空白字符的行
egrep "^#[[:blank:]]+[^[:blank:]]" /etc/inittab
grep -P "^#[ \t]+[^ \t]
" /etc/inittab
grep -P "^#\s+\S+" /etc/inittab

sed -n '/^#[[:blank:]]+[^[:blank:]]*/p' /etc/inittab

sed -n '/^#[ \t]+[^ \t]*/p' /etc/inittab  
sed -nr '/^#\s+\S+/p' /etc/inittab

awk   '/^#[[:blank:]]+[^[:blank:]]/' /etc/inittab
awk   '/^#[ \t]+[^ \t]
/' /etc/inittab  
awk   '/^#\s+\S+/' /etc/inittab

▼iptables支持time時間控制用戶行爲,若有請寫出具體操做步驟,限制在每一個星期一的0點0分0秒到23點59分59秒這個時間段內,全部icmp協議報文的應答都會拒絕
iptables -A INPUT -p ICMP --icmp-type 8 -m time --timestart 00:00:00 --timestop 23:59:59 --weekdays Mon -j DROP

▼ permission denied 即權限拒絕 沒有權限,是咱們常見的故障之

顯示目錄裏面的內容 須要oldboy用戶對這個目錄要有r和x的權限
刪除一個文件須要oldboy用戶對這個文件的上一級目錄 擁有w和x權限。
對於修改文件的內容,要看oldboy用戶對這個文件是否有r和w的權限

對shell腳本進行加密

shc
shc -r -f script-name 注意:要有-r選項, -f 後跟要加密的腳本名.
運行後會生成兩個文件,script-name.x 和 script-name.x.c
script-name.x是加密後的可執行的二進制文件.
./script-name 便可運行.
script-name.x.c是生成script-name.x的原文件(c語言)
gzexe


書寫腳本完成ftp上傳下載

#!/bin/sh        
#FileName:ftpput.sh    
#Function:從本地客戶端向ftp服務器上傳一個文件      
#Version:V0.1        
#Author:    
#Date:
# $#表示傳遞給此Shell腳本的參數個數  
# -ne表示不等於  
if [ $# -ne 2  ]  
then  
    echo "Usage $0  <local_dir/filename> <remote_dir>"  
    exit 1  
fi    
說明:若是傳遞的參數個數不等於2個,即提示傳參報錯信息

# IP表示ftp的服務器ip地址  
IP=127.0.0.1    
#IP=192.168.6.1  
 
# FULLNAME獲取本地文件全路徑名  
FULLNAME=$1  
 
# DESTDIR獲取須要上傳的ftp遠程目錄路徑  
DESTDIR=$2 

# basename返回一個路徑中的文件名部分  
# 如FULLNAME="/home/Sunrier/Proj/log/test.log";  
# 當local_filename=`basename $FULLNAME`  
# 最終local_filename="test.log"  
local_filename=`basename $FULLNAME`  
 
# DESTFILE表示ftp服務器的路徑,以及保存後的文件名  
DESTFILE=$DESTDIR/$local_filename  

# 自動上傳文件到ftp服務器,免交互方式
ftp -i -n <<FTPIT  
open $IP  
user Sunrier redhat  
bin  
passive  
cd /home/remote/log/ftpfile  
put $FULLNAME $DESTFILE  
quit  
FTPIT  
exit 0
#FileName:ftpget.sh    
#Function:從ftp服務器上下載一個文件到本地計算機上      
#Version:V0.1        
#Author:
#Date:
     
# $#表示傳遞給此Shell腳本的參數個數  
# -ne表示不等於  
if [ $# -ne 2  ]  
then  
    echo "Usage $0  <remote_dir/filename> <local_dir>"  
    exit 1  
fi 

# IP表示ftp的服務器ip地址  
IP=127.0.0.1    
#IP=192.168.6.1 

# FULLNAME獲取從ftp服務器上下載的文件全路徑名  
FULLNAME=$1 

# DESTDIR獲取從ftp服務器上下載的文件所存放的本地計算機的目錄路徑  
DESTDIR=$2  
 
# remote_filename獲取從ftp服務器上下載的文件名  
remote_filename=`basename $FULLNAME`  
 
# DESTFILE表示下載文件所存放的本地路徑,以及本地保存後的文件名  
DESTFILE=$DESTDIR/$remote_filename

ftp -i -n <<FTPIT  
open $IP  
user Sunrier redhat  
bin  
cd /home/remote/log/ftpfile  
get $FULLNAME $DESTFILE  
quit  
FTPIT       
exit 0

▼建設一個能承受500萬PV/天天的網站嗎? 500萬PV是什麼概念?
服務器每秒要處理多少個請求才能應對?如何計算呢?

PV是什麼:
PV是page view的簡寫。PV是指頁面的訪問次數,每打開或刷新一次頁面,就算作一個pv。

計算模型:
每臺服務器每秒處理請求的數量=((80%總PV量)/(24小時60分60秒40%)) / 服務器數量 。
其中關鍵的參數是80%、40%。表示一天中有80%的請求發生在一天的40%的時間內。
24小時的40%是9.6小時,有80%的請求發生一天的9.6個小時當中(很適合互聯網的應用,白天請求多,晚上請求少)。

簡單計算的結果:
((80%500萬)/(24小時60分60秒40%))/1 = 115.7個請求/秒
((80%100萬)/(24小時60分60秒40%))/1 = 23.1個請求/秒

初步結論:
如今咱們在作壓力測試時,就有了標準,若是你的服務器一秒能處理115.7個請求,就能夠承受500萬PV/天天。
若是你的服務器一秒能處理23.1個請求,就能夠承受100萬PV/天天。

留足餘量:
以上請求數量是均勻的分佈在白天的9.6個小時中,但實際狀況並不會這麼均勻的分佈,會有高峯有低谷。
爲了應對高峯時段,應該留一些餘地,最少也要x2倍,x3倍也不爲過。

115.7個請求/秒 2倍=231.4個請求/秒
115.7個請求/秒 3倍=347.1個請求/秒
23.1個請求/秒 2倍=46.2個請求/秒
23.1個請求/秒 3倍=69.3個請求/秒

最終結論:
若是你的服務器一秒能處理231.4—347.1個請求/秒,就能夠應對平均500萬PV/天天。
若是你的服務器一秒能處理46.2—69.3個請求,就能夠應對平均100萬PV/天天。

說明:
這裏說明每秒N個請求,就是QPS。由於我關心的是應用程序處理業務的能力。

▼一、克隆虛擬機,克隆前需關閉虛擬機
二、克隆以後的網卡問題解決,其中須要修改HWADDR和UUID
  /etc/sysconfig/network-scripts/ifcfg-ens32
  uuid獲取:用命令 nmcli con show 獲取
  mac地址獲取:從虛擬機的屬性裏獲取
▼如何經過端口查找出進程所在目錄
1.咱們能夠從netstat -antup命令中獲得進程的PID
2.進入/proc目錄下以該PID命名的目錄中
3.輸入ls -ail,結果中 exe連接對應的就是可執行文件的全路經詳細信息 
cwd符號連接的是進程運行目錄;
exe符號鏈接就是執行程序的絕對路徑;
cmdline就是程序運行時輸入的命令行命令;
environ記錄了進程運行時的環境變量;
fd目錄下是進程打開或使用的文件的符號鏈接

找出/usr/local 下面全部shell腳本文件,並設置執行權限
find . -maxdepth 1 -type f | xargs file | awk -F":" '$2 ~ /shell script/ { print $1 }'
Mount掛載/data時出現mount: /data is busy 如何解決

查看是否正在使用中

    df -h查看下

    有時候會存在 df -h不會顯示出來,但是實際還在掛載

    這時候 grep 「/data」 /proc/mounts 來進行查看

    而後卸載 umount /data

    卸載失敗就強制卸載umount -lf /data

    而後mount新的設備便可。

▼timedatectl set-timezone Asia/Shanghai


php-fpm優化關閉危險參數有哪些

一、打開php的安全模式
php的安全模式是個很是重要的php內嵌的安全機制,可以控制一些php中的函數執行,好比system(),同時把被不少文件操做的函數進行了權限控制。
默認關閉,338行
safe_mode = Off
改成
safe_mode = On
二、用戶組安全
; By default, Safe Mode does a UID compare check when
; opening files. If you want to relax this to a GID compare,
; then turn on safe_mode_gid.
; http://php.net/safe-mode-gid
safe_mode_gid = Off # php5.3.27默認關閉
三、關閉危險函數
當打開安全模式,函數禁止能夠不作,但爲了雙重保險仍是作。好比不執行system()能執行系統命令的函數,或能查看php信息的phpinfo()等函數。方法以下
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
四、關閉php版本號
php版本號會在http的head裏顯示
expose_php = On
改成
expose_php = Off
五、關閉註冊全局變量
register_globals = Off # 默認關閉,不要打開
六、打開magic_quotes_gpc防止SQL注入
magic_quotes_gpc = Off
改成
magic_quotes_gpc = On
七、錯誤信息控制
通常php在沒有鏈接到數據庫或者其餘狀況下會有錯誤提示,通常錯誤信息中會包含php腳本當前的路徑信息或者查詢的SQL語句等信息,這類信息在生產環境是不容許的,應禁止。想要錯誤信息,應該導入日誌。
display_errors = Off (默認值,不是改成off)

顯示錯誤級別
error_reporting = E_WARNING & E_ERROR
八、錯誤日誌
log_errors = On
log_errors_max_len = 1024 # Set maximum length of log_errors.
error_log = /app/logs/php_errors.log # 注意寫權限
九、資源參數限制優化

設置每一個腳本運行的最長時間,當沒法上傳較大的文件或者後臺備份數據常常超時,需調整下面參數,單位秒。

max_execution_time = 30

每一個腳本使用的最大內存

memory_limit = 128M

每一個腳本等待輸入數據最長時間

max_input_time = 60

上傳文件的最大許可

upload_max_filesize = 2M
十、安全參數優化

禁止打開遠程地址

allow_url_fopen = On
改成
allow_url_fopen = Off

防止Nginx文件類型錯誤解析漏洞

cgi.fix_pathinfo=0

▼ 建立普通文件
touch filename
建立目錄文件
mkdir dirname
建立連接文件
ln -s filename linkname
建立塊設備文件
mknod /dev/sdb b 16 8
建立字符類型文件
mknod /dev/ccc c 20 5
建立socket文件
mksock a.sock
建立管道文件
mkfifo pipe
▼網站訪問高峯以後,如何回收已佔用的swap分區
[root@oldboy ~]# swapoff -a
[root@oldboy ~]# swapon -a
[root@oldboy ~]# free -m
▼使用ssh-keygen命令的時候,須要輸入3次回車,才能建立密鑰對,如何一鍵非交互生產密鑰對
方法一:
ssh-keygen -f ~/.ssh/id_rsa -q -N ''

方法二: ssh-keygen -t rsa -f ~/.ssh/id_dsa -P ""

相關文章
相關標籤/搜索