內容選單標籤

2017年8月9日 星期三

dreamweaver CS6 + PHP









------------------------------------------------------------------下載安裝appserv-win32-8.6.0


http://127.0.0.1/   >phpMyAdmin Database Manager Version 4.6.6   >使用者名稱:root   >密碼:db123456


資料庫   >建立新資料庫:kkdb   >utf8_unicode_ci   >建立

建立資料表   >名稱:建立資料表   >欄:4   >執行


名稱   型態                 長度值   ...   屬性                       索引                  A_I
mid     INT
na       VARCHAR       20                 UNSIGNED           PRIMARY       V
acnt    VARCHAR       10
pwd    VARCHAR       10


>儲存

新增2筆資料









------------------------------------------------------------------安裝CS6測試版

Dreamweaver 新增網站

1. 網站   -->網站名稱:kkweb01   -->本機網站資料夾:C:\AppServ\www\kkweb01\

2. 伺服器

   伺服器   -->新增伺服器

   基本   -->伺服器名稱:localhost   -->連線方式:本機網路   -->伺服器資料夾:    C:\AppServ\www\kkweb01   -->WEB URL:http://127.0.0.1/kkweb01/

   進階   -->伺服器模式:PHP MYSQL

   儲存   -->勾選  測試

3. 進階設定:
本地資訊:預設影像資料夾   -->C:\AppServ\www\kkweb01\images   -->儲存




4. 視窗   -->工作區面板   -->傳統

5. 檔案   -->於瀏覽器中預覽   -->編輯瀏覽器清單   -->在瀏覽器中預覽   -->chrome   -->主要瀏覽器   -->確定

6.檢視   -->工具列   -->標準








------------------------------------------------------------------list.php

視窗   >資料庫   >MySQL連線   >conn01   >localhost   >root   >db123456   >選取   >kkdb   >確定   >測試   >確定


視窗   >繫結   >資料集(查詢)   >Rs1   >conn01   >tblmen   >全選   >確定   >資料集(Rs1) 欄位 拖曳至表格相對欄位   >選取表格資料呈現列   >伺服器行為   >重複區域   >所有紀錄   >確定   >F12預覽


code:

<?php require_once('Connections/conn01.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;  
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

mysql_select_db($database_conn01, $conn01);
$query_Rs1 = "SELECT * FROM tblmen";
$Rs1 = mysql_query($query_Rs1, $conn01) or die(mysql_error());
$row_Rs1 = mysql_fetch_assoc($Rs1);
$totalRows_Rs1 = mysql_num_rows($Rs1);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
  <table width="500" border="1" align="center">
    <tr>
      <td colspan="6" align="center"><strong>瀏覽資料</strong></td>
    </tr>
    <tr>
      <td>編號</td>
      <td>姓名</td>
      <td>帳號</td>
      <td>密碼</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <?php do { ?>
      <tr>
        <td><?php echo $row_Rs1['mid']; ?></td>
        <td><?php echo $row_Rs1['na']; ?></td>
        <td><?php echo $row_Rs1['acnt']; ?></td>
        <td><?php echo $row_Rs1['pwd']; ?></td>
        <td>修改</td>
        <td>刪除</td>
      </tr>
      <?php } while ($row_Rs1 = mysql_fetch_assoc($Rs1)); ?>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><a href="add.php">新增資料</a></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
  </table>
</form>
</body>
</html>
<?php
mysql_free_result($Rs1);
?>




------------------------------------------------------------------add.php

視窗   >伺服器行為   >插入資料   >插入後請前往:list.php   >確定

設定 list.php 內 新增資料 文字 超連結


code:
<?php require_once('Connections/conn01.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;  
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO tblmen (na, acnt, pwd) VALUES (%s, %s, %s)",
                       GetSQLValueString($_POST['na'], "text"),
                       GetSQLValueString($_POST['acnt'], "text"),
                       GetSQLValueString($_POST['pwd'], "text"));

  mysql_select_db($database_conn01, $conn01);
  $Result1 = mysql_query($insertSQL, $conn01) or die(mysql_error());

  $insertGoTo = "list.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<form id="form1" name="form1" method="POST" action="<?php echo $editFormAction; ?>">
  <table width="500" border="0" align="center">
    <tr>
      <td colspan="3" align="center"><strong>新增資料</strong></td>
    </tr>
    <tr>
      <td>姓名</td>
      <td colspan="2"><input type="text" name="na" id="na" /></td>
    </tr>
    <tr>
      <td>帳號</td>
      <td colspan="2"><input type="text" name="acnt" id="acnt" /></td>
    </tr>
    <tr>
      <td>密碼</td>
      <td colspan="2"><input type="text" name="pwd" id="pwd" /></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="cancel" id="cancel" value="取消" /></td>
      <td><input type="submit" name="ok" id="ok" value="新增" /></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td colspan="2">&nbsp;</td>
    </tr>
  </table>
  <input type="hidden" name="MM_insert" value="form1" />
</form>
</body>
</html>





------------------------------------------------------------------upd.php

1. 複製 add.php 為 upd.php
2. 加入一個隱藏欄位 id=mid name=mid
3. 刪除
    視窗   >伺服器行為   >插入資料

設定 list.php 內 修改 文字 超連結
參數   >mid   > <?php echo $row_Rs1['mid']; ?>   >確定   >URL:upd.php?mid=<?php echo $row_Rs1['mid']; ?>   >確定


upd.php

視窗   >繫結   >資料集(查詢)   >Rs1   >conn01   >tblmen   >全選   >篩選器 mid   >=   >URL參數   >mid   >確定   >資料集(Rs1) 欄位 拖曳至表格相對欄位,包含 隱藏欄位 id=mid


視窗   >伺服器行為   >更新紀錄   >form1   >conn01   >tblmen   >值:FORM.mid   >送出為:整數   >勾選 主索引鍵   >更新後,請前往:list.php   >確定



code:

<?php require_once('Connections/conn01.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;  
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
  $updateSQL = sprintf("UPDATE tblmen SET na=%s, acnt=%s, pwd=%s WHERE mid=%s",
                       GetSQLValueString($_POST['na'], "text"),
                       GetSQLValueString($_POST['acnt'], "text"),
                       GetSQLValueString($_POST['pwd'], "text"),
                       GetSQLValueString($_POST['mid'], "int"));

  mysql_select_db($database_conn01, $conn01);
  $Result1 = mysql_query($updateSQL, $conn01) or die(mysql_error());

  $updateGoTo = "list.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
    $updateGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $updateGoTo));
}

$colname_Rs1 = "-1";
if (isset($_GET['mid'])) {
  $colname_Rs1 = $_GET['mid'];
}
mysql_select_db($database_conn01, $conn01);
$query_Rs1 = sprintf("SELECT * FROM tblmen WHERE mid = %s", GetSQLValueString($colname_Rs1, "int"));
$Rs1 = mysql_query($query_Rs1, $conn01) or die(mysql_error());
$row_Rs1 = mysql_fetch_assoc($Rs1);
$totalRows_Rs1 = mysql_num_rows($Rs1);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<form action="<?php echo $editFormAction; ?>" id="form1" name="form1" method="POST">
  <table width="500" border="0" align="center">
    <tr>
      <td colspan="3" align="center"><strong>修改資料</strong></td>
    </tr>
    <tr>
      <td>姓名</td>
      <td colspan="2"><input name="na" type="text" id="na" value="<?php echo $row_Rs1['na']; ?>" /></td>
    </tr>
    <tr>
      <td>帳號</td>
      <td colspan="2"><input name="acnt" type="text" id="acnt" value="<?php echo $row_Rs1['acnt']; ?>" /></td>
    </tr>
    <tr>
      <td>密碼</td>
      <td colspan="2"><input name="pwd" type="text" id="pwd" value="<?php echo $row_Rs1['pwd']; ?>" /></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td colspan="2"><input name="mid" type="hidden" id="mid" value="<?php echo $row_Rs1['mid']; ?>" /></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="cancel" id="cancel" value="取消" /></td>
      <td><input type="submit" name="ok" id="ok" value="修改" /></td>
    </tr>
  </table>
  <input type="hidden" name="MM_update" value="form1" />
</form>
</body>
</html>
<?php
mysql_free_result($Rs1);
?>


------------------------------------------------------------------刪除資料功能,整合在 list.php 內

設定 list.php 內 文字  "刪除" 超連結
檔案名稱:list.php   >參數   >

名稱      值
mid        <?php echo $row_Rs1['mid']; ?>
isDel      yes

>確定

URL:    ./?mid=<?php echo $row_Rs1['mid']; ?>&isDel=yes

>確定


視窗   >伺服器行為   >刪除紀錄   >
主索引鍵   >conn01   >tblmen   >主索引鍵欄位:mid   >勾選   數值
                                                    >主索引鍵:URL 參數   >mid
                                                    >確定


//修改程式碼
//先判斷只有在 isDel 成立,才進行刪除動作

if ((isset($_GET['isDel'])) && ($_GET['isDel'] != "")) {

if ((isset($_GET['mid'])) && ($_GET['mid'] != "")) {
 $deleteSQL = sprintf("DELETE FROM tblmen WHERE mid=%s",
  GetSQLValueString($_GET['mid'], "int"));

 mysql_select_db($database_conn01, $conn01);
 $Result1 = mysql_query($deleteSQL, $conn01) or die(mysql_error());
}

}








code:

<?php require_once('Connections/conn01.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;  
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

if ((isset($_GET['isDel'])) && ($_GET['isDel'] != "")) {
if ((isset($_GET['mid'])) && ($_GET['mid'] != "")) {
 $deleteSQL = sprintf("DELETE FROM tblmen WHERE mid=%s",
  GetSQLValueString($_GET['mid'], "int"));

 mysql_select_db($database_conn01, $conn01);
 $Result1 = mysql_query($deleteSQL, $conn01) or die(mysql_error());
}
}
mysql_select_db($database_conn01, $conn01);
$query_Rs1 = "SELECT * FROM tblmen";
$Rs1 = mysql_query($query_Rs1, $conn01) or die(mysql_error());
$row_Rs1 = mysql_fetch_assoc($Rs1);
$totalRows_Rs1 = mysql_num_rows($Rs1);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
  <table width="500" border="1" align="center">
    <tr>
      <td colspan="6" align="center"><strong>瀏覽資料</strong></td>
    </tr>
    <tr>
      <td>編號</td>
      <td>姓名</td>
      <td>帳號</td>
      <td>密碼</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <?php do { ?>
      <tr>
        <td><?php echo $row_Rs1['mid']; ?></td>
        <td><?php echo $row_Rs1['na']; ?></td>
        <td><?php echo $row_Rs1['acnt']; ?></td>
        <td><?php echo $row_Rs1['pwd']; ?></td>
        <td><a href="upd.php?mid=<?php echo $row_Rs1['mid']; ?>">修改</a></td>
        <td><a href="list.php?mid=<?php echo $row_Rs1['mid']; ?>&amp;isDel=yes">刪除</a></td>
      </tr>
      <?php } while ($row_Rs1 = mysql_fetch_assoc($Rs1)); ?>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><a href="add.php">新增資料</a></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
  </table>
</form>
</body>
</html>
<?php
mysql_free_result($Rs1);
?>





------------------------------------------------------------------index.php 使用者驗證



視窗   >伺服器行為   >使用者驗證   >登入使用者

輸入來源表單:               form1
使用者名稱欄位:           acnt
密碼欄位:                       pwd
---------------------------------------
使用連線驗證:              conn01
表格:                              tblmen  
使用者名稱欄:              acnt
密碼欄:                          pwd
---------------------------------------
如果登入成功,即前往:list.php
如果登入失敗,即前往:list.php
---------------------------------------
限制存取準則:

>確定





code:

<?php require_once('Connections/conn01.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;  
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}
?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
  $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['acnt'])) {
  $loginUsername=$_POST['acnt'];
  $password=$_POST['pwd'];
  $MM_fldUserAuthorization = "";
  $MM_redirectLoginSuccess = "list.php";
  $MM_redirectLoginFailed = "index.php";
  $MM_redirecttoReferrer = false;
  mysql_select_db($database_conn01, $conn01);

  $LoginRS__query=sprintf("SELECT acnt, pwd FROM tblmen WHERE acnt=%s AND pwd=%s",
    GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));
 
  $LoginRS = mysql_query($LoginRS__query, $conn01) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
     $loginStrGroup = "";
 
if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;    

    if (isset($_SESSION['PrevUrl']) && false) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
    }
    header("Location: " . $MM_redirectLoginSuccess );
  }
  else {
    header("Location: ". $MM_redirectLoginFailed );
  }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>

<body>
<form id="form1" name="form1" method="POST" action="<?php echo $loginFormAction; ?>">
  <table width="300" border="1" align="center">
    <tr>
      <td colspan="2" align="center">使用者登入</td>
    </tr>

    <tr>
      <td>帳號</td>
      <td><input type="text" name="acnt" id="acnt" /></td>
    </tr>
    <tr>
      <td>密碼</td>
      <td><input type="text" name="pwd" id="pwd" /></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="login" id="login" value="登入" /></td>
    </tr>
  </table>
</form>
</body>
</html>











2017年7月25日 星期二

Centos7 get SElinux to allow Apache and Samba on the same folder



-------------------------------先安裝httpd
# yum -y install httpd
# rpm -qa | grep httpd
httpd-2.4.6-45.el7.centos.4.x86_64
httpd-tools-2.4.6-45.el7.centos.4.x86_64


# systemctl start httpd.service
# systemctl enable httpd.service

# systemctl status httpd

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --reload
# firewall-cmd --list-all

http://163.16.63.191/




-------------------------------虛擬目錄

# adduser kkweb01
# passwd kkweb01           //123456

# ls -l /home

drwx------. 2 kkweb01 kkweb01 62  7月 26 11:16 kkweb01

# chmod 755 /home/kkweb01
# ls -l /home
drwxr-xr-x. 2 kkweb01 kkweb01 80  7月 26 11:23 kkweb01


# vi /home/kkweb01/index.html

This is Visual Dir...


# vi /etc/httpd/conf/httpd.conf
...
Alias /web01 "/home/kkweb01"


<Directory "/home/kkweb01">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted

</Directory>


# systemctl restart httpd



# ls -dZ /home/kkweb01
drwxr-xr-x. kkweb01 kkweb01 unconfined_u:object_r:user_home_dir_t:s0 /home/kkweb01


# chcon -R -t public_content_rw_t /home/kkweb01


# ls -dZ /home/kkweb01

drwxr-xr-x. kkweb01 kkweb01 unconfined_u:object_r:public_content_rw_t:s0 /home/kkweb01


# setsebool -P allow_httpd_anon_write 1



----------------------------無效
# ls -Z /home
drwx------. kkweb01 kkweb01 unconfined_u:object_r:user_home_dir_t:s0 kkweb01



# chcon -R -t httpd_sys_content_t /home/kkweb01
# ls -Z /home
drwx------. kkweb01 kkweb01 unconfined_u:object_r:httpd_sys_content_t:s0 kkweb01
----------------------------


http://163.16.63.191/web01/
This is Visual Dir...




-------------------------------samba

# yum -y install samba

# rpm -qa | grep samba

samba-common-4.4.4-14.el7_3.noarch

samba-common-libs-4.4.4-14.el7_3.x86_64
samba-4.4.4-14.el7_3.x86_64
samba-client-libs-4.4.4-14.el7_3.x86_64
samba-common-tools-4.4.4-14.el7_3.x86_64
samba-libs-4.4.4-14.el7_3.x86_64


# ls -l /home
drwxr-xr-x. 2 kkweb01 kkweb01 80  7月 26 11:23 kkweb01

# chown -R nobody:nobody /home/kkweb01

# ls -l /home
drwxr-xr-x. 2 nobody nobody 80  7月 26 11:23 kkweb01


# vi /etc/samba/smb.conf
...


[global]

workgroup = WORKGROUP

server string = Samba Server %v
#netbios name = centos
security = user
map to guest = bad user
dns proxy = no

#===== Share Definitions ====
[Samba分享]
path = /home/kkweb01
browsable =yes
writable = yes
guest ok = yes
read only = no

# systemctl start smb.service


# firewall-cmd --permanent --zone=public --add-service=samba
# firewall-cmd --reload
# firewall-cmd --list-all



# setsebool -P allow_smbd_anon_write 1




----------------------------------------------------無效
# ln -s /home/kkweb01 /samba_share



# ls -l /

...

lrwxrwxrwx.   1 root root   13  7月 26 12:01 samba_share -> /home/kkweb01
...

# ls -Z /
...
lrwxrwxrwx. root root unconfined_u:object_r:root_t:s0  samba_share -> /home/kkweb01
...

# chcon -R -t samba_share_t /samba_share

# ls -Z /
...
lrwxrwxrwx. root root unconfined_u:object_r:samba_share_t:s0 samba_share -> /home/kkweb01
...
----------------------------------------------------



\\163.16.63.191\Samba分享









2017年5月14日 星期日

C語言程式


-----------------------------選擇排序
#include<stdio.h>
int main()
{
int Ary[]={3,7,1,6,8};
int min,n=5;                 /*最小值、元素個數*/

for (int i =0;i<n-1;i++)     /*比較第幾回合*/
{
min=i;                   /*第1回合設定第1個元素為最小*/
for (int j=i+1;j<n;j++)  /*第1回合從第2個元素才開始比*/
{
if (Ary[j]<Ary[min])
{
min=j;
}
}

int tmp=Ary[i];
Ary[i]=Ary[min];
Ary[min]=tmp;
}

for(int i=0;i<n;i++)
{
printf("%d ",Ary[i]);
}

}


-----------------------------氣泡排序 小->大

#include<stdio.h>
int main()
{
int a[5]={9,8,6,4,3};
int n=5;
for (int i=0;i<=n-1;i++)          /*5個元素比4個回合*/
{
for (int j=0;j<n-i-1;j++)  
/*第1回j=0~4 因以[j+1]表示 所以j=0~3  第2回j=0~3 第3回j=0~2 第4回j=0~1*/
{
if (a[j]>a[j+1])
{
int max=a[j];
a[j]=a[j+1];
a[j+1]=max;
}
}
}

for (int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}



-----------------------------Factorial

#include<stdio.h>
int fact(int n)
{
int result;
if (n==1)
{
result=1;
}
else
{
result=n*fact(n-1);
}

return result;
}

int main()
{
int x;
scanf("%d",&x);
printf("%d!= %d",x,fact(x));
}




-----------------------------Fibonacci Number

#include<stdio.h>
int Fib(int n)
{
int result;
if (n==0)
{
result=0;
}
else
if(n==1)
{
result=1;
}
else
if(n>=2)
{
return Fib(n-1)+Fib(n-2);
}

return result;
}

int main()
{
int x;
scanf("%d",&x);
printf("%第%d項= %d",x,Fib(x));
}




-----------------------------Great Command Divisor

#include<stdio.h>
int GCD(int a,int b)
{
int c=a%b;
if (c==0)
{
return b;
}
else
{
return GCD(b,c);
}


}

int main()
{
int x,y;
scanf("%d %d",&x,&y);
printf("GCD(%d,%d)= %d",x,y,GCD(x,y));
}




-----------------------------Hanoi Tower

#include <stdio.h>
int cnt=0;
void hanoi(int n, char A, char B, char C)
{
if (n==1)
{
/*³Ì©³ n¡A±qA~C*/
printf("%d ¡G ±N²Ä %d ­Ó¶ê½L¥Ñ %c  ²¾¨ì %c \n",++cnt,n,A,C);

}
else
{
/*²Ä n-1¼h¡A¥ý¥Ñ A~B */
hanoi(n-1,A,C,B);
printf("%d ¡G ±N²Ä %d ­Ó¶ê½L¥Ñ %c  ²¾¨ì %c \n",++cnt,n,A,C);
/*¦A¥Ñ B~C*/
hanoi(n-1,B,A,C);
}
}



int main()
{
int n;
scanf("%d",&n);
hanoi(n,'A','B','C');
printf("²¾°Ê %d ¼h¡A¦@»Ý²¾°Ê %d ¦¸",n,cnt);
}

-----------------------------

-----------------------------

-----------------------------

-----------------------------


-----------------------------



-----------------------------

2017年5月5日 星期五

ch7 使用者帳號管理

# groupadd kkGroup
# cat /etc/group
...
kkGroup:x:1000:

useradd   [選項]   帳號名稱
選項:
-c    註解
-g   主要群組名稱或GID
-G   附加群組名稱或GID
-d    指定家目錄
-e    建立的帳號有效日期
-u    指定帳號的UID編號


# useradd -g kkGroup kk1
# id kk1
uid=1000(kk1) gid=1000(kkGroup) groups=1000(kkGroup)


# cat /etc/passwd           //使用者帳號資料
...
kk1:x:1000:1000::/home/kk1:/bin/bash
帳號名稱:密碼:UID:GID:註解:家目錄:登入時使用的shell
//若要停止帳號登入,可將密碼資料 x 改成 !


# cat /etc/shadow           //使用者密碼
...
kk1:!!:17291:0:99999:7:::


# usermod -G root kk1

# id kk1
uid=1000(kk1) gid=1000(kkGroup) groups=1000(kkGroup),0(root)
使用者編號uid(使用者名稱)   群組編號   群組名稱   附加群組資訊


# userdel -r kk1           //刪除帳號及其家目錄所有檔案
# id kk1
id: kk1: no such user
# ls /home

# groupdel kkGroup    //刪除沒有使用者指派的群組



變更檔案權限---         chmod

變更檔案擁有者---     chown

變更檔案所屬群組--- chgrp





    



2017年5月4日 星期四

ch17 DNS

BIND Berkeley Internet Name Domain
FQDN Fully Qualified Domain Name

資源記錄:

網域名稱   [TTL]   [類別]   記錄的類型   值

網域名稱:也可以是IP位址
TTL:記錄存活的時間值
類別:以TCP/IP網路,則一定是 IN

記錄的類型:
SOA:       權限開始
NS:          DNS伺服器
MX:         郵件交換器
A:            位址
PTR:       指標
CNAME:標準名稱

值:記錄的值




# yum install -y bind bind-chroot bind-utils

# rpm -qa | grep bind
bind-libs-9.9.4-38.el7_3.3.x86_64
bind-chroot-9.9.4-38.el7_3.3.x86_64
bind-libs-lite-9.9.4-38.el7_3.3.x86_64
bind-license-9.9.4-38.el7_3.3.noarch
bind-9.9.4-38.el7_3.3.x86_64
bind-utils-9.9.4-38.el7_3.3.x86_64


---------------------------------------------------------------------------
bind:DNS伺服器主要套件,提供基礎的DNS功能

重要目錄與檔案說明:
/etc/named.conf                  //bind主設定檔
/etc/named.rfc1912.zones   //管轄網域設定檔
/usr/sbin/named                  //系統服務執行檔,名稱為named

# ls /var/named                   //所有管轄網域的資源紀錄預設放在此目錄
chroot  data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves



bind-chroot:加強bind套件的安全性,將bind工作目錄移至獨立的目錄下
        禁錮機制:

# ls -l /var/named/chroot
總計 0
drwxr-x---. 2 root  named 41  5月  3 15:11 dev
drwxr-x---. 4 root  named 28  5月  3 15:11 etc
drwxr-x---. 3 root  named 18  5月  3 15:11 run
drwxrwx---. 3 named named 18  5月  3 15:11 usr
drwxr-x---. 5 root  named 48  5月  3 15:11 var



bind-utils:DNS相關工具套件,提供dig等測試工具


-----------------------------------------------------------------------

# firewall-cmd --permanent --add-service=dns
success
# firewall-cmd --reload
success


# systemctl start named
# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.







dig   @[名稱伺服器位址]   名稱   [查詢類型]

查詢類型:
a:查詢IP位址,預設,可省
mx:查郵件伺服器
ns:查名稱伺服器
cname:查別名
ptr:由IP位址反查名稱
hinfo:DNS伺服器系統資訊


//預設DNS伺服器
# cat /etc/resolv.conf
# Generated by NetworkManager
search centos
nameserver 163.16.1.23



# dig tw.yahoo.com
...
;; QUESTION SECTION:                       //我們向DNS提出的問題
;tw.yahoo.com.                  IN      A

;; ANSWER SECTION:                         //DNS查詢後得到的答案
tw.yahoo.com.           52      IN      CNAME   media-router-fp1.prod.media.yahoo.com.
...

;; AUTHORITY SECTION:                  //該名稱的管轄單位
wg1.b.yahoo.com.        105017  IN      NS      yf1.yahoo.com.
wg1.b.yahoo.com.        105017  IN      NS      yf3.a1.b.yahoo.net.
wg1.b.yahoo.com.        105017  IN      NS      yf2.yahoo.com.
wg1.b.yahoo.com.        105017  IN      NS      yf4.a1.b.yahoo.net.

;; ADDITIONAL SECTION:                //額外資訊
yf1.yahoo.com.          18617   IN      A       68.142.254.15
yf2.yahoo.com.          18617   IN      A       68.180.130.15

;; Query time: 4 msec
;; SERVER: 163.16.1.23#53(163.16.1.23)      //由哪提供資料
;; WHEN: 五  5月 05 11:28:35 CST 2017
;; MSG SIZE  rcvd: 285


# dig @168.95.1.1 tw.yahoo.com
...
;; Query time: 2 msec
;; SERVER: 168.95.1.1#53(168.95.1.1)        //指定hinet的DNS查詢
;; WHEN: 五  5月 05 11:46:18 CST 2017
;; MSG SIZE  rcvd: 167



# dig @localhost www.google.com
...
;; ANSWER SECTION:
www.google.com.         300     IN      A       64.233.187.103
...


# dig @127.0.0.1 www.google.com
...
;; ANSWER SECTION:
www.google.com.         149     IN      A       64.233.187.105
...


# dig @163.16.63.191 www.google.com
; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.3 <<>> @163.16.63.191 www.google.com
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached


# vi /etc/named.conf
...
options {
//      listen-on port 53 { 127.0.0.1; };
        listen-on port 53 { any; };              //可以公開服務的DNS
...
 allow-query     { 163.16.63.0/24; };
...



# systemctl restart named

# dig @163.16.63.191 www.google.com
...
;; ANSWER SECTION:
www.google.com.         300     IN      A       64.233.187.104
...




-----------管理一個網域

# vi /etc/named.rfc1912.zones
...
zone "kk.rwm" IN {
        type master;
        file "named.kk";
        allow-update { none; };
};




# cp /var/named/named.empty /var/named/named.kk
# vi /var/named/named.kk
$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       163.16.63.191
www     A       163.16.63.191


# chown root:named /var/named/named.kk
# ls -l /var/named/named.kk
-rw-r-----. 1 root named 166  5月  5 13:59 /var/named/named.kk


# systemctl restart named



# dig @127.0.0.1 www.kk.rwm
...
;; QUESTION SECTION:
;www.kk.rwm.                    IN      A

;; ANSWER SECTION:
www.kk.rwm.             86400   IN      A       163.16.63.191
...


# dig @163.16.63.191 www.kk.rwm
...
;; QUESTION SECTION:
;www.kk.rwm.                    IN      A

;; ANSWER SECTION:
www.kk.rwm.             86400   IN      A       163.16.63.191
...



---------------------------------windows10測試
ipv4網卡,慣用伺服器:163.16.63.191

C:\Users\User>nslookup
DNS request timed out.
    timeout was 2 seconds.
預設伺服器:  UnKnown
Address:  163.16.63.191
>

> www.kk.rwm
伺服器:  UnKnown
Address:  163.16.63.191

名稱:    www.kk.rwm
Address:  163.16.63.191
>

> www.google.com
伺服器:  UnKnown
Address:  163.16.63.191

未經授權的回答:
名稱:    www.google.com
Addresses:  2404:6800:4008:c05::93
          172.217.17.196
>

> exit




2017年4月28日 星期五

ch15 Apache

Linux的安全防護機制

1.防火牆 FirewallD (外部)
# systemctl stop firewalld.service
# systemctl disable firewalld.service

# firewall-cmd --permanent --add-service=http
success
# firewall-cmd --reload
success



2.增強安全機制 SELinux Security Enhanced Linux (內部)
# vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disable                                //關閉SELinux,存檔後重新開機設定值才生效
...

# sestatus
SELinux status:                 enabled
...




-----------------------------------------------------安裝
# yum install -y httpd httpd-tools
# rpm -qa | grep httpd
httpd-tools-2.4.6-45.el7.centos.4.x86_64
httpd-2.4.6-45.el7.centos.4.x86_64
# systemctl start httpd
# systemctl enable httpd
# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 五 2017-04-28 13:55:50 CST; 1min 24s ago


--------------------------------------------虛擬目錄
# mkdir /home/test
# vi /home/test/index.html
this is visual DIR
...

# vi /etc/httpd/conf/httpd.conf
...
Alias /test "/home/test"
<Directory "/home/test">
    Require all granted
</Directory>

# systemctl restart httpd


# chcon -R -t httpd_sys_content_t /home/test
# ls -Z /home/test
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html

# sestatus
SELinux status:                 enabled
...




2017年4月25日 星期二

ch14 系統服務與排程



服務 service 是背景執行的程式,通常會占用一個埠號,等待外部連線要求。Linux的服務通稱為Daemon,所以其服務名稱通常以d 結尾,如:httpd。
Linux 以新一代系統服務管理 systemd 取代 init。
常見系統管理使用的服務:
atd.service                           //一次性的工作排程服務
crond.service                      //週期性的工作排程服務
NetworkManager.service   //動態網路連線設定管理
network.target                    //固定式網路管理服務
sysinit.target                      //系統啟動
quotacheck.service            //磁碟配額檢查服務
syslog.service                    //系統日誌管理服務
sendmail.service               //電子郵件伺服器服務
smartd.service                  //磁碟健康狀態回報服務
sshd.service                      //加密遠端登入服務
httpd.service                     //網頁伺服器服務
cups.socket                      //列印伺服器服務

服務分為:
.service
在背景持續執行並等待的服務,能快速提供服務,但較耗費系統資源。適合快速且連線數龐大的服務,如:httpd.service

.socket
通訊埠有客戶端連線時才啟動的服務,速度相對較慢,但不耗費系統資源。適合不須快速且連線數較少的服務,如:cups.socket


# ls /usr/lib/systemd/          //此目錄放置的是systemd執行檔
catalog                systemd-coredump           systemd-shutdown
ntp-units.d            systemd-cryptsetup         systemd-shutdownd
...


//此目錄放置的是系統重要的Unit服務與Target設定檔及與系統啟動相關的服務
# ls /usr/lib/systemd/system    
arp-ethers.service                      remote-fs-pre.target
auditd.service                          remote-fs.target
...

systemctl   [選項]   命令   服務對象名稱 

常用命令:
start                        啟動服務
stop                        停止服務
restart                     重啟服務
enable                     開機啟動
disable                    開機不啟動
status                      服務目前狀態



-------------------------------------------------------

Linux 系統服務類型:
1. Standalone獨立服務
無論有無客戶要求,常駐系統背景,占用一定程度的系統資源,目的是為了在最短時間提       供客戶要求。如:httpd、sendmail、named...  

2. xinetd總管服務
有些服務不是常有客戶要求,就可以將這些服務註冊在一個總管型的服務xinetd。只要該服   務的port有客戶提出要求,xinetd這個常駐服務在負責將該服務啟動,當客戶要求處理完畢,再將該服務從系統中移除,以保系統資源的最佳狀況。如:telnet、tak...
CentOS預設已不安裝 xinetd套件。




-------------------------------------------------------
系統排程
CentOS安裝完成後,開機會自動啟動 crond 服務,crond負責每分鐘讀取排程設定檔:
/etc/crontab

# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |    .------------- hour (0 - 23)
# |    |   .---------- day of month (1 - 31)
# |    |   |   .------- month (1 - 12) OR jan,feb,mar,apr ...
# |    |   |   |   .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |    |   |   |   |
# *  *  *  *  * user-name  command to be executed







2017年4月19日 星期三

Excel vba



20101版本啟用vba
檔案-->選項-->自訂功能區-->V開發人員







Private Sub ComboBox2_Change()

If (ComboBox2.Value = "新案" Or ComboBox2.Value = "檢卷") Then TextBox4.Text = "事務官" Else TextBox4.Text = "書記官"
If ComboBox2.Value = "新案" Then TextBox6.Text = TextBox3.Text Else TextBox6.Text = ""

End Sub

--------------------------------------------------------------------------

Private Sub CommandButton1_Click()

Range("B1").Select
Selection.End(xlDown).Select

If (TextBox6.Text) <> "" Then Sheets("案號管理").Range("A" & ActiveCell.Row + 1).Value = TextBox6.Value

Sheets("案號管理").Range("B" & ActiveCell.Row + 1).Value = TextBox1.Value
Sheets("案號管理").Range("C" & ActiveCell.Row + 1).Value = ComboBox1.Value
Sheets("案號管理").Range("D" & ActiveCell.Row + 1).Value = TextBox2.Value
Sheets("案號管理").Range("E" & ActiveCell.Row + 1).Value = ComboBox2.Value
Sheets("案號管理").Range("F" & ActiveCell.Row + 1).Value = TextBox3.Value

Sheets("案號管理").Range("G" & ActiveCell.Row + 1).Value = TextBox4.Value

Sheets("案號管理").Range("H" & ActiveCell.Row + 1).Value = TextBox5.Value


Selection.End(xlDown).Select

CommandButton1.Enabled = False
CommandButton2.Enabled = False

End Sub


--------------------------------------------------------------------------

Private Sub CommandButton2_Click()
       ActiveCell.Offset(0, 3).Value = ComboBox2.Value
       ActiveCell.Offset(0, 4).Value = TextBox3.Value
       ActiveCell.Offset(0, 5).Value = TextBox4.Value
       ActiveCell.Offset(0, 6).Value = TextBox5.Value
       ActiveCell.Offset(0, -1).Value = TextBox6.Value
       CommandButton1.Enabled = False
       CommandButton2.Enabled = False

End Sub


--------------------------------------------------------------------------

Private Sub CommandButton3_Click()

ComboBox1.Value = ""
TextBox2.Value = ""
ComboBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
TextBox6.Value = ""

TextBox1.SetFocus

End Sub

--------------------------------------------------------------------------




Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Range("B2").Select
Dim i As Integer
i = 0

Do While Not (ActiveCell.Offset(i, 0).Value = "")
   
    If (ActiveCell.Offset(i, 0).Value = Val(TextBox1.Value) And ActiveCell.Offset(i, 1).Value = ComboBox1.Value And ActiveCell.Offset(i, 2).Value = Val(TextBox2.Value)) Then
     
       ComboBox2.Value = ActiveCell.Offset(i, 3).Value
       TextBox3.Value = ActiveCell.Offset(i, 4).Value
       TextBox4.Value = ActiveCell.Offset(i, 5).Value
       TextBox5.Value = ActiveCell.Offset(i, 6).Value
       TextBox6.Value = ActiveCell.Offset(i, -1).Value
     
       CommandButton1.Enabled = False
       CommandButton2.Enabled = True
     
       ActiveCell.Offset(i, 0).Select
     

        Exit Do
    Else
        i = i + 1
    End If
   
    CommandButton1.Enabled = True
    CommandButton2.Enabled = False

Loop
End Sub




--------------------------------------------------------------------------


Private Sub TextBox3_Change()

If ComboBox2.Value = "新案" Then TextBox6.Text = TextBox3.Text Else TextBox6.Text = ""

End Sub



--------------------------------------------------------------------------



Private Sub UserForm_Activate()
TextBox1.Text = Year(Date) - 1911
CommandButton1.Enabled = False
CommandButton2.Enabled = False

Dim i As Integer
i = 1
Do While Not (Sheets("dataSource").Range("A" & i) = "")
     ComboBox1.AddItem (Sheets("dataSource").Range("A" & i))
    i = i + 1
Loop


Dim j As Integer
j = 1
Do While Not (Sheets("dataSource").Range("C" & j) = "")
     ComboBox2.AddItem (Sheets("dataSource").Range("C" & j))
    j = j + 1
Loop

End Sub


--------------------------------------------------------------------------

2017年4月18日 星期二

ch13 網路指令與管理



CentOS兩種網路設定模式:
1. NetworkManager 適用動態網路設定
    如使用筆記型電腦上網方式因位置而不同,NetworkManager工具提供各類場合變換連線設       定功能。CentOS7預設啟動NetworkManager服務,可用systemctl指令將其換為network服務。


# systemctl disable NetworkManager.service      //開機不啟用

# systemctl stop NetworkManager.service          //停止服務

# chkconfig network on                                       // 開機啟用network

# systemctl start network.service                         // 啟動network

# systemctl status network                                   //確認network服務執行中
● network.service - LSB: Bring up/down networking
   Loaded: loaded (/etc/rc.d/init.d/network)
   Active: active (exited) since 二 2017-04-18 14:15:41 CST; 11min ago
...


2. network 適用固定位址的主機
Linuxn伺服器主機大都以network服務管理網卡,此服務位在 /etc/init.d/network,他是執行腳本,可啟動或停止系統網路設備。而network服務會讀取系統網路組態目錄下的設定檔

# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE="Ethernet"
BOOTPROTO="none"                                          //自動取得IP則為dhcp,固定IP則是static或none
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"                                                   //是否支援ipv6
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777736"
UUID="0f512752-90bd-45ed-892c-3f478f19f84d"
DEVICE="eno16777736"                                                 //設備名稱
ONBOOT="yes"                                                               //開機是否啟動此網路卡
IPADDR="163.16.63.191"
PREFIX="24"
GATEWAY="163.16.63.254"
DNS1="163.16.1.23"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_PRIVACY="no"





-------------------------------------------ifconfig命令設定網路卡
# ifconfig eno16777736
...
inet 163.16.63.191                   //IP 位址
ether 00:0c:29:c1:31:fa           //MAC位址
RX packets 308907  bytes      //已接收封包數
TX packets 8504  bytes           //已傳送封包數
...collisions 0                           //封包碰撞累計次數


# ifconfig eno16777736 up          //啟動網路卡
# ifconfig eno16777736 down     //停止網路卡
# ifconfig eno16777736 192.168.2.30 netmask 255.255.255.0        //設定網卡IP與netmask

--------------------------------------------------ip工具
ip 命令所做的設定結果不會存至系統組態檔中,所以重開後會回復原系統儲存的組態,若要實際修改系統的網路設定,可使用setup工具或修改系統網路設定檔。

# ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    ...
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    ...
//UP設備已啟動   LOOPBACK是迴路設備   BROADCAST廣播設備
  MULTICAST可同時將封包傳送到其它系統網路


# ip -s link show eno16777736      // -s 設備統計資料   link 省略IP位址相關資訊
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:c1:31:fa brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    1132284    13471    0       817     0       0
    TX: bytes  packets  errors  dropped carrier collsns
    19107      122      0       0       0       0

//RX 接收 TX傳送 統計資料   
  bytes 接收或傳送位元組總數 
  packets 接收或傳送封包總數
  errors 接收或傳送錯誤總數
  dropped 因缺乏資源而被放棄的封包總數
  carrier 接收者溢位導致放棄封包的總數
  mcast 已接收多重廣播封包總數
  overrun 因失去載波,導致連結媒體失敗的總次數
  collsns 碰撞事件總次數
       
# ip address add 10.0.0.2/24 brd + dev eth0      //指派10.0.0.2位址給eth0設備                                                                                                                //brd +選項會依網路遮罩,自動設定廣播位址
# ip address show dev eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:c1:31:fa brd ff:ff:ff:ff:ff:ff
    inet 163.16.63.191/24 brd 163.16.63.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 10.0.0.2/24 brd 10.0.0.255 scope global eno16777736
...

# ip address del 10.0.0.2/24 dev eno16777736      //移除設備IP位址

# ip link set eno16777736 up      //啟用網路設備   down 停用




----------------------------------
網路測試工具

# ping 168.95.1.1 -c 5      //-c 數字   只送出一定次數的ICMP封包
PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data.
64 bytes from 168.95.1.1: icmp_seq=1 ttl=247 time=3.41 ms
...


# traceroute 168.95.1.1      //了解伺服器目的主機之間,經過所有節點的連線狀態
traceroute to 168.95.1.1 (168.95.1.1), 30 hops max, 60 byte packets
 1  163.16.63.254 (163.16.63.254)  0.352 ms  0.430 ms  0.376 ms
 2  10.163.17.125 (10.163.17.125)  1.519 ms  1.479 ms  1.404 ms
...


# netstat                           //主機上所有網路連接資訊
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0     52 163.16.63.191:ssh       163.16.63.190:59969     ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  5      [ ]         DGRAM                    8962     /run/systemd/journal/socket
unix  10     [ ]         DGRAM                    8964     /dev/log
...

//-n 不使用名稱改用埠號顯示 
   -t  只列出TCP協定封包的連線資訊
   -u 只列出UDP協定封包的連線資訊
   -l  只列出正在傾聽的連線資訊
   -p  列出連線是由哪個行程處理的








2017年4月16日 星期日

Ch11 常用工具指令


//目錄空間使用量
# du /var

# du -sh /var      //-s 顯示目錄總用量,不顯示子目錄,-h 以磁碟單位顯示,MB、GB
100M    /var


# df
檔案系統                 1K-區段           已用       可用           已用%   掛載點
/dev/mapper/centos-root 18307072  944900   17362172    6%           /
devtmpfs                         923900      0             923900        0%           /dev
....


# df -h
檔案系統                          容量     已用      可用    已用%   掛載點
/dev/mapper/centos-root   18G      923M     17G     6%          /
devtmpfs                           903M    0            903M   0%         /dev



# wc anaconda-ks.cfg              //統計檔案行數、字數、大小 byte
  39   96 1035 anaconda-ks.cfg



# echo "ABCDEFG" | tr ABC xyx      //取代
xyxDEFG

# echo "ABCDEFG" | tr -d 'AB'         //-d 刪除
CDEFG



# ping 168.95.1.1      //送出ICMP通訊協定的ECHO_REQUEST封包至特定主機
PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data.
64 bytes from 168.95.1.1: icmp_seq=1 ttl=247 time=2.69 ms
...


# yum install traceroute
# traceroute 168.95.1.1      //列出ICMP封包從本機到目的主機,經過的路由器IP


# yum install net-tools      // ifconfig、netstat


# yum install bind-utils     //nslookup、dig
# nslookup 168.95.1.1

# dig 168.95.1.1


# hostname
F303.centos

# cat /etc/hostname
F303.centos






2017年4月13日 星期四

ch9 系統管理工具

FirewallD

//FirewallD動態設定防火牆,不須重啟即可套用,亦提供多個zone供選擇設定,對於經常更換使用地點的筆記型電腦更加方便。
zone可針對主機位於什麼環境而建立防火牆的處理原則。

# firewall-cmd --state   //目前是否執行中

running

# firewall-cmd --get-active-zone   //列出目前已設定的 zone
public zone
  interfaces: eno16777736

# firewall-cmd --zone=public --list-all   //列出zone的某一個網路介面,詳細設定
public (default, active)
  interfaces: eno16777736
  sources:
  services: dhcpv6-client ssh                   //允許的服務、埠號
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

# firewall-cmd --get-zones                                                     //列出所有可選擇的zone,分別代表
block dmz drop external home internal public trusted work //不同地點的防火牆設定原則。

public:公開的場所,不信任網域內所有連線,只有被允許的連線才能進入,一般只要設定這裡就可以了
external:公開的場所,應用在IP是NAT的網路
dmz:(DemilitarizedZone)非軍事區,允許對外連線,內部網路只有允許的才可以連線進來
work:公司、工作的環境,只有被允許的連線才能進入
home:家庭環境,只有被允許的連線才能進入
internal:內部網路,應用在NAT設定時的對內網路,只有被允許的連線才能進入
trusted:接受所有的連線
drop:任何進入incoming的封包全部丟棄,只有往外outgoing的連線是允許的
block:任何進入的封包全部拒絕,並以icmp回覆對方,只有往外的連線是允許的

# firewall-cmd --permanent --zone=home --change-interface=eno1677736   //--permanent所作變更
success                                                                       //寫入設定檔,否則重啟FirewallD後即無效。


# firewall-cmd --reload
success

# firewall-cmd --get-active-zone
home
  interfaces: eno1677736
public
  interfaces: eno16777736

----------------------------------------service and port
//service在FirewallD中代表一個或多個port所組成的一個服務名稱
# firewall-cmd --get-services   //列出所有可使用的service
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https


# ls /usr/lib/firewalld/services   //這些service定義檔所在目錄
amanda-client.xml        iscsi-target.xml  pop3s.xml  dns.xml ....


# cat /usr/lib/firewalld/services/dns.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>DNS</short>
  <description>The Domain Name System (DNS) is used to provide and request host and domain names. Enable this option, if you plan to provide a domain name service (e.g. with bind).</description>
  <port protocol="tcp" port="53"/>                      //dns service包含2個協定或port
  <port protocol="udp" port="53"/>
</service>


# firewall-cmd --zone=public --add-service=dns   //加入service
success


# firewall-cmd --zone=public --add-port=9958/tcp   //加入port
success


[root@F303 ~]# firewall-cmd --zone=public --list-all
public (default, active)
  interfaces: eno16777736
  sources:
  services: dhcpv6-client dns ssh
  ports: 9958/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:



---------------------------------壓縮檔案-備份

# ls
anaconda-ks.cfg  testfile
# gzip testfile      //壓縮
# ls
anaconda-ks.cfg  testfile.gz      //原檔會被壓縮檔取代

# gunzip testfile.gz      //解壓縮

# ls
anaconda-ks.cfg  testfile


# ls
anaconda-ks.cfg  f1  f2  f3
# tar -czvf f.tar.gz f*      //c:產生包裹檔  z:壓縮功能zip v:觀看指令進度 f:指定目的檔名
f1
f2
f3
# ls
anaconda-ks.cfg  f1  f2  f3  f.tar.gz

# tar -xzvf f.tar.gz      //x:解開包裹檔



---------------------------------設定系統時間

Linux時間分為
1.硬體時間:CMOS負責
2.系統時間:作業系統負責。開機時,系統時間讀取硬體時間後,便由作業系統管理。


# yum install ntp
# ntpdate watch.stdtime.gov.tw      //連接至NTP伺服器校時
14 Apr 10:57:54 ntpdate[18262]: no server suitable for synchronization found
# hwclock -w      //系統時間寫入硬體時間
# hwclock -r      
西元2017年04月14日 (週五) 11時00分53秒  -0.401824 秒



---------------------------------系統排程工作

Linux預設會啟動crond服務,持續檢視系統的排程工作與時間。

# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |    .------------- hour (0 - 23)
# |    |   .---------- day of month (1 - 31)
# |    |   |   .------- month (1 - 12) OR jan,feb,mar,apr ...
# |    |   |   |   .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |    |   |   |   |
# *  *  *  *  * user-name  command to be executed
 29  9 15 8  *      //8月15日早上9點29分
  0 17 10 *  *      //每月10日下午5時
  0   4   * *  6      //每周六早上4時