2015年7月30日 星期四

0730-RHEL7上課筆記(破解root密碼)

※ 課前準備: VirtualBox 5.0且需設置好RHEL7之虛擬機
※ 上課重點: Forgotten root password

一、更改密碼

當登入時忘記密碼,以下為各種狀況和解法:

1. BIOS密碼 →  拔掉電池,還原設定
2. 開機選單鎖住時→  可以用 DVD/USB 開機,將 grub.conf 修改
3. 改 root 密碼(開機選單解)
|
|→ 按"e"
|

|
|→ 找到"linux16..." (原kernel),在最後增加下列指令皆可:
|      1. rd.break
|      2. init=/bin/bash
|→ mount -o remount,rw /sysroot (開機根目錄改到 sysroot)
|→ chroot /sysroot
|→ passwd root
|→ touch  /.autorelabel     ← 讓 .autorelabel  的時間改變(會牽扯到 selinux )
|→ exit
|→ exit (reboot)
|→ 用 root 登入系統

Reference:http://technote.aven-network.com/854/rhel7-centos7-reset-root-password



二、增加擴充功能

1. 關機
2. 下載 VirtualBox 功能 Extension Pack (網址:https://www.virtualbox.org/wiki/Downloads)
3. 載入 Extension Pack
|    檔案 → 喜好設定 → 擴充功能 → 加入 Extension Pack
4. 設定網路及USB
|
|→ 設定值
|→ 網路
|      → 介面卡1 改成 "橋接"
|      → 選擇實體網路卡
|
|→ USB
|      → 啟用打勾
|      → USB3.0
|      → 增加要掛載的隨身碟


三、建立軟體倉儲

1. 開機
2. 加入光碟機,並手動掛載 ISO檔
|   裝置 → 光碟機 → 選擇 "rhel-server-7.0-x86_64-dvd.iso"
3. 用檔案管理員方式開啟 ISO檔,並安裝 vsftp

    ~#  cd  /run/media/aaron/RHEL-7.0\ Server.x86_64/
    ~#  cd  Packages
    ~#  yum  install  -y  vsftpd-3.0.2-9.el7.x86_64.rpm

4. ~#  cp  *   -rf    /var/ftp/pub
5. ~#  createrepo  -g  /var/ftp/pub/repodate/76...-comps-Server.x86_64.xml   /var/ftp/pub/


四、手動設定 IP

1. 將網路開啟
| →網路設定值
|      →wired → 開啟
|           → 設定
|           → iPv4 → DHCP 改為 手動
|                  → Address
|                  → Netmask
|                  → Gateway
|                  → DNS
設定完儲存離開

在 Ping  168.95.1.1  or  8.8.8.8













  


2015年7月28日 星期二

0728-RHEL7_課前準備


一、事前準備

※ 建立Google Blogger
※ 將筆記寫在Blogger上

1.Blogger 加入關鍵字的方法
  http://blog.xuite.net/wucaiyou/527travel/54048108-在blog放入關鍵字的方法

2.Putty
  http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

3.VirtualBox
https://www.virtualbox.org

4.NotePad++
https://notepad-plus-plus.org/download/v6.8.html


二、操作過程

1. 安裝VirtualBox

2. 建立一個虛擬RedHat環境

2.1 建立一個虛擬RHEL7系統
|
|→ 2.1.1 建立RHEL7
|→ 2.1.2 RAM:1500MB(這邊是以上課的環境而去設置)
|→ 2.1.3 建立一個新磁區
|→ 2.1.4 選擇VDI
|→ 2.1.5 再來選擇"動態配置" (此配置為會慢慢增加磁區)
|→ 2.1.6 建立45G,主要是把RHEL7光碟ISO放進去(這邊是依我自己的隨身碟來配置),並記得                存放位置

2.2 設定值
|
|→ 2.2.1 系統配置
|     →2.2.1.1 開機順序
|         將軟碟機取消,把光碟機和硬碟往上移
|     →2.2.1.2 處理器
|         設定為2顆
|     →2.2.1.3 加速器
|         硬碟虛擬化打開
|         啟用VT-x/AMD-V
|         啟用Nested Paging
|→ 2.2.2 顯示器
|     →2.2.2.1 Screen
|         將視訊記憶體設定到32MB
|     → 2.2.2.2 遠端顯示
|         none
|     → 2.2.2.3 視訊擷取
|         none
|→ 2.2.3 存放裝置
|         控制器IDE→選擇"rhel-server-7.0-x86_64-dvd.iso"來做開機
|→ 2.2.4 網路
|     → 2.2.4.1 網路介面卡1
|          預設NAT

3. 啟動虛擬機
|
|→ 3.1 選擇install
|→ 3.2 選擇"含有GUI的伺服器"
|           選取→ 虛擬化客戶端
|                   → 虛擬化Hypervisor
|                   → 虛擬化工具

|→ 3.3 安裝
|     →3.3.1 安裝目的
|                 → 選擇將配置分頁(分割區);完成
|                 → 將預設"LVM"改為"標準分割"
|                 → 按左下角"+"設定分割區(以自己硬碟大小為主)
|                      → "/boot" ,1024MB
|                      → 標籤 boot
|    
|                      → "swap" ,4096MB
|                      → 標籤swap
|
|                      → "/" ,全部容量
|                      → 標籤root
|
|     → 3.3.2 安裝系統
|                 → 設定 → root password → 新增帳戶(先不用)
|     → 3.3.3 安裝結束後重新開機














2015年7月26日 星期日

JAVA SL-110_07/26

label 標籤
代表的是迴圈的標示記號,可利用 label 指向相對應的迴圈。

1. label_name:迴圈敘述
2. label_name:迴圈敘述

Outerloop:label_name
for(;;){
        Innerloop:label_name
        for(;;){
                break Innerloop;
                ...
                continue Innerloop;
                ...
                break Outerloop;
                ...
                continue Outerloop;
        }
{

################################################################
for 和 ( , )
判斷下列能否執行:

1. for(int i=0, j=0 ; ; )               //可以

2. for(int i=0, int j=0 ; ; )           //錯誤,若多種型態要在外部宣告

3. for(int i=0, long j=0 ; ; )          //錯誤,同 2.

4. int i=0;                             //可以
   long j=0;
   for(i=0, j=0 ; ;)

5. int i=0;                             //錯誤, long 同樣要在外部宣告
   for(i=0, long j=0 ; ;)

6. String s=null;                       //可以
   int i=0;
   for(i=1,s=a ; ;)
################################################################
無窮迴圈:
while(true)             java 不可以用 1,要用 true

for(;;)                 直接不要打。
################################################################
for_each
(for/in)簡化存取集合體物件元素,
例如 Array 或集合,其特性是在執行的過程會自動往下找直到全部擷取完畢。

for(資料型態 變數名稱:母體集合){
        程式敘述
}
################################################################
陣列一經宣告就不能更改 length。

int score={98, 56, 63};
int score1=score;               //這是錯誤的陣列複製方法,應該用 arraycopy 等其>他方式。
################################################################
// 可以使用 for 迴圈做陣列複製
public class test0726_4{
 public static void main(String avgs[]){
        int[] score1 = {88, 81, 76, 68};
        int[] score2 = new int [score1.length];

        for(int i=0; i<score1.length; i++)
                score2[i] = score1[i];

        for(int j:score2)
                System.out.println(j);
 }
}

################################################################
// 也使用 Arrays.copyOf 來達到陣列複製
import java.util.Arrays;
//import java.util.*;

public class test0726_5{
 public static void main(String avgs[]){
        int[] score1 = {88, 81, 76, 68};
        int[] score2 = Arrays.copyOf(score1, score1.length);

        for(int s:score2)
                System.out.printf("%3d", s);

        System.out.println();
        score2[0]=99;

        for(int s:score2)
                System.out.printf("%3d", s);
        // %s:字串, %d:整數, %f:浮點數, %c:字元, %n:換行
        // %3d:印出三位整數,不足自動補空格
 }
}

################################################################
public class MyClass{
        int i = 10;
        static int k = 100;
        void aMethod(String s){
                int j = 20;
                static String s = "a";  //錯誤,在 Method 不可以有 static 變數。
        }       //在方法裡面,不可以再宣告方法。
}
################################################################
// 建立物件實體
1. 建立類別變數
        。用 new 建立類別實體









//物件變數抓取屬性、方法
1. 類別變數.屬性;
2. 類別變數.方法();
################################################################

################################################################
// Constructer 建構子
程式在執行時,第一個執行的函式就是建構子。

//語法:
存取權限 類別名稱(參數列){

}

// *
// 1. 建構子沒有回傳值
// 2. 建構子的名稱必須和類別名稱相同

// 預設建構子
當程式中沒有自行定義的建構子時,編譯時會自動加上預設建構子。

// *
// 1. new 一個實體時會自動執行
// 2. 預設建構子沒有參數列
// 3. 程式中只會有一個預設建構子
################################################################
// 大資料數據,使用 BigDecimal -> java.math.BigDecimal;
import java.math.BigDecimal;

public class test0726_11{
 public static void main(String avgs[]){
        BigDecimal a = new BigDecimal("0.1");
        BigDecimal b = new BigDecimal("0.1");
        BigDecimal c = a;
        System.out.println(a==b);
        System.out.println(a==c);
        System.out.println(a.equals(b));
 }
}

//輸出:
//false         //雖同值,但不同位址,判斷為不同之參考。
//true          //經 = ,兩者變為同一參考位址。
//true          //純粹比對兩者的值,都是 0.1 故 true。

// 補充
字串比對: == 、equals
字元比對:只能用 ==

// 差異:
== 去比對它的參考位址。
= 直接去改變參考。
equals 去比對它的值。
################################################################
// 繼承
是指物件的資源可以延伸和重複使用,
在 Java 利用 extends 這個關鍵字來表達類別的繼承關係,也就是 is-a 的概念。

子類別名稱 + extends + 父類別名稱















################################################################
// this 和 super

// this
是指參考到目前作用中物件的特性、方法、建構子。

//super
是指可以參考到父物件的方法、屬性、建構子。
################################################################
// super 練習

class Father{
        Father(String s){
                System.out.println("A");
                System.out.println(s);
        }
}

class Son extends Father{
        Son(){
                super("C");
                System.out.println("B");
        }
}

public class Extends2{
 public static void main(String avgs[]){
        Son s = new Son();
 }
}
################################################################
// spuer and this 練習

class Father{
        Father(char c){                         //第四步驟,接收到 'A'
                System.out.println(c);          //第五步驟,印出 'A'
        }
}

class Son extends Father{
        Son(){
                this('A');                      //第一步驟,丟出 'A' 到 Son(char c)
                System.out.println("B");        //第六步驟,印出 'B'
        }
        Son(char c){                            //第二步驟,接收 this 傳來的值 'A'
                super(c);                       //第三步驟,回傳值到 Father
        }
}

public class Extends3{
 public static void main(String avgs[]){
        Son s = new Son();                      //第○步驟,建構子 Son(){...}
 }
}
################################################################

2015年7月19日 星期日

JAVA SL-110_07/19

Java SL-110 2015/07/19
##########################################################################
JAVA 構成的要件分為幾項:屬性、方法、類別、建構子。
以下列程式為例:

public class Puggy{                     //類別
        String name = "小黑";           //物件變數
        static String type = "拉布拉多";//類別變數

        void skill(){                   //物件方法
                String s1 = "拿報紙";   //區域變數
                System.out.println(s1);
        }

        static void skill_1(){          //類別方法
                System.out.println("拎施鞋");
        }
        Puggy()[]                       //建構子
}

##########################################################################
註解:
1. //           單行註解
2. /*.....*/    多行註解
3. /**...*/     文件註解,編譯指令:javadoc -verbose -private O.java

##########################################################################
練習『文件註解』:Puppy.java

/**這是寵物的類別*/
public class Puppy{
        /**寵物的名稱*/
        public static String name = "小黃";
        /**寵物的品種*/
        public static String type = "拉布拉多";
        /**寵物的顏色*/
        public static String color = "黃色";
        /**寵物的技能*/
        public static void skill(){
                System.out.println("拿施鞋");
        }
}

cmd:
javadoc -verbose -private Puppy.java

點開 index.html 可以看到說明文件。
##########################################################################
// package 與 import

// package 程式,路徑 C:\java\water\Fish.java
package water;
public class Fish{
        public static String name = "小金";
        public static String type = "金魚";
        public static String color = "金";
        public static void skill(){
                System.out.println("吐泡泡");
        }
}

// 主程式,路徑 C:\java\PetStore.java
public class PetStore{
        public static void main(String args[]){
                String fishname = water.Fish.name;
                String fishtype = water.Fish.type;
                String fishcolor = water.Fish.color;
                System.out.println("我有一隻優雅的" + fishtype + "牠的名字叫" + fishname + ",牠身上的顏色是:" + fishcolor + "色");
                System.out.println("每當牠生氣的時候都會");
                water.Fish.skill();
        }
}

cmd:
javac PetStore.java
java PetStore

// 猜猜哪個 import 寫法,效能較快?
// 1.
import java.io.File;
File f;
f = new File("test.txt");

// 2.
import java.io.*;
import java.awt.*;
File f;
f = new File("test.txt");

// 3.
import java.io.*;
File f;
f = new File("test.txt");

// 4.
java.io.File f;
f = new java.io.File("test.txt");

// 答:以上四種的執行效能都一樣。
// 程式撰寫優先: package > import > classpath
##########################################################################
存取修飾元:

private         同一個 class 下才可進行存取。
default         同一個 package 下的 class 才可進行存取。
protected       不同 package 可以透過繼承。
public          皆可存取。

一般類別只有 public 和 default 兩種存取權限,『內部類別』才有四種存取權限。
##########################################################################
Java 命名規則:

1. 第一個字必須是英文字母、_ 或 $。
2. Java 有大小寫之分。
3. 不可以是關鍵字。

因此推薦使用駝峰式大小寫命名,例: AppStore
##########################################################################
資料型態        bytes   bit     範圍                            預設值
char            2       16      '1u0000'~'1uFFFF'(0~65535)      '1u0000'
byte            1       8       -128~127                        0
short           2       16      -32768~32762                    0
int             4       32      -2031次方~(2031次方-1)          0

char c = '中';          //可以
char c1= '1u4E2D';      //可以 Unicode 編碼
char c2= 65;            //可以 ASCII 編碼
char c3= '\0';          //可以 \0 為空字元
byte b = 255;           //不行,超出資料範圍
short a = 'A';          //可以,會轉換成數字
int a = '爪';           //可以,會轉成 ASCII 數字
int b = '哇';           //可以,會轉成 ASCII 數字
int c = a+b;            //可以,會轉成 ASCII 數字

// Java 預設值
整數    int
浮點數  double

資料型態        bytes   bit     範圍                            預設值
long            8       64      -2063次方~(2063次方-1)          0L
float           4       32      -3.4E+38~3.4E+38                0.0f
double          8       64      -1.7E+308~1.7E+308              0.0
boolean         1       8       true/false                      false

long l = 10;            //不行,因為 long 宣告要有 L
float f = 2.5;          //不行,因為 float 宣告要有 f
double d = 2.5f         //可以,因為 dobule 的資料範圍大於 float
boolean b = 0;          //不行,Java 的布林值只有 true / false
##########################################################################
資料態的轉換:

1. 小轉大:無風險,自動轉換


2. 大轉小:風險大,手動 coding
(欲轉換的型態)變數名稱;
(float)b;

// 判斷 compile 會不會過?
int i = 1;
double d;
d = i;
i = d;
//答:i=d; 會有問題,必須改成 i = (int)d;

// 判斷 compile 會不會過?
byte b=3;
short s=5;
short c=b+s;
//答:compile 會錯,因為整數預設為 int ,
//所以整數運算 short c=b+s; 必須改為 int c=b+s;
##########################################################################
陣列:
[]      >       指的是陣列中元素的位置或陣列物件的長度

int a[]=new int[5]{1,2,3,4,5];  \\這是錯誤的,已設有初值,不能再設長度。
int a[]=new int[]{1,2,3,4,5];

int B[]=new int[5];
B[0]=3;
B[1]=2;

//陣列取長度:
陣列變數.length         //陣列取長度是一種屬性。
字串變數.length();      //字串取長度是一個方法,後面有括號。

//比較 String 與 chat

                String                  char
資料型態        參考資料型態            基本資料型態
圈住符號        " "                     ' '
比較運算        == 或 equals()          ==
抽象表現        是一個 class            16-bit unicod

補充,參考資料型態有三種:String, Array, Object.
##########################################################################
算數運算子:

+       正加            //正或負為單元運算子
-       負減
*
/
%
++
...

//---------------------------
byte x=1, y=2, z;
z = x+y;
//這是錯的,要先相加再做轉換:z=(byte)(x+y);
//---------------------------
int a=0, b=0;
b = a++ + ++a - a++;
a= 3
b= 0
//Ans:b = 0(1) + 2(2) - 2(3)
//---------------------------
int a=0, b=0;
b= a-- + --a - a--;
a= -3
b= 0
//Ans:b = 0(-1) + -2(-2) - -2(-3)
##########################################################################
關系運算子:

>
<
>=
<=
==
!=

int a=1, b=2;
a==b    False
a>b     False
a<b     Ture
a>=b    False
a<=b    Ture
##########################################################################
邏輯運算子:                    短路 short-circuit
不論是 T 或 F 都會執行
&                               && 第一組邏輯是 F 時,就跳出
|                               || 第一組邏輯是 T 時,就跳出

int a=1, b=2;
(a<b) && (a>0);         T,T     Ture
(a<b) & (a>0);          T,T     Ture
(a>b) | (a<0);          F,F     False
(a>b) || (a<0);         F,F     False
!(a>b);                    F,NOT     Ture
(b>a) | (a<0);          T       Ture    | 後面不執行
(b>a) || (a<0);         T,F     Ture
(a<b) & (a<0);          T,F     False

//---------------------------
int a=1, b=2;
if((a<b) | (++a>0))
a=2
//---------------------------
int a=1, b=2;
if((a<b) || (a++>0))
a=1
##########################################################################
指定運算子:
=
+=
-=
*=
/=
%=
&=
//---------------------------
int a=2;
a=a*2-3;
a=1
//---------------------------
int a=2;
a*=2-3;
a=-2
//---------------------------
String s1="JAVA";
String s2="SCJP";
int i=1;
int j=2;
System.out.println(i+j);        //印出 3
System.out.println(s1+j);       //印出 JAVA2
//---------------------------
String s1="420";

s1+=42;
System.out.println(s1);         //印出 42042
//---------------------------
X = 5*3 < 20 & 3+7 > 9-1 || 20 >= 20 -30 && False
       T     &    T      ||   跳出
##########################################################################
流程控制:

條件式流程控制  if-else, switch-case
迴圈式          for, while, do-while, foreach
例外控制        try-catch-finally, throws
特定控制單元    break, continue, label
label 為流程控制記號,不能改變程式執行流程的順序。

//---------------------------
//if_else

int a=1;
if(a>0)
        System.out.println("A");
//      System.out.println("B");
else
        System.out.println("C");
        System.out.println("D");

輸出:
A
D
//---------------------------
//switch case

1. case 的比對不可以重複
2. switch(x)
        x 必須是 int 以下的值域和 String (int, char, byte, short)
3. default 關鍵字可以單獨存在
4. default 只能有一個

為何需要 break?
因為 case 不能改變程式執行的流程,它只是一個記號,所以需要 break 來改變目前流程>。

語法:
switch(x){
        case 1:
        ......
        break;
        case 2:
        ......
        break;
        default:
}
//---------------------------
//for

public class Fest{
        public static void main(String avgs[]){
                for(int i=1;i<=10;i++){
                        if(i==8)
                                break;
                        if(i%3==0)
                                continue;
                        System.out.println(i);
                }
        }
}

輸出:12457

2015年7月13日 星期一

程式設計概論0705

# 二維陣列
宣告

資料型態 陣列名稱[][] = 資料型態[列的個數][行的個數];

# 對等宣告
int arr[][] = new [3][4];
int arr[][] = {{1,2,3}, {4,5,6}};

# 不對等宣告
int arr[][] = new [3][];
arr[0] = new int [4];   // 宣告 arr[0] 列,有 4 行
arr[1] = new int [3];   // 宣告 arr[1] 列,有 3 行
arr[2] = new int [4];   // 宣告 arr[2] 列,有 4 行

int arr[][] {{第 0 列初值}, {第 1 列初值}, {第 2 列初值}...{ 第 n 列初值}};

# 取得陣列的列數
陣列名稱.length();

# 取得特定列的元素個數
陣列名稱[列的索引值].length;


## 函數
把相同的程式碼撰寫在函數中,簡化程式中的程式碼達到程式模組化。

語法
public static 傳回值 方法名稱 (型態 引數, 型態 引數)