筆記十一

#####apache的虛擬主機

在desktop端:

cd /etc/httpd/conf.d/

vim news.conf 修改內容爲:

  1 <Virtualhost *:80>

  2         Servername news.westos.com

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

  4         Customlog "logs/news.log" combined

  5 </Virtualhost>

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

  7         Require all granted

  8 </Directory>

  9 <Virtualhost *:443>

 10         Servername news.westos.com

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

 12         Customlog "logs/news-443.log" combined

 13         SSLEngine on

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

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

 16 </Virtualhost>

systemctl restart httpd


附加:(使得沒有開啓虛擬主機的網址 如 music.westos.com 在用 https://music.westos.com 訪問時使用默認的 https 目錄)

vim default.conf 修改內容爲:

  1 <Virtualhost _default_:80>

  2        Documentroot /var/www/html

  3        Customlog "logs/default.log" combined

  4 </Virtualhost>

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

  6        Require all granted

  7 </Directory>

  8 <Virtualhost *:443>

  9        SSLEngine on

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

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

 12 </Virtualhost>


測試(在其他主機或者虛擬機):

在瀏覽器中輸入 https://news.westos.com 即可看到效果


#####apache的網頁重寫

(把所有80端口的請求全部重定向由https來處理,即 http --> https)

在desktop端:

cd /etc/httpd/conf.d/

vim news.conf 修改內容爲:

  1 <Virtualhost *:80>

  2         Servername news.westos.com

  3         RewriteEngine on

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

  5 </Virtualhost>

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

  7         Require all granted

  8 </Directory>

  9 <Virtualhost *:443>

 10         Servername news.westos.com

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

 12         Customlog "logs/news-443.log" combined

 13         SSLEngine on

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

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

 16 </Virtualhost>

systemctl restart httpd


測試(在其他主機或者虛擬機):

在瀏覽器中輸入 http://news.westos.com 即可看到瀏覽器自動的將 http://news.westos.com 轉化爲  https://news.westos.com  


#####php

cd /var/www/html/

yum install php -y

vim index.php 編輯內容爲:

  1 <?php

  2 phpinfo ();

  3 ?>

vim /etc/httpd/conf/httpd.conf 修改內容爲:

177     DirectoryIndex index.php file index.html

systemctl restart httpd


測試:

在其他主機瀏覽器輸入 www.westos.com 即可看到 php 測試頁


######cgi

定義:

通用網關接口(CGI)是網站上放置動態內容的最簡單的方法。CGI腳本可用於許多目的,但是謹慎控制使用哪個CGI腳本以及允許誰添加和運行這些腳本十分重要。編寫質量差的CGI腳本可能爲外部***者提供了破壞網站及其內容安全性的途徑。因此,在Web服務器級別和SELinux策略級別,都存在用於限制CGI腳本使用的設置。


實驗執行操作:

cd /var/www/html/

mkdir cgi

vim index.cgi 編輯內容爲:

  1 #!/usr/bin/perl

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

  3 print `date`;  @@@!!!@@ 注意:此處 date 前後的符號爲 “ ` ”


chmod +x index.cgi

vim /etc/httpd/conf.d/default.conf 修改內容爲:

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

  8         Options +ExecCGI

  9         AddHandler cgi-script .cgi

 10 </Directory>


cd /var/www/

ls -Zd cgi-bin/

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

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

systemctl restart httpd


測試(在其他主機):

在瀏覽器裏輸入 www.westos.com/cgi 進入後 點擊 --> index.cgi



#####論壇的搭建######

yum install mariadb-server -y

systemctl start mariadb

mysql_secure_installation --> 創建mysql中root用戶的密碼

vim /etc/my.cnf  修改內容爲:

 10 skip-networking=1 ##防止mysql裸露在外網中


cd /var/www/html/

lftp 172.25.254.250

lftp 172.25.254.250:~> cd pub/         

lftp 172.25.254.250:/pub> get Discuz_X3.2_SC_UTF8.zip

12486177 bytes transferred                                 

lftp 172.25.254.250:/pub> quit


unzip Discuz_X3.2_SC_UTF8.zip

yum install php-mysql.x86_64 -y

chmod 777 upload/data/ upload/config/ -R 或者 chmod 777 upload/ -R

setenforce 0 ##此步一定要做,因爲selinux會阻止Discuz

systemctl restart httpd


測試(在其他主機):

在瀏覽器裏輸入 172.25.254.107/upload 或者 www.westos.com/upload 

首次進入修改root密碼爲 redhat ,再設置管理員用戶密碼即可。


######squid正向解析#####

在真機中(172.25.254.7):

執行 virt-manager  --> 給desktop主機再添加一塊網卡(即,使得desktop爲雙網卡)

在desktop端:

cd /etc/sysconfig/network-scripts/

cp ifcfg-eth0 ifcfg-eth0

vim ifcfg-eth0 修改內容爲:

  1 DEVICE=eth0

  2 BOOTPROTO=none

  3 IPADDR0=172.25.7.10

vim ifcfg-eth1 修改內容爲:

  1 DEVICE=eth1

  2 BOOTPROTO=none

  3 IPADDR0=172.25.254.107

systemctl restart network

yum install squid

vim /etc/squid/squid.conf 修改內容爲:

 56 http_access allow all ##允許所有人

 62 cache_dir ufs /var/spool/squid 100 16 256 ##開啓squid塊,在squid下建立 16 個A級目錄(緩衝區),每一個A級目錄下面又有256個小模塊(緩衝區)

systemctl restart squid


測試(server主機):

cd /etc/sysconfig/network-scripts/

vim ifcfg-eth0 修改內容爲:

IPADDR0=172.25.7.11

systemctl restart network

在server中打開瀏覽器:172.25.254.250會出現報錯信息

在瀏覽器界面進入 設置 --> Network --> Settings --> Manual proxy .. --> HTTP --> 172.25.7.10  3128 --> OK

再次在server中打開瀏覽器:172.25.254.250 會出現測試頁面



########squid的反向解析 -- 接着上步 正向解析

在desktop端(172.25.7.10/172.25.254.107):

yum remove httpd squid -y

rm -fr /etc/httpd/conf.d/

rm -fr /etc/httpd/conf/

rm -fr /etc/squid/

netstat -antlpe | grep httpd

netstat -antlpe | grep squid



yum install squid

vim /etc/squid/squid.conf  修改內容爲:

56 http_access allow all

59 http_port 80 vhost vport

60 cache_peer 172.25.254.7 parent 80 0 no-query

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

systemctl restart squid


測試(server端 172.25.7.11):

在瀏覽器中輸入 172.25.7.10 即可看到 172.25.254.7 的默認發佈頁面


#####squid 的輪循

在desktop端(172.25.7.10/172.25.254.107):

vim /etc/squid/squid.conf  修改內容爲:

 56 http_access allow all

 59 http_port 80 vhost vport

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

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

 62 cache_peer_domain web1 web2 www.lzt.com

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

systemctl restart squid


註釋:

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

緩存的是172.25.254.7,虛擬端口爲--80,故障通知端口爲無 -- 0,no-query 表示其沒有鄰居; originserver -- 參數指明是源服務器; round-robin -- 參數指明輪循方式請求分發到其中一臺父節點; name--表示這一行爲web1


測試(server端 172.25.7.11):

vim /etc/hosts 修改內容爲:

6 172.25.254.107 www.lzt.com

7 172.25.7.10  www.lzt.com

在瀏覽器中輸入 www.westos.com 即可看到 172.25.254.7 的默認發佈頁面 和 172.25.254.8 的默認發佈頁來回替換


##########腳本#########

Bash腳本類似批處理,簡單來講就是把許多的指令集合在一起,並提供循環、條件、判斷等重要功能,語法簡單實用,用以編寫程序,大大簡化管理員的操作,並可以完成圖形工具所無法實現的功能。


創建新shell腳本

1. 創建包含bash命令的文本文件。文件的第一行應爲:

#!/bin/bash

2. 使文件可執行(使用chmod +x scripts)

3. 將文件放置在用戶的$PATH的目錄中

~/bin – 用於用戶的私有程序

/usr/local/bin – 本地開發、系統上的其他人使用的腳本

/usr/local/sbin - 本地開發、由root使用的腳本

直接運行腳本和使用source命令運行腳本是不同的!

腳本調試模式:

#!/bin/bash -x

# bash -x scripts


引用和轉義

引用和轉義在shell解析字符串時用於去除字符串中特殊字符或保留詞語的特殊含義。這會導致按字面處理字符串,而不是展開變量或將其部分內容視作具有特殊含義。

引用有三種類型:

1)弱引用

將字符串放置在雙引號中,保留字符串中所有字符的文字值,$、`、\和!字符除外。換言之,變量擴展和命令擴展在雙引號內仍起作用。

echo “can I have a $FRUIT”

echo “The current time is $(date +%r).”


2)強引用

將字符串放置在單引號中,保留字符串中所有字符的文字值,同時禁用所有擴展:

echo “Make $$$ Fast”

rm 'untitled folder'


3)轉義

非引用的\是轉義字符。它保留了下一個字符的文字值。(例如,\$PATH是確切的字符串$PATH,而不是PATH變量的內容。)

echo Make \$\$\$ Fast\!

ls untitled\ folder


例如:

[root@localhost ~]# echo # not a comment #


[root@localhost ~]# echo \# not a comment #

# not a comment


[root@localhost ~]# echo \# not a comment \#

# not a comment #


[root@localhost ~]# echo '# not a comment #'

# not a comment #


[root@localhost ~]# echo '$HOME'

$HOME


[root@localhost ~]# echo "$HOME"

/root


[root@localhost ~]# echo "\$HOME"

$HOME


[root@localhost ~]# echo '`pwd`'

`pwd`


[root@localhost ~]# echo "\`pwd\`"

`pwd`


[root@localhost ~]# echo "`pwd`"

/root


[root@localhost ~]# echo '"Hello,world"'

"Hello,world"


[root@localhost ~]# echo "\"Hello, world\""

"Hello, world"


[root@localhost ~]# echo ""Hello, world""

Hello, world


Shell變量:

shell變量用於爲稍後在腳本中使用的名稱指定值,並且僅限於shell命令行或從中聲明變量的腳本。

[root@maillinux ~]# a=1 ##此處定義的 a 的值不能在腳本里被調用

[root@maillinux ~]# echo $a

1

[root@maillinux ~]# echo $ab


[root@maillinux ~]# echo ${a}b

1b

[root@maillinux ~]# export a=2 ##此處定義的 a 的值可以在腳本里被調用,僅限此次登錄,若退出,則會消除

vim /etc/profile 修改內容爲:

 77 export a=5 ##此處爲用戶環境變量,對當前用戶生效

source /etc/profile


vim .bash_profile 修改內容爲:

 13 export a=4 ##此爲系統環境變量對所有用戶生效 

source .bash_profile


當前用戶優先讀取 /etc/profile 中的值(系統先讀 .bash_profile 文件中 a 的值,後讀 /etc/profile 中 a 的值,可以認爲第一次 a 的值被覆蓋)


#####算術運算符

算術運算符指的是可以在程序中實現加、減、乘、除等數學運算的運算符。

<variable>++ 增量後

<variable>-- 減量後

-  減法

+  加法

** 冪運算

*  乘法

/  除法

%  餘數

+= 加等

-= 減等


###Shell計算命令:


用$[]表示數學運算:

# echo $[1+2]

# a=1; echo $[$[$a+1]*2]

用expr表示數學運算:

# echo `expr 1 + 2`

用let指示數學運算:

# let A=1+2

# echo $A

用(())表示數學運算: ##bash內建功能,效率高。

#!/bin/bash

for ((i=1;i<10;i++))

do

((j+=i))

done

echo $j


######循環

(1)for循環: 用於值列表中的相同命令的重複

[root@server0 ~]# for HOST in host{1..3};do echo $HOST;done

host1

host2

host3

[root@server0 ~]# for NUM in $(seq 2 2 8);do echo $NUM;done

2

4

6

8

循環與計算結合:

#!/bin/bash

for ((i=1;i<=100;i++))

do

((j+=i)) 等同於(#j=`expr $j + $i`)或(#let j+=i)或(#j=$[j+=i])

done

echo $j

也可以寫成一行:

# for((i=0; i<=100; i++));do j=`expr $j + $i` ;done;echo $j


#######數據庫備份示例:

#!/bin/bash

for DB in $(mysql -e "show databases;" -E -N | grep -v '^*' | grep -v 'schema$')

do

echo "Backing up $DB"

mysqldump $DB > /dbbackup/$DB.dump

done

echo ""

for DBDUMP in /dbbackup/*

do

SIZE=$(stat --printf "%s\n" $DBDUMP)

echo "$DBDUMP

$SIZE"

done


##########Bash位置參數

有兩種簡單的方法可以將用戶輸入讀入bash中的變量。第一個方法是使用read提示用戶輸入(使用-p選項)並將其直接存儲到一個或多個變量:

交互式輸入

# read -p 'Enter your first and last name: ' FIRST LAST

另一個方法是使用位置參數來讀取傳遞給腳本的命令行參數或選項輸入。

各種特殊變量存儲傳遞的選項編號Bash解析的個別參數或整個原始命令行。

指定的位置參數總數:$#

位置參數自身:$0、$1、$2、$3....

所有位置參數: $@、$*



退出狀態

Linux命令完成時,將返回退出狀態。成功完成程序時,將返回0的推出狀態。這被bash當作邏輯True值。非零退出狀態通常表示發生了錯誤,並且被bash當作邏輯False值。

例如:grep的退出狀態的含義:

0 – 在指定的文件中找到了模式

1 – 在指定的文件中未找到模式

>1 – 一些其他錯誤(無法打開文件、錯誤的搜索表達式等)

推出狀態的值被存儲在"?"中,可以使用以下命令查看:

# echo $?


##########test條件判斷

test命令可用於評估bash腳本中的表達式。它評估其參數所指定的表達式,如果表達式爲true,返回零退出狀態,如果表達式爲false,則返回非零退出狀態。test具有替代語法,使用方括號"[]"將表達式括起來,這樣更易於閱讀。

語法:test EXPRESSION 或 [EXPRESSION]

非零或零長度字符串運算符:test -{n|z} STRING

[root@server0 ~]# [ -n westos ]; echo $?

0

[root@server0 ~]# [ -z westos ]; echo $?

1


#######字符串比較運算符:=、!=

[root@server0 ~]# [ abc = abc ]; echo $?

0

[root@server0 ~]# [ abc = ABC ]; echo $?

1

[root@server0 ~]# [ abc != ABC ]; echo $?

0

數字比較運算符:-eq、-ne、-lt、-le、-gt、-ge

[root@server0 ~]# [ 1 -eq 1 ]; echo $?

0

[root@server0 ~]# [ 1 -ne 1 ]; echo $?

1

[root@server0 ~]# [ 1 -gt 2 ]; echo $?

1


########文件狀態運算符: test -{b|c|e|f|d|r|w|x|s|L} FILE/DIRECTORY

[root@server0 ~]# [ -b /dev/sda ]; echo $?

1

[root@server0 ~]# [ -c /dev/zero ]; echo $?

0

[root@server0 ~]# [ -e /etc/passwd ]; echo $?

0

[root@server0 ~]# [ -f /etc/passwd ]; echo $?

0

[root@server0 ~]# [ -d /etc/passwd ]; echo $?

1

[root@server0 ~]# [ -L /etc/passwd ]; echo $?

1


########二進制文件運算符: -ef、-nt、-ot

[root@server0 bin]# [ /bin/mount -ef /usr/bin/mount ]; echo $?

0

[root@server0 bin]# [ /bin/mount -nt /usr/bin/mount ]; echo $?

1

[root@server0 bin]# [ /bin/mount -ot /usr/bin/mount ]; echo $?

1


##########邏輯運算符: -o、-a、!、&&、||

[root@server0 bin]# [ 2 -gt 1 -a 1 -gt 2 ]; echo $?

1

[root@server0 bin]# [ 2 -gt 1 -o 1 -gt 2 ]; echo $?

0

[root@server0 bin]# [ ! 2 -gt 1 ]; echo $?

1




########簡單腳本例子

1. 10 秒倒計時

  1 #!/bin/bash

  2 for ((sec=10;sec>0;sec--))

  3 do

  4 echo -ne "After ${sec}s is end"

  5 echo -ne "\r    \r"

  6 sleep 1

  7 done


2. 1 分 10 秒倒計時

 版本一(教學版):

  1 #!/bin/bash

  2 min=1

  3 for ((sec=10;sec>=0;sc--))

  4 do

  5 echo -ne "After ${min}m ${sec}s "

  6 sleep 1

  7 echo -ne "\r    \r"

  8         while ["$sec" -le "0" -a "$min" -gt "0"]

  9         do

 10         echo -ne "After ${min}m ${sec}s is end"

 11         echo -ne "\r    \r"

 12         ((min--))

 13         sec=60

 14         done

 15 done


 版本二:

  1 #!/bin/bash

  2 for ((sec=70;sec>0;sec--))

  3 do

  4 echo -ne "Come on, $(($sec/60)) minute $(($sec%60)) s later , New Year is c    oming...  "

  5 echo -ne "\r    \r"

  6 sleep 1

  7 done


3. ping 172.25.254.(1-10)

  

  1 #!/bin/bash

  2 for num in {1..10}

  3 do

  4 ping -c1 -w1 172.25.254.$num &> /dev/null && echo 172.25.254.$num is up ||     echo 172.25.254.$num is down

  5 done


4. ping 172.25.254.(1-10)使用邏輯運算

  1 #!/bin/bash

  2 ping -c1 -w1 $* &> /dev/null && echo $* is up || echo $* is down


5. ping 172.25.254.x -- 報錯版本

  1 #!/bin/bash

  2 [ -z "$*" ] && echo "error:please inpute ip adress" || (echo "now is ping..    "

  3 ping -c1 -w1 $* &> /dev/null && echo $* is up || echo $* is down)


6. 備份數據庫

 yum install mariadb-server -y

 systemctl start mariadb  然後設置root密碼爲redhat


  1 #!/bin/bash

  2 for bf in $(mysql -uroot -predhat -e "show databases;" -NE | grep -E "^\*|s    chema$" -v)

  3 do

  4 echo "Backing up $bf"

  5 mysqldump -uroot -predhat $bf > /mnt/$bf-`date`.dump

  6 done


7.建立用戶

  1 #!/bin/bash

  2 read -p "please input new username:" username

  3 useradd $username &> /dev/null && echo useradd $username over || echo usera    dd $username fail

  4 read -p "please input newuser's password:" password

  5 echo "$password" | passwd --stdin $username


8.數值範圍的判斷

  1 #!/bin/bash

  2 read -p "please input a number:" num

  3 [ "$num" -ge 0 -a "$num" -le 10 ] && echo Yes, this num exits 0-10 || echo  No, this num not exits 0-10


  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章