Linux課程第二十四天學習筆記

==運算符==
"i=1,j+=i"的意思是j=j(j原來沒有值,等於0)+i=1
"i=2,j+=i"的意思是j=j(j經過上一行的運算,等於1)+i=3

"-="同"+="一個意思

"**"表示冪運算
2**3=8

[root@localhost mnt]# echo $[2+3]
5
[root@localhost mnt]# echo $[2*3]
6
[root@localhost mnt]# echo $[2**3]
8
[root@localhost mnt]# echo $[2/3]
0
[root@localhost mnt]# echo $[2%3]
2
[root@localhost mnt]# echo `expr 1+2`
1+2
[root@localhost mnt]# echo `expr 1 + 2`    ##"expr"表示數學運算
3
[root@localhost mnt]# let a=1+2        ##"let"指示數學運算
[root@localhost mnt]# echo $a
3
[root@localhost mnt]# a=2+3
[root@localhost mnt]# echo $a
2+3
[root@localhost mnt]# ((a=2+3))        ##"(())"表示數學運算。bash內建功能,效率高
[root@localhost mnt]# echo $a
5

=="for do done"==
"for do done"相當於一個圓,裏面的變量出不去

[root@localhost mnt]# for NAME in tom jack westos;do echo This is $NAME;done
This is tom
This is jack
This is westos
[root@localhost mnt]# echo $NAME
westos
[root@localhost mnt]# for ((i=1;i<=10;i++));do echo $i;done
1
2
3
4
5
6
7
8
9
10
[root@localhost mnt]# for ((i=1;i<10;i++));do ((j+=i));done
[root@localhost mnt]# echo $j
45

==[ ]和$?==
[root@localhost ~]# [ "0" = "0" ]
[root@localhost ~]# echo $?
0
##"0"表示正確
[root@localhost ~]# [ "0" = "1" ]
[root@localhost ~]# echo $?
1
##"1"表示錯誤

=="while[ ] do done"==
[root@localhost mnt]# while [ "0" = "0" ]; do echo yes; break; done
yes
##"break"打斷,只輸出一次yes。沒有"break"會不停的輸出yes

--"break"--
break命令表示跳出當前循環
在嵌套循環中,break命令後面可以跟一個整數,表示跳出第幾層循環

==倒計時腳本==
[root@localhost mnt]# vim 10s.sh        ##10秒倒計時
-----------------------------------------------
#!/bin/bash
for ((SEC=10;SEC>0;SEC--))
do
echo -ne "After ${SEC}s is end"
echo -ne "\r    \r"
sleep 1
done
:wq
-----------------------------------------------
[root@localhost mnt]# chmod +x 10s.sh

[root@localhost mnt]# vim 1m10s.sh        ##1分鐘10秒倒計時
-----------------------------------------------
#!/bin/bash
MIN=1
for ((SEC=10;SEC>=0;SEC--))
do
echo -ne "After ${MIN}m${SEC}s is end"
sleep 1
echo -ne "\r     \r"
        while [ "$SEC" -eq "0" -a "$MIN" -gt "0" ]
        do
        ((MIN--))
        SEC=60
        done
done
:wq
-----------------------------------------------
[root@localhost mnt]# chmod +x 1m10s.sh


==man echo==
[root@localhost mnt]# man echo
-----------------------------------------------
       -n     do not output the trailing newline

       -e     enable interpretation of backslash escapes

       \r     carriage return
q
-----------------------------------------------


=="&&"和"||"==
&&    ##成立
||    ##不成立

==check-ip腳本==
[root@localhost mnt]# vim check-ip.sh         ##使用"&&"
-----------------------------------------------
#!/bin/bash
for NUM in {1..10}
do
ping -c1 -w1 172.25.50.$NUM &> /dev/null && echo 172.25.50.$NUM is up || echo 172.25.50.$NUM is down
done
:wq
-----------------------------------------------
##"c1"表示ping一次;"w1"表示等待1秒
[root@localhost mnt]# chmod +x check-ip.sh


==使用腳本備份數據庫==
--安裝mariadb--
[root@localhost mnt]# yum install mariadb-server -y
......
[root@localhost mnt]# vim /etc/my.cnf
--------------------------------------------------
 10 skip-networking=1
:wq
--------------------------------------------------
[root@localhost mnt]# systemctl start mariadb
[root@localhost mnt]# mysql_secure_installation
>Set root password: westos
[root@localhost mnt]# mysql -uroot -pwestos -e "CREATE DATABASE test;"
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

--備份"mysql"庫和"test"庫--
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;" -N
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;" -E
*************************** 1. row ***************************
Database: information_schema
*************************** 2. row ***************************
Database: mysql
*************************** 3. row ***************************
Database: performance_schema
*************************** 4. row ***************************
Database: test
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;" -NE
*************************** 1. row ***************************
information_schema
*************************** 2. row ***************************
mysql
*************************** 3. row ***************************
performance_schema
*************************** 4. row ***************************
test
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;" -NE |grep -Ev "^*|schema$"
##什麼都匹配不到,"*"前面必須加"\",否則無法識別
[root@localhost mnt]# mysql -uroot -pwestos -e "show databases;" -NE |grep -Ev "^\*|schema$"
mysql
test
[root@localhost mnt]# vim mysqldump.sh
--------------------------------------------------
#!/bin/bash
for x in $(mysql -uroot -pwestos -e "show databases;" -NE | grep -Ev "^\*|schema$")
do
        mysqldump -uroot -pwestos $x > /mnt/$x-`date`.dump
done
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x mysqldump.sh
[root@localhost mnt]# ./mysqldump.sh
./mysqldump.sh: line 4: /mnt/$x-`date`.dump: ambiguous redirect
./mysqldump.sh: line 4: /mnt/$x-`date`.dump: ambiguous redirect
##什麼情況。。。
[root@localhost mnt]# sh mysqldump.sh
[root@localhost mnt]# ls *.dump
mysql-Thu Dec 15 22:18:06 EST 2016.dump  test-Thu Dec 15 22:18:06 EST 2016.dump
[root@localhost mnt]# sh mysqldump.sh
[root@localhost mnt]# ls *.dump
mysql-Thu Dec 15 22:18:06 EST 2016.dump  test-Thu Dec 15 22:18:06 EST 2016.dump
mysql-Thu Dec 15 22:18:43 EST 2016.dump  test-Thu Dec 15 22:18:43 EST 2016.dump

==$*,$@,$#==
$*和$#一樣,表示顯示全部
$@表示統計個數

[root@localhost mnt]# vim test.sh
--------------------------------------------------
#!/bin/bash
echo $1
echo $2
echo $3
echo $*
echo $@
echo $#
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x test.sh
[root@localhost mnt]# ./test.sh r h t
r
h
t
r h t
r h t
3


==man test==
[root@localhost mnt]# man test
--------------------------------------------------
       EXPRESSION1 -a EXPRESSION2
              both EXPRESSION1 and EXPRESSION2 are true

       EXPRESSION1 -o EXPRESSION2
              either EXPRESSION1 or EXPRESSION2 is true

       -n STRING
              the length of STRING is nonzero            ##有值

       STRING equivalent to -n STRING

       -z STRING
              the length of STRING is zero            ##沒有值

       STRING1 = STRING2
              the strings are equal                ##等同於"-eq"

       STRING1 != STRING2
              the strings are not equal                ##等同於"-ne","!"表示反向選擇

       INTEGER1 -eq INTEGER2
              INTEGER1 is equal to INTEGER2            ##等同於"="

       INTEGER1 -ge INTEGER2
              INTEGER1 is greater than or equal to INTEGER2

       INTEGER1 -gt INTEGER2
              INTEGER1 is greater than INTEGER2

       INTEGER1 -le INTEGER2
              INTEGER1 is less than or equal to INTEGER2

       INTEGER1 -lt INTEGER2
              INTEGER1 is less than INTEGER2

       INTEGER1 -ne INTEGER2
              INTEGER1 is not equal to INTEGER2            ##等同於"!="

       FILE1 -ef FILE2
              FILE1 and FILE2 have the same device and inode numbers    ##是否互爲硬鏈接

       FILE1 -nt FILE2
              FILE1 is newer (modification date) than FILE2    ##file1比file2的時間戳新

       FILE1 -ot FILE2
              FILE1 is older than FILE2                ##file1比file2的時間戳老

       -b FILE
              FILE exists and is block special            ##存在並且是塊設備

       -c FILE
              FILE exists and is character special        ##存在並且是字符設備

       -d FILE
              FILE exists and is a directory            ##存在並且是目錄

       -e FILE
              FILE exists                    ##存在

       -f FILE
              FILE exists and is a regular file            ##存在並且是普通文件

       -h FILE
              FILE exists and is a symbolic link (same as -L)    ##存在並且是軟鏈接

       -L FILE
              FILE exists and is a symbolic link (same as -h)    ##存在並且是軟鏈接
--------------------------------------------------

=="-z"和"-n"==
[root@localhost mnt]# a=1
[root@localhost mnt]# [ -z "$a" ] && echo yes || echo no
no
[root@localhost mnt]# [ -n "$a" ] && echo yes || echo no
yes
[root@localhost mnt]# [ -z "$a" ];echo $?
1
[root@localhost mnt]# [ -n "$a" ];echo $?
0

=="-ef","-nt","-ot"==
[root@localhost mnt]# touch file
[root@localhost mnt]# ln file file1
[root@localhost mnt]# ll |grep file
-rw-r--r--. 2 root root   0 Dec 15 23:35 file
-rw-r--r--. 2 root root   0 Dec 15 23:35 file1
[root@localhost mnt]# [ /mnt/file -ef /mnt/file1 ] && echo yes || echo no
yes
[root@localhost mnt]# rm -fr file1
[root@localhost mnt]# touch file1
[root@localhost mnt]# ll |grep file
-rw-r--r--. 1 root root   0 Dec 15 23:35 file
-rw-r--r--. 1 root root   0 Dec 15 23:37 file1
[root@localhost mnt]# [ /mnt/file -ef /mnt/file1 ] && echo yes || echo no
no
[root@localhost mnt]# [ /mnt/file -nt /mnt/file1 ] && echo yes || echo no
no
[root@localhost mnt]# [ /mnt/file -ot /mnt/file1 ] && echo yes || echo no
yes

=="read -p"==
[root@localhost mnt]# vim check-ip-read.sh
--------------------------------------------------
#!/bin/bash
read -p "Please input you want check ip address: " IP
[ -n "$IP" ] && (
ping -c1 -w1 $IP &> /dev/null && echo $IP is up || echo $IP is down
)||(
echo please give me a ip address first
)
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x check-ip-read.sh
[root@localhost mnt]# ./check-ip.sh
Please input you want check ip address: 172.25.50.100
172.25.50.100 is up
[root@localhost mnt]# ./check-ip.sh
Please input you want check ip address: 172.25.50.101
172.25.50.101 is down
[root@localhost mnt]# ./check-ip.sh
Please input you want check ip address:
please give me a ip address first

[root@localhost mnt]# vim create_user-read.sh
--------------------------------------------------
#!/bin/bash
read -p "Please input you want create username: " USER
useradd $USER &> /dev/null && echo $USER create success! || $USER create failed!
read -p "Please input you want password for $USER: " PASSWD
echo $PASSWD | passwd $USER --stdin &> /dev/null && echo $USER\'s password create success! || $USER\'s password create failed!
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x create_user-read.sh
[root@localhost mnt]# ./create_user-read.sh
Please input you want create username: lee
lee create success!
Please input you want password for lee: 123
lee's password create success!

==check-num腳本==
[root@localhost mnt]# vim check-num.sh        ##使用&&
--------------------------------------------------
#!/bin/bash
read -p "Please input a number: " N
[ "$N" -ge 0 -a "$N" -le 10 ] && echo $N 在10以內 || echo $N 在10以外
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x check-num.sh
[root@localhost mnt]# ./check-num.sh
Please input a number: 0
0 在10以內
[root@localhost mnt]# ./check-num.sh
Please input a number: -1
-1 在10以外
[root@localhost mnt]# ./check-num.sh
Please input a number: 10
10 在10以內
[root@localhost mnt]# ./check-num.sh
Please input a number: 11
11 在10以外

[root@localhost mnt]# vim check-num-if.sh    ##使用if語句
--------------------------------------------------
#!/bin/bash
read -p "Please input a number: " N
if
[ "$N" -ge 0 -a "$N" -le 10 ]
then
echo $N 在10以內
else
echo $N 在10以外
fi
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x check-num-if.sh

==check-file腳本==
[root@localhost mnt]# vim check-file.sh
--------------------------------------------------
#!/bin/bash
if
[ -e "$1" ]
then
[ -f "$1" -a ! -L "$1" ] && echo $1 is a regular file
[ -L "$1" ] && echo $1 is a symbolic link
[ -d "$1" ] && echo $1 is a directory
[ -b "$1" ] && echo $1 is block special
[ -c "$1" ] && echo $1 is character special
else
[ -n "$1" ] && echo $1 not exists || echo Please give me a file
fi
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x check-file.sh
[root@localhost mnt]# ./check-file.sh /etc/passwd
/etc/passwd is a regular file
[root@localhost mnt]# ./check-file.sh /etc/system-release
/etc/system-release is a symbolic link
[root@localhost mnt]# ./check-file.sh /etc
/etc is a directory
[root@localhost mnt]# ./check-file.sh /dev/vda1
/dev/vda1 is block special
[root@localhost mnt]# ./check-file.sh /dev/pts/0
/dev/pts/0 is character special
[root@localhost mnt]# ./check-file.sh /mnt/123
/mnt/123 not exists
[root@localhost mnt]# ./check-file.sh
Please give me a file

==create_user腳本==
[root@localhost mnt]# vim create_user.sh
--------------------------------------------------
#!/bin/bash
if
[ -n "$1" -a -n "$2" ]
then
        if
        [ -e "$1" -a -e "$2" ]
        then
        MAXUSER=`wc -l $1 | cut -d " " -f 1`
        MAXPASS=`wc -l $2 | cut -d " " -f 1`
        [ "$MAXUSER" -eq "$MAXPASS" ] && (
                for NUM in $( seq 1 $MAXUSER )
                do
                USERNAME=`sed -n ${NUM}p $1`
                PASSWORD=`sed -n ${NUM}p $2`
                CKUSER=`getent passwd $USERNAME`
                [ -z "$CKUSER" ] && (
                useradd $USERNAME
                echo $PASSWORD | passwd --stdin $USERNAME &>/dev/null
                echo $USERNAME/$PASSWORD created successfully!
                )||echo "$USERNAME exist!"
                done
        )||(
        echo $1 and $2 have different lines!
        )
        elif
        [ ! -e "$1" ]
        then
        echo "ERROR:$1 is not exsit!"
        else
        echo "ERROR:$2 is not exsit!"
        fi
else
echo "ERROR: Please input userfile and passfile after command!"
fi
:wq
--------------------------------------------------
##使用"getent passwd $USERNAME",而不使用"id $USERNAME"的原因是:有些用戶是隱藏起來的,使用後者看不到
[root@localhost mnt]# chmod +x create_user.sh
[root@localhost mnt]# vim userfile
--------------------------------------------------
user1
user2
user3
:wq
--------------------------------------------------
[root@localhost mnt]# vim passfile
--------------------------------------------------
westos1
westos2
westos3
:wq
--------------------------------------------------
[root@localhost mnt]# vim passfile1
--------------------------------------------------
westos1
westos2
:wq
--------------------------------------------------
[root@localhost mnt]# ./create_user.sh userfile
ERROR: Please input userfile and passfile after command!
[root@localhost mnt]# ./create_user.sh username passfile
ERROR:username is not exsit!
[root@localhost mnt]# ./create_user.sh userfile password
ERROR:password is not exsit!
[root@localhost mnt]# ./create_user.sh userfile passfile1
userfile and passfile1 have different lines!
[root@localhost mnt]# ./create_user.sh userfile passfile
user1/westos1 created successfully!
user2/westos2 created successfully!
user3/westos3 created successfully!
[root@localhost mnt]# id user1
uid=1005(user1) gid=1005(user1) groups=1005(user1)
[root@localhost mnt]# userdel -r user1
[root@localhost mnt]# ./create_user.sh userfile passfile
user1/westos1 created successfully!
user2 exist!
user3 exist!

==case腳本==
[root@localhost mnt]# vim case.sh
--------------------------------------------------
#!/bin/bash
case "$1" in
        apple)
        echo banana
        ;;
        banana)
        echo apple
        ;;
        *)
        echo error
        ;;
esac
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x case.sh
[root@localhost mnt]# ./case.sh apple
banana
[root@localhost mnt]# ./case.sh banana
apple
[root@localhost mnt]# ./case.sh orange
error
[root@localhost mnt]# ./case.sh
error

==ask.sh==
[root@localhost mnt]# vim ask.sh
--------------------------------------------------
#!/bin/bash
read -p "what is your name: " NAME
read -p "How old are you: " AGE
read -p "what is your class: " CLASS
read -p "Are you happy: " FEEL
echo $NAME is $AGE\'s old. he is $CLASS student and $FEEL.
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x ask.sh
[root@localhost mnt]# ./ask.sh
what is your name: lee
How old are you: 18
what is your class: linux
Are you happy: happy
lee is 18's old. he is linux student and happy.

==expect==
[root@localhost mnt]# yum install expect -y
......
[root@localhost mnt]# which expect
/usr/bin/expect
[root@localhost mnt]# vim answer.exp
--------------------------------------------------
#!/usr/bin/expect
spawn /mnt/ask.sh
        expect "name"
        send "lee\r"
        expect "old"
        send "18\r"
        expect "class"
        send "linux\r"
        expect "happy"
        send "happy\r"
expect eof
:wq
--------------------------------------------------
##"spawn"表示監控,"expect"表示等待什麼字符,"send"表示發送
[root@localhost mnt]# chmod +x answer.exp
[root@localhost mnt]# ./answer.exp
spawn /mnt/ask.sh
what is your name: lee
How old are you: 18
what is your class: linux
Are you happy: happy
lee is 18's old. he is linux student and happy.

[root@localhost mnt]# vim answer.exp
--------------------------------------------------
/刪除
expect eof
:wq
--------------------------------------------------
##"expect eof"的作用是在輸出中搜索文件結束符。如果沒有這一行,腳本會立即退出,得不到正確結果
[root@localhost mnt]# ./answer.exp
spawn /mnt/ask.sh
what is your name: lee
How old are you: 18
what is your class: linux
Are you happy: [root@localhost mnt]#

==改進answer.exp==
[root@localhost mnt]# vim answer.exp
--------------------------------------------------
#!/usr/bin/expect
set name [ lindex $argv 0 ]
set age [ lindex $argv 1 ]
set class [ lindex $argv 2 ]
set feel [ lindex $argv 3 ]

spawn /mnt/ask.sh
        expect "name"
        send "$name\r"
        expect "old"
        send "$age\r"
        expect "class"
        send "$class\r"
        expect "happy"
        send "$feel\r"
expect eof
:wq
--------------------------------------------------
##[lindex $argv n]表示從bash傳遞過來的第幾個參數,0表示第一個參數,1表示第二個參數,以此類推
[root@localhost mnt]# ./answer.exp lee 18 linux happy
spawn /mnt/ask.sh
what is your name: lee
How old are you: 18
what is your class: linux
Are you happy: happy
lee is 18's old. he is linux student and happy.

==exp_continue==
[root@localhost mnt]# man expect
--------------------------------------------------
/exp_continue,按n向下查找

       exp_continue [-continue_timer]
             The command exp_continue allows expect itself to continue execut‐
             ing rather than  returning  as  it  normally  would.  By  default
             exp_continue  resets  the timeout timer. The -continue_timer flag
             prevents timer from being restarted. (See expect for more  infor‐
             mation.)

/繼續按n向下查找,找到格式

                 expect {
                     busy       {puts busy\n ; exp_continue}
                     -re "failed|invalid password" abort
                     timeout    abort
                     connected
                 }
q
--------------------------------------------------
##"exp_continue"意思是,如果遇到這個問題,那麼就正常執行;如果沒有遇到這個問題,那麼跳過直接執行下一條

==ssh.exp==
[root@localhost mnt]# vim ssh.exp
--------------------------------------------------
#!/usr/bin/expect
set timeout 3
set ip [ lindex $argv 0 ]
set pass [ lindex $argv 1]
spawn ssh root@$ip
expect {
        "(yes/no)?"     {send yes\n ; exp_continue}
        "password:"     {send "$pass\r" ;}
}
interact
:wq
--------------------------------------------------
##"set timeout 3"設置後面所有的expect命令的等待響應的超時時間爲3秒
##"interact"執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。否則退出登錄
[root@localhost mnt]# chmod +x ssh.exp
[root@localhost mnt]# ./ssh.exp 172.25.50.250 redhat
spawn ssh [email protected]
[email protected]'s password:
Last login: Fri Dec 16 08:56:24 2016
[root@foundation50 ~]# logout
Connection to 172.25.50.250 closed.
[root@localhost mnt]#

==scan_hostname腳本==

[root@localhost mnt]# vim ssh.exp         ##修改ssh.exp腳本

--------------------------------------------------
#!/usr/bin/expect
set timeout 3
set ip [ lindex $argv 0 ]
set pass [ lindex $argv 1]
set comm [ lindex $argv 2]
spawn ssh root@$ip $comm
expect {
        "(yes/no)?"     {send yes\r ; exp_continue}
        "password:"     {send "$pass\r" ;}
}
expect eof
:wq
--------------------------------------------------
[root@localhost mnt]# vim scan_hostname.sh
--------------------------------------------------
#!/bin/bash
for NUM in {100..110}
do
ping -c1 -w1 172.25.50.$NUM &> /dev/null && /mnt/ssh.exp 172.25.50.$NUM redhat hostname
done
:wq
--------------------------------------------------
[root@localhost mnt]# chmod +x scan_hostname.sh
[root@localhost mnt]# rm -fr ~/.ssh/
[root@localhost mnt]# ./scan_hostname.sh
spawn ssh [email protected] hostname
The authenticity of host '172.25.50.100 (172.25.50.100)' can't be established.
ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.50.100' (ECDSA) to the list of known hosts.
[email protected]'s password:
localhost
spawn ssh [email protected] hostname
The authenticity of host '172.25.50.110 (172.25.50.110)' can't be established.
ECDSA key fingerprint is ee:be:20:8d:8a:1e:a0:b5:9a:34:80:1b:d2:30:18:75.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.50.110' (ECDSA) to the list of known hosts.
[email protected]'s password:
Permission denied, please try again.
[root@localhost mnt]# vim scan_hostname.sh
--------------------------------------------------
#!/bin/bash
for NUM in {100..110}
do
ping -c1 -w1 172.25.50.$NUM &> /dev/null && (
        /mnt/ssh.exp 172.25.50.$NUM redhat hostname |grep -Ev "spawn|The|ECDSA|connecting|Warning|password" |sed "s/Permission\ denied\,\ please\ try\ again\./172.25.50.$NUM password is error!/g"
        )||(
        echo 172.25.50.$NUM is down! )
done
:wq
--------------------------------------------------
[root@localhost mnt]# ./scan_hostname.sh
localhost
172.25.50.101 is down!
172.25.50.102 is down!
172.25.50.103 is down!
172.25.50.104 is down!
172.25.50.105 is down!
172.25.50.106 is down!
172.25.50.107 is down!
172.25.50.108 is down!
172.25.50.109 is down!
172.25.50.110 password is error!

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