linux學習筆記11

apache 日誌類型


1.普通日誌格式(common logformat,CLF)     common     大多很多天志分析軟件都支持這種格式php

2.參考日誌格式(referer logformat)     referer     記錄客戶訪問站點的用戶身份
3.代理日誌格式(agent log format)     agent     記錄請求的用戶代理
4.綜合日誌格式(combined log format)    combined     結合以上三種日誌信息html

 

 

1.虛擬主機的加密node

 

在未製做以前mysql

 

wKiom1hQuwCAmxWvAADyzgzXyso409.png


 

製做https://news.westos.com 發佈頁面web

vim /etc/httpd/conf.d/music.confsql

 

<Virtualhost *:443>shell

       Servername music.westos.comapache

       Documentroot /var/www/virtual/music.westos.com/html小程序

       Customlog "logs/music-443.log" combinedvim

       SSLEngine on

       SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt

       SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key

</Virtualhost>

 

wKioL1hQuwDTKvUdAAEju0l7gCA752.png


 

 

證書信息可在/etc/httpd/conf.d/ssl.conf中查看

 

注意:在vim中打開兩個文件 :sp ssl.conf

    crtl+ w  上        切換到上一個文件

    crtl+ w  下        切換到下一個文件

 

檢測

wKiom1hQuwGiPX70AAAZBbH2XZY112.png


 

注意


在瀏覽器,訪問 https://music.westos.com ,ssl.conf若是下配置

默認顯示能夠訪問的一個存在的https界面,訪問的是music的https,而不是https的defualt,

是由於/etc/httpd/conf.d/default.conf,並無設置https的訪問,而且/etc/httpd/conf.d/ssl.conf 沒有生效/var/www/html

 

vim /etc/httpd/conf.d/ssl.conf

 

 56 <VirtualHost _default_:443>

 57

 58 # General setup for the virtual host,inherited from global configuration

 59 #DocumentRoot"/var/www/html"

 60 #ServerName www.example.com:443

 

 

若是

vim /etc/httpd/conf.d/default.conf

 

<Virtualhost *:443>

       Documentroot /var/www/html

       Customlog "logs/default-443.log" combined

       SSLEngine on

       SSLCertificateFile /etc/pki/tls/certs/www.westos.com.crt

       SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key

</Virtualhost>

 

而且

vim /etc/httpd/conf.d/ssl.conf

 

 56 <VirtualHost _default_:443>

 57

 58 # General setup for the virtual host, inheritedfrom global configuration

 59 DocumentRoot"/var/www/html"

 60 #ServerName www.example.com:443

 

在瀏覽器中訪問 https://music.westos.com/,獲得的結果頁面就是default的https(443)。

 

 

 

2.網頁重寫

 

訪問http://news.westos.com 自動跳轉到https://news.westos.com

百度就是這樣的哦~

 

vim /etc/httpd/conf.d/news.conf

 

<Virtualhost *:80>

       Servername news.westos.com

       RewriteEngine on

       RewriteRule ^(/.*)$https://%{HTTP_HOST}$1 [redirect=301]

</Virtualhost>

 

<Directory "/var/www/virtual/news.westos.com/html">

       Require all granted

</Directory>

 

<Virtualhost *:443>

       Servername news.westos.com

       Documentroot /var/www/virtual/news.westos.com/html

       Customlog "logs/news-443.log" combined

       SSLEngine on

       SSLCertificateFile/etc/pki/tls/certs/www.westos.com.crt

       SSLCertificateKeyFile /etc/pki/tls/private/www.westos.com.key

</Virtualhost>

 


wKiom1hQuwTQUI4MAAECBYIftgY751.png


 

檢測

 


wKiom1hQuwSDvhXBAAAUvDoHQiw371.png


wKiom1hQuwWy975XAAAWhItERYA617.png


 

 

 

 

http下可執行腳本

1.php

yum install php -y

 

vim /var/www/html/index.php

<?php

phpinfo ();

?>

 

vim /etc/httpd/conf/httpd.conf

 

166 <IfModule dir_module>

167    DirectoryIndex   index.phpindex.html

168 </IfModule>

 



wKioL1hQuwaw2ImuAAB1ccN6zzg841.png


 

檢測

 

wKiom1hQuwmwsEZxAADq5Uaj4f4114.png


 

2.cgi

cd /var/www/html/

mkdir cgi

 

1)vim/var/www/html/cgi/index.cgi   編寫cji腳本主頁

 

#!/usr/bin/perl

print "Content-type:text/html\n\n";

print `date`;

 

查看apache幫助手冊~

 

wKioL1hQuw3z5qTJAAFKFcyr55Y593.png


 

 

 

chmod +xindex.cgi        給腳本加可執行權限

 

未加執行權限顯示此頁面

 

wKiom1hQuxLiBSiqAACoy-HyU_k166.png


 

加了之後,成功顯示~~~

 

wKioL1hQvx2Bn-jxAABgzxpCtVw465.png


 

 

2)vim/etc/httpd/conf.d/default.conf使/var/www/html/cgi目錄下的cgi文件可執行

 

<Directory"/var/www/html/cgi">

   Options +ExecCGI

   AddHandler cgi-script .cgi

</Directory>

 

wKiom1hQvx7QoGEVAAB04XO97Wc926.png


 

 perl index.cgi         用perl執行cji腳本

 

wKiom1hQvx6SpovSAAAoTlxEDv0385.png


 

檢測

 

a)setenforce 0

 

http://172.25.254.230/cgi/index.cgi

成功顯示~~~~

 

b)setenforce1

 

wKioL1hQvx_RDOTsAADcQc77L5A655.png


 

 

[root@web www]# ll -dZ cgi-bin/

drwxr-xr-x. root rootsystem_u:object_r:httpd_sys_script_exec_t:s0cgi-bin/  

                  cgi-bin的上下文標籤

 

 

改變/var/www/html/cgi上下文標籤爲httpd_sys_script_exec_t(http可執行腳本)

semanage fcontext -a -thttpd_sys_script_exec_t '/var/www/html/cgi(/.*)?'

restorecon -FvvR /var/www/html/cgi/

 

 

wKiom1hQvyDgJ4w5AAIaMPlSGJo845.png


 

 

 

 

 

正向代理

服務器

yum install squid -y

 

56 http_access allow all

62 cache_dir ufs /var/spool/squid 10016 256

 

安裝雙網卡

 

添加網卡技能,GET~

 

wKioL1hQvyGTFMK9AAGLiMKr-m8391.png


 

eth0: inet 172.25.254.11

eth1: inet 172.25.88.100


 

wKioL1hQvyPAnhCoAAFyOIsASlg023.png


 

真機  172.25.88.250

systemctl start httpd

systemctl stop firewalld

 

檢測

客戶端:172.25.88.10

 

在配置以前,客戶端是不能訪問真機的主頁的。

 

wKiom1hQvyPhfCzjAADBLt9DdM0847.png


 

配置以後,在瀏覽器,經過代理訪問172.25.254.88(別忘記寫端口號~3128),但仍是ping不通

 


wKiom1hQvySAvDwHAAIKFxpyIR4219.png


 

wKioL1hQvyXQhXrrAAF5xAVBGTI173.png


 

正向代理和反向代理區別

 

正向代理:不須要知道,要訪問哪一個網站,客戶端須要做配置

反向代理,明確的告訴上級要去拿什麼,客戶端不須要配置代理

交叉存儲...

 

 

CDN加速

 

 

真機apache    172.25.88.250

 

 

服務器   172.25.88.100

 

 56 http_access allow all

 59 http_port 80 vhost vport

 60 cache_peer 172.25.254.88 parent 80 0    no-query  沒有鄰居

 63 cache_dir ufs /var/spool/squid 100 16 256  




less /usr/share/doc/squid-3.3.8/squid.conf.documented

 

 

wKioL1hQvyayWiK_AADM9Ze8cag262.png


 

客戶端   172.25.88.10

 

 

檢測

 

在客戶端,使用瀏覽器訪問服務器(172.25.88.100),自動跳轉到真機的apache主頁(172.25.88.250)

 

 

wKiom1hQvyfxmxEVAAAea8OEUTA042.png


 

 

輪詢

 

 

真機  172.25.254.88

 

cat /var/www/html/index.html

 

lalalalala,i am 88.250

zhenji

 

wKioL1hQvyeREtgHAAAmQj6ov_A859.png


 

虛擬機  172.25.88.251

 

cat /var/www/html/index.html

lalalalala,i am 88.251 xuniji

 

wKiom1hQvyjiMGTBAABLsW1XXPw398.png


 

 

服務器  172.25.

 

vim /etc/squid/squid.conf

 

 56 http_access allow all

 

 59 http_port 80 vhost vport

 60 cache_peer 172.25.254.88 parent 80 0no-query originserver round-robin name=web1

 61 cache_peer 172.25.88.251 parent 80 0no-query originserver round-robin name=web2

 62 cache_peer_domain web1 web2www.miximixi.com

 

 65 cache_dir ufs /var/spool/squid 100 16 256

 

客戶端 172.25.88.

 

vim /etc/hosts

172.25.88.100(server ip) www.miximixi.com

 

wKiom1hQvyiSF1lTAAAxlZw6oNI031.png


 

檢驗

 

在客戶端瀏覽器中訪問www.miximixi.com

 

 

wKioL1hQvyjBEfkQAAA3DKfkows950.png



 

wKioL1hQvynSZ8AOAAAqzP9SdGY428.png


 







 

 

SHELL
1.基礎知識

1)運行一個腳本,就是開啓一個新的shell,擁有一個新的環境。

vim /mnt/1.sh
#!/usr/bin/env  tcsh
watch -n 1 date

chond +x /mnt/1.sh
給腳本加執行權限

/mnt/1.sh        
使用絕對路徑執程序,才能看到效果

wKiom1hQvymBseoNAADKhJz9mm8316.png


 

由於絕對路徑執行shell,使用的是腳本文件中第一行#!指定的shell來執行命令(#!/usr/bin/env  tcsh
sh 1.sh 則是使用sh默認的bash執行腳本,因此使用過濾命令,沒有效果~
 

 

2)引用  (就近匹配規則)

弱引號:                   ""     不能引用! \ $ `date`
強引號:                   ' '
 


wKioL1hQvyrT7PepAABmcyAjDq4274.png


wKiom1hQvyrgKwyRAACt5RuOXqU012.png


wKiom1hQvyviRURqAACKATRSZ6s041.png


wKioL1hQvyug-Ev0AABFewC02Aw233.png

 



export  環境級變量,退出當前shell,變量就消失
 

wKiom1hQvy2jsrG4AACbJlJTdZA257.png

 

~.bash_profile /etc/profile :  


   ~.bash_profile中內容存在時,先讀~.bash_profile,不然讀取/etc/bash_profile

 

wKioL1hQvy7yu7PfAAB7BUNivt0098.png

3)$ PATH

echo $PATH

/bin –
用於用戶的私有程序
/usr/local/bin –
本地開發、系統上的其餘人使用的腳本
/usr/local/sbin -
本地開發、由root使用的腳本

執行ls命令的時候,系統會依照PATH的配置去每一個PATH定義的目錄下搜尋檔名爲ls的可運行檔,若是在PATH定義的目錄中含有多個檔名爲ls的可運行檔,那麼先搜尋到的同名命令先被運行!

wKiom1hQvy_xbuNkAADxPeqmuwE856.png


情景1:將ls/bin/ls移動成爲/root/ls
那麼無論在哪一個目錄下輸入任何與ls相關的命令,都沒法執行ls
由於/root這個目錄並不在PATH指定的目錄中,因此,即便在/root目錄下,也不能執行ls

只能過絕對目錄或相對目錄來執行

解決方法:將/root加入PATH變量,就能夠在"任何目錄下"執行ls
 

 

wKioL1hQvzHS1VunAAFMzzTm1qo125.png

 

注意

                   1.本目錄(.)最好不要放到PATH當中。
                  2.使用絕對路徑或相對路徑直接指定某個命令的檔名來運行,會比搜尋PATH來的正確。
                  3.直接運行腳本和使用source命令運行腳本是不一樣的!

4)計算數值

Iecho $[1+2]  echo $[2*2] echo$[2**3] echo $[2%3]
 

wKiom1hQvzHyRygNAABTkFc23Nw250.png

II)echo `expr 1 + 2`
 

wKioL1hQvzLDZk8jAAAkPgrE-kU880.png

III)let a=1+2 echo $a
 

wKioL1hQvzKxROYmAAAoahyBUAQ383.png

IV)((a=3+2)) ((a++))
 

wKiom1hQvzOi9R43AABTut6SLek970.png

V)echo 2^3 |bc

 

wKioL1hQvzTycgmoAACIt8mz3QA577.png

5) $

         $#    
參數個數

         $0     shellname        

         $1     the first argument

         $*     argument-list-part

         $@   argument-list-whole
        
         $$     shell's pid
        
         $?     shell exit stat (0:succeed,other:fail)

 

wKioL1hQvzSD5rw0AACPj8ZMnUI237.png

6)調試

腳本調試模式:
#!/bin/bash -x
# bash -x scripts

 



shel 腳本舉例

1、數據的備份


  1 for x in $(mysql -uroot -p1 -e"show databases;" -NE |grep -E "^\*|schema$" -v)
  2 do
  3        mysqldump -uroot -p1 $x >/mnt/database/$x.dump
  4 done
  5
  6 echo ""
  7 for DBDUMP in /mnt/database/*
  8 do
  9 SIZE=$(stat --printf "%s\n"$DBDUMP)  
打印備份文件的大小
 10 echo "$DBDUMP
 11 $SIZE"
 12 done



爲了防止數據覆蓋,能夠在備份文件名中加`date`


mysql
-E      --vertical      Print the output of a query (rows)vertically.
-N     --skip-column-names       
跳過表頭信息


2、ping 80-90 的主機,ping通的顯示up,不能的顯示down


1
無參數的shell


I)
方法一  for do done ,while do done

  1 #!/bin/bash
  2 for n in {80..90}
  3 do
  4         ping -c1 -w1 172.25.254.$n &>/dev/null                  #
-c count        –w wait ns
  5         flag="$?"
  6         while [ "$flag" -eq"0"  ]
  7         do
  8                 echo 172.25.254.$n is up
  9                 break
 10         done
 11
 12         while [ "$flag" -ne"0"  ]
 13         do
 14                 echo 172.25.254.$n is down
 15                 break
 16         done
 17 done
 

wKioL1hQweTCsj5xAAB2tSc23xY828.png


II&&後,條件爲真執行動做,||後,條件爲假執行動做

  1 #!/bin/bash
  2 for n in {80..90}
  3 do
  4         ping -c1 -w1 172.25.254.$n  &> /dev/null && echo172.25.254.$n is up         || echo 172.25.254.$n is down
  5
  6 done



2shell參數爲指定ip

  I判斷檢測(test)

[ -z $a ]     STRING zore
[ -n $a ]     STRING nozore
[ -e $a ]     file exist
[ file –ef  file1 ]       比較兩文件inode是否相等(是否互爲硬連接)

[ file –ot  file1 ]       比較file是否比file1

[ file –nt  file1 ]       比較file是否比file1

 

wKiom1hQweWRs7_hAACPTJ8aJOI035.png

 


wKioL1hQwebSlB0YAAB9IHNgXVQ622.png


wKiom1hQweexLkLaAADvTxLQ9Yw028.png

 


 

  1#!/bin/bash
  2 [ -n "$*" ] && (
  3 ping -c1 -w1 $* &>/dev/null&& echo $* is up || echo $* is down
  4 )||(
  5 echo please give me a ip addressfirst                                           #錯誤提示
  6 )

 II


3、倒計時 


1.10s

  1 #!/bin/bash
  2 for ((SEC=10;SEC>=0;SEC--))
  3 do
  4        echo -n  "After ${SEC}s is end "
  5         echo -ne "\r"
  6         sleep 1                                 使程序休眠1s,以後再執行
  7 done



2.1m10s 

  1 #!/bin/bash
  2 for ((MIN=5,SEC=10;SEC>=0;SEC--))
  3 do
  4
  5         echo -n  "After ${MIN}m  ${SEC}s is end "
  6        echo -ne "\r"
  7         sleep 1
  8
  9         while [ "$MIN" -gt"0" -a "$SEC" -le "0" ]; 秒數減完,分鐘數大於1
 10         do
 11                 ((MIN--))
 12                 SEC=60
 13         done
 14
 15 done



3.1h1m5s

  1#!/bin/bash
  2 for ((HOUR=1,MIN=1,SEC=5;SEC>=0;SEC--))
  3 do
  4
  5         echo -n  "After  ${HOUR}h ${MIN}m  ${SEC}s is end"
  6         echo -ne "\r"
  7         sleep 1
  8
  9         while [ "$MIN" -gt"0" -a "$SEC" -le "0" ];
 10         do
 11                 ((MIN--))
 12                 SEC=60
 13         done
 14
 15         while [ "$MIN" -le"0"  -a  "$SEC" -le "0" -a "$HOUR"-gt "0" ];
 16         do
 17                 ((HOUR--))
 18                 MIN=59
 19                 SEC=60
 20         done
 21
 22 done

注意:


Iecho 默認會在結尾輸出一個換行符
echo -n do not output the trailing newline          不輸出結尾的換行符

II)echo 默認開啓   -E默認不識別,轉移字符(反斜槓)
echo -E     disable interpretation ofbackslash escapes    (default)
echo -e     enable interpretation ofbackslash escapes               啓用反斜槓轉義的解釋

III) echo -e "\其餘參數"


\r 光標移至行首,但不換行(常做覆蓋輸出
\f 換行但光標仍舊停留在原來的位置
\n 換行且光標移至行首
\a 滴滴~
\b 刪除前一個字符        backspace
 



wKiom1hQwefSMuzEAACbGftmU_w069.png

IV)爲何要用,兩個\r???


5、判斷一個數是否是在010


   1#!/bin/bash
  2 read -p "Please input a num: " NUM            外部傳參
   3 [ "$NUM" -ge "0" -a"$NUM" -le "10" ] && echo $NUM is in  the range ||
   4 (echo $NUM is out of the range)


6、檢測文件類型 []

  1 #!/bin/bash
  2 if [ -e "$1" ]
  3 then
  4         [ -b "$1" ] && echoblockfile
  5         [ -c "$1" ] && echoc block
  6         [ -d "$1" ] && echodirectory
  7         [ -f"$1" -a ! -L "$1" ] && echo regular-file
  8         [ -L "$1" ] && echolink-file
  9 else echo please input filename
 10 fi


7、 useradd password username

request    1.no file
                  2.filelines diff
                  3.userexist

 

編寫shell時,注意首先編寫的是腳本主體,錯誤檢測在最後寫

 

  1#!/bin/bash
  2 if [ -n "$1" -a -n "$2" ]                          #判斷參數是否爲空
  3 then
  4         if  [ -e $1 -a -e$2 ]        #判斷文件是否存在
  5         then
  6
  7         USERLINE=`cat $1  | wc -l`
  8         PASSLINE=`cat $2  | wc -l`
  9
 10                 [ $USERLINE -eq  $PASSLINE ] &&                 

                                #判斷兩個文件行數是否相等
 11                
 12
 13                 for i in `seq   $USERLINE`
 14                 do
 15
 16  #提取第i行的用戶名#    USERNAME=`sed -n ${i}p$1`                    

          
 17 #提取第i行的密碼#        PASSWORD=`sed -n ${i}p$2`                    

            
 18#檢測用戶是否存在,不用id,由於id看不到隱藏用戶

                                            CKUSER=`getent passwd$USERNAME`         

                   
 19#若是用戶不存在,才建立# [ -z "$CKUSER"] &&                                           
 20                         (
 21                         useradd $USERNAME
 22                         echo $PASSWORD |passwd --stdin $USERNAME
 23                         )||echo "$USERNAME isexist"
 24                 done
 25                 )||echo "$1 and $2 have different lines"
 26          elif [ ! -e $1 ]
 27          then
 28                 echo "ERORR: $1 is notexit"
 29          else
 30                 echo "ERORR: $2 is notexit"
 31          fi
 32 else
 33 echo "ERROR Pleaseinput userfile and password file after command!!!"
 34 fi



8、case

1 #!/bin/bash
  2 case $1 in
  3         apple) echo banana
  4         ;;
  5         banana) echo apple
  6         ;;
  7         *)
  8         echo error!
  9         ;;
 10 esac


9、expect

yum install expect -y

which expect
/usr/bin/expect

1)簡單小程序

1.普通版


  vim ask.sh

  1 #!/bin/bash
  2 read -p "what is your name:" NAME
  3 read -p "how old are you: "AGE
  4 read -p "what is your class:" CLASS
  5 read -p "are you happy : "FEEL
  6 echo $NAME is $AGE\'s old $NAME is$CLASS student and $FEEL



   vim anser.exp

  1 #!/usr/bin/expect
  2 spawn /mnt/shell/ask.sh監控文件的執行
  3         expect "name"
  4         send "cd\r"
  5         expect "old"
  6         send "80\r"
  7         expect "class"
  8         send "biansha\r"
  9         expect "happy"
 10         send "unhappy\r"
 11 expect eof
 12
 

wKioL1hQweijZzyKAAEd4GV9Zk4002.png



2.進階版(在命令行中輸入回答)

  1 #!/usr/bin/expect
  2 set name [ lindex $argv 0 ]
  3 set age [ lindex $argv 1 ]
  4 set class [ lindex $argv 2 ]
  5 set feel [ lindex $argv 3 ]
  6
  7
  8
  9 spawn /mnt/shell/ask.sh
 10         expect "name"
 11         send "$name\r"
 12         expect "old"
 13         send "$age\r"
 14         expect "class"
 15         send "$class\r"
 16        expect "happy"
 17         send "$feel\r"
 18 expect eof

\r return 回車

wKioL1hQwenj3qzzAABiqczNAkw643.png


2ssh

  1 #!/usr/bin/expect
  2 set IP [ lindex $argv 0 ]
  3 set PASS [ lindex $argv 1 ]
  4 spawn ssh root@$IP
  5 expect  {
  6         "yes/no"
  7         { send "yes\r";exp_continue}
  8         "password"
  9         { send "$PASS\r"}
 10         }
 11 interact              #停留在ssh的環境


)檢測1-10,是否開機,若是開機,顯示主機名

做業

檢測全班有多少臺主機是開機的,在開機的主機上批量創建用戶,更改用戶的密碼

只實現了創建一個用戶..

 

wKioL1hSYbSTB6fLAAEomGuSVQM013.png

相關文章
相關標籤/搜索