###### tags: `選修`
# Linux系統管理與架設
## 一、認識Linux
1. ### Linux是什麼?
- [Linux是什麼?從網站開發到物聯網無所不在的OS作業系統介紹。](https://progressbar.tw/posts/113)
2. ### Linux的由來
- [認識 Linux](http://wanggen.myweb.hinet.net/ch1/ch1.html)
3. ### Linux核心
- 查詢核心版本:uname -a (uname -r)
4. ### Linux的發行版
- [認識 Linux 發行版 ](http://wanggen.myweb.hinet.net/ch2/ch2.html)
- 查詢發行版本:cat /etc/redhat-release
## 二、安裝Linux
1. ### 安裝 VirtualBox 及建立虛擬機器
- [VirtualBox 5.0 虛擬機-安裝教學](http://blog.aidec.tw/post/VirtualBox-5.0-install-setting-tutorial)
2. ### VirtualBox安裝Linux作業系統(CentOS)及VirtualBox Extension Pack
- [How to Install CentOS 7.2 + VBox Guest Additions on VirtualBox](https://www.youtube.com/watch?v=IIKmTSuP15M)
- [VirtualBox安裝Linux作業系統(CentOS)](http://blog.aidec.tw/post/virtualbox-install-linux-centos)
- 主機名稱:CentOS7。root(toor)。joe(eoj)。
3. ### 如果採最小安裝,事後要裝視窗介面
``` javascript
yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
systemctl set-default graphical.target
reboot
```
4. ### 簡易系統設定
- 中文輸入法:應用程式 / 系統工具 / 設定值 / 地區和語言 / 輸入來源 / + / ┇ /漢語(台灣) / 漢語(Chewing) /加入
- 螢幕保護程式:應用程式 / 系統工具 / 設定值 / 硬體 / 電源 / 節省電源 / 螢幕轉黑
5. ### 無縫模式
``` javascript
su
yum update
reboot
yum install kernel-devel kernel-devel-$(uname -r) gcc
裝置 / 插入GuessAdditions CD映像 / 執行
```
## 三、文字界面(Command-Line Interface,CLI)/圖形界面(GUI)
1. ### CentOS預設提供六個Terminal讓使用者登入
- 切換方式Ctrl + Alt + F1~F6
2. ### shell(殼):和核心溝通的介面
- CentOS文字界面的shell:bash(Bourne-Again shell)
- 查詢有那些shell 可用:chsh -l
- 顯示目前使用的shell:echo $SHELL
3. ### bash登入後提示符號的意義
- [joe@CentOS7 ~]\$:[登入者帳號@主機名稱 目錄的位置]提示符號
- root 登入後,提示符會由「$」變成「#」,以提醒操作者。
4. ### Linux指令基本格式
- 指令 [-短選項] [--長選項] [參數]
* ls –la /home
5. ### 常用文字介面的控制鍵
- 切換終端機:Ctrl + Alt + F1~F6
* 顯示目前登入使用者相關資訊:w
- 叫出曾經輸入過的指令:方向鍵『上、下』
- 指令回顧:history (指令左測數字為指令編號)
* 指定指令編號:! 指令編號
- 上下移動螢幕畫面:Shift + PageUp、PageDown
- 中斷運作中的指令:Ctrl + c
* seq 1 10000
- 補全(補齊指令或檔名):Tab
* 如果有多種可能時不會補全,再按一次Tab會列出所有符合的狀況。
* hi + Tab v.s. h + Tab + Tab
* ls /etc/hosts.a + Tab
- 刪除整行:Ctrl + u
- 清除游標之上的螢幕:Ctrl + l
- 清除螢幕:clear
- EX:
``` javascript
cat /sbin/reboot
alias cls='clear'
```
6. ### 輔助說明文件
- man 指令(操作同less):man ls
- info 指令:linux才有,可讀性較佳,但不是所有指令都有。
- 指令自帶說明:指令 --help
7. ### 轉換用戶身份:su
- 切換身份為系統管理員(root):su –
- 登出恢復原登入者:exit
8. ### 不需要 root 的密碼,卻可執行 root 的工具:sudo
- 執行 sudo 時,系統會去 /etc/sudoers 判斷該使用者是否有執行 sudo 的權限。若使用者具有可執行 sudo 的權限,便讓使用者『輸入自己的密碼』來確認。
* sudo halt
9. ### 登出:logout
- 退出目前shell:exit
10. ### 重開機:reboot
11. ### 關機:poweroff(halt)
## 四、Linux檔案系統
1. ### [Linux 檔案管理初探](http://linux.vbird.org/linux_basic_train/unit02.php)
- 顯示磁碟與目錄樹的搭配:df
2. ### 目錄與路徑
- 顯示目前工作目錄:pwd
- 變換目錄:cd
* 回上一層:cd ..
* 回到自己家目錄:cd ~
- 建立一個新的目錄:mkdir
- 刪除一個空的目錄:rmdir
- EX:
``` javascript
cd /home/joe # 絕對路徑,由根目錄 / 寫起
mkdir music
cd music
mkdir jazz
mkdir pop
cd jazz
cd ../pop # 相對路徑(相對於目前工作目錄的路徑),切換到上一層的music目錄下的pop
cd ~
rmdir music # 目錄不是空的無法刪除
```
3. ### 檔案基本操作
- 印出目前目錄的檔案:ls
* 顯示冗長檔案內容(權限、使用者、群組、大小、時間…):ll(ls –l、alias)
* 顯示隱藏檔:ls –a
* 只顯示目錄:ls –d */ (目錄的正確寫法為「目錄名/」,只是預設省略)
- 複製檔案或目錄:cp
- 移除檔案或目錄:rm
- 移動檔案或目錄,或更名:mv
4. ### 萬用字元
- 0~∞個任意字元:*
- 任意單一字元:?
5. ### 顯示檔案內容
- 由第一行開始顯示檔案內容:cat (顯示行號:cat –n)
- 一頁一頁翻動(已過的畫面無法往前翻頁):more
* 下一頁:空白鍵
* 結束:q
- 可前後翻頁:less
* 詢關鍵字:/ (n找下一個)
- EX:
``` javascript
more /etc/services
less /etc/services
使用「/」找http
```
6. ### 資料流重導向(redirection)
- 輸出重導向:>(取代)、>>(累加)
- 輸入重導向:<
7. ### EX:綜合練習3、4、5、6指令
``` javascript
cd ~
ls
ls > list
cat list
ll >> list
ls –la ≫ list
more list、less list
mv list list_pop
cp list_pop list_jazz
ls list*
mv list_jazz music/jazz
rm list_pop
rm –r music #危險 !!!
```
8. ### 管線(pipeline)
- 「|」管線,將前一個指令的輸出,交由後面的指令來處理。
* ll /etc | more
* cat –n /etc/services | less
- 管線命令搭配 grep 取得所要的資訊。
* ll /etc | grep ‘passwd’
9. ### 符號連結(捷徑)
- ln [-s] 來源檔 目標檔
* ln –s /etc/crontab test
10. ### 檔案搜尋
- 尋找執行檔:which
- 由一些特定的目錄中尋找檔案檔名:whereis(了解查詢的目錄:whereis –l)
- 由已建立的資料庫 /var/lib/mlocate 裡面的資料搜尋關鍵字:locate
- EX:
``` javascript
which passwd
whereis passwd
locate passwd
```
## 五、帳號/群組管理
1. ### 帳號相關設定檔
- /etc/passwd
- /etc/shadow
- EX:
``` javascript
less /etc/passwd
less /etc/shadow
```
2. ### 圖形介面新增使用者
- 應用程式 / 系統工具 / 設定值 / 詳細資料 / 使用者 / 解除鎖定 / 加入使用者 / 帳號類型(標準、管理員) / 輸入全名(mike) / 加入 / 重新登入設定密碼
- 若選擇管理員,此帳號會被加入wheel群組。
* less /etc/group
4. ### 帳號管理相關指令
- 變更密碼:passwd
- 新增帳號:useradd 帳號
- 刪除帳號:userdel 帳號
- 新增群組:groupadd 群組名
- 刪除群組:groupdel 群組名
## 六、檔案擁有者和權限
1. ### 檔案的擁有者類別可分為擁有者(owner)、群組(group)、其它人(others)
2. ### ll顯示檔案詳細資訊後,第一個字元為『-、d、l』
- -:代表後面的檔名為一般檔案
- d:代表後面的檔名為目錄檔
- l:代表後面的檔名為連結檔 (類似windows的捷徑)
3. ### 第2~9個元為『rw-rw-r--』、『rwxr-xr-x』
- r:read,可讀
- w: write,可寫入/修改
- x: eXecutable,可執行
- 三個一組,分別表示owner/group/others的權限。
- EX:
``` javascript
ll /etc/shadow(只有root不受權限限制可存取)
cd /home/mike (Permission denied)
joe登入su mike
```
4. ### 變更檔案權限chmod
- 只有該檔案擁有者和root有權改變權限。
- 把owner/group/others各自的三個權限相對應的數字相加。r(4)、w(2)、x(1)。
* 例如若要將權限改為「rwxr-----」,owner(rwx)=4+2+1=7,group(r--)=4+0+0=4,others(---)=0+0+0=0,故指令為chmod 740 test
5. ### 改變檔案擁有者、所屬群組
- 改變擁有者:chown 帳號名稱 檔案或目錄
- 改變群組:chgrp 群組名稱檔案或目錄
6. ### EX:綜合練習3、4、5指令
``` javascript
su - → cd /home → echo “hello” > test → exit
ll → more test → rm test (Permission denied)
su - → chmod 777 test → exit
vi test
su - → chmod 664 test → chown joe test → chgrp wheel test → exit
vi test
su mike → vi test
```
## 七、文書編輯器:vi
1. ### vi改良版vim
- 把常用的別名寫到家目錄的「.bashrc」
- alias vi=’vim’
2. ### 一般模式、編輯模式、指令模式

## 八、Linux系統基本設定及操作
1. ### 網路設定
- GUI介面:應用程式 / 系統工具 / 設定值 / 硬體 / 網路
- CentOS7預設網路管理工具NewworkManager
* 顯示網路介面:ip link show
* 顯示所有連線:nmcli connection show (連線代號eth0)
* 刪除連線:nmcli connection delete eth0
* 建立連線:nmcli connection add con-name eth0 ifname eth0 type ethernet
* 設定固定IP:nmcli connection modify eth0 \\
connection.autoconnect yes \\
ipv4.method manual \\
ipv4.addresses 163.27.3.181/28 \\
ipv4.gatway 163.27.3.190 \\
ipv4.dns 163.27.3.1
* 啟動連線:nmcli connection up eth0
* 查看ip:ip addr show(ifconfig)
* 查看Routing table:ip route show (ip route show | column -t)
* 查看DNS:cat /etc/resolv.conf
2. ### 簡易防火牆管理
- 顯示目前設定:firewall-cmd --list-all
- 暫時開啟服務:firewall-cmd --add-service=http
- 永久開啟服務:firewall-cmd --add-service=http --permanent
- 永久移除服務:firewall-cmd --zone=public --remove-service=http --permanent
- 限制某服務只能從那些IP連入:firewall-cmd --add-rich-rule="rule family="ipv4" source address="192.168.8.100(或192.168.8.0/24)" service name="ssh" accept"
- 重新讀取設定檔:firewall-cmd --reload
3. ### 軟體管理及線上安裝(CentOS)
- [軟體管理與安裝及登錄檔初探](http://linux.vbird.org/linux_basic_train/unit12.php)
- 查詢已安裝軟體:rpm –qa、rpm –qa |grep yum
- 查詢某安裝軟體:rpm –q finger(yum)
- 更新所有已安裝的套件yum –y update
- 安裝套件:yum install httpd、yum install httpd*(所有相關的一起安裝)
- 移除套件:yum remove httpd*
4. ### 工作排程
- 顯示已排程的工作:crontab -l
- 編輯要排程的工作:crontab -e
* 設定方式:分(0-59) 時(0-23) 日(1-31) 月(1-12) 週(0-7) 指令
* 「*」表任何時間。「,」表分隔時段
* EX:
``` javascript
0 0,6 * * * ntpdate tw.pool.ntp.org #每日零點、六點較時一次
0 3 * * * yum -y update > /dev/null #每日三點更新
```
5. ### 簡易登入檔說明
- 記錄系統錯誤訊息:/var/log/messages
- 記錄需要帳號、密碼的登入訊息:/var/log /secure
6. ### 程序處理
- 程序和效能監控:top
- 顯示程序:ps aux
- 中止程式執行:kill PID (強制終止:kill -9 PID)
- EX:
``` javascript
su -
ps aux(查詢su –的PID)
kill -9 PID
```
## 九、CentOS安裝LAMP(Apache+MariaDB+PHP7)
1. ### 參考網站
- [VirtualBox在CentOS7下安裝LAMP(Apache+PHP7+MariaDB )](http://blog.aidec.tw/post/virtualbox-install-lamp-with-centos-php7-mariadb)
2. ### 更新已安裝套件
- yum update
3. ### Apache
- 安裝Apache:yum install httpd
- 啟動Apache:systemctl start httpd.service
- 開機自動啟動Apache:systemctl enable httpd.service
- 查看Apache的狀態:systemctl status httpd.service
- 允許防火牆讓http、https封包通過:
* firewall-cmd --add-service=http --permanent
* firewall-cmd --add-service=https --permanent
* firewall-cmd --reload
- 讓.htaccess可以生效:
* vi /etc/httpd/conf/httpd.conf
* <Directory “/var/www/html”>
AllowOverride All #None改為All
</Directory>
- 重新啟動:systemctl restart httpd.service
- EX:應用程式 / 喜好 / Firefox網頁瀏覽器 / URL:localhost
4. ### MariaDB
- 安裝MariaDB:yum install mariadb-srver mariadb
- 啟動MariaDB:systemctl start mariadb
- 開機自動啟動MariaDB:systemctl enable mariadb.service
- 初始化MariaDB(設定安全程序):mysql_secure_installation
* Enter current password for root (enter for none): → Enter
* Set root password? [Y/n] → Y
* New password:mariadbpassword
* Remove anonymous users? [Y/n] → Y
* Disallow root login remotely? [Y/n] → Y
* Remove test database and acces to it? [Y/n] → Y
* Reload privilege tables now? [Y/n] → Y
- EX:試著連線MariaDB Server:mysql –u root -p
5. ### PHP7
- 安裝EPEL(Extra Packages for Enterprise Linux企業級Linux額外高品質套件)
* yum install epel-release
* rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
- 安裝PHP7:yum install php70w
- 測試PHP:php -v
- 安裝常用PHP擴充模組:
yum install php70w-xml php70w-soap php70w-xmlrpc
yum install php70w-mbstring php70w-json php70w-gd php70w-mcrypt
yum install php70-php-mysqlnd
- 查看目前可用的擴充模組:yum search php70
6. ### IP修改
- [Windows 連線至 VirtualBox 內的虛擬機器(Virtual Machine)](https://myapollo.com.tw/2016/12/06/virtualbox-port-forwarding/)
- 在Windows的命令列輸入ipconfig,於乙太網路卡VirtualBox Host-Only Network裏,查詢VirtualBox的虛擬網卡IP為192.168.56.1
- 查詢CentOS ip:ip addr show(visualbox網路是用預設nat,內部ip為10.0.2.15)
- VirtualBox / CentOS / 設定值 / 網路 / 進階 / 連接埠轉送 / + /
* Rule1:主機 IP(192.168.56.1) 主機連接埠(22) 客體IP(10.0.2.15 22) 客體連接埠(22)
* Rule1:主機 IP(192.168.56.1) 主機連接埠(80) 客體IP(10.0.2.15 22) 客體連接埠(80)
- EX:
* 在Windows以PuTTY連線至VirtualBox虛擬主機
* 在Windows Chrome的網址列輸入192.168.56.1
7. ### 安裝phpMyAdmin(MySQL管理工具)
- yum install phpMyAdmin
- EX:http://192.168.56.1/phpMyAdmin
* 無法連線,phpMyAdmin預設只允許本地localhost登入
- vi /etc/httpd/conf.d/phpMyAdmin.conf
* Require ip 127.0.0.1 和 Require ip ::1前加上「#」
* 在上兩行之後加上Require all granted
- 重新啟動Apache載入設定值:systemctl restart httpd.service
- EX:http://192.168.56.1/phpMyAdmin
8. ### 測試
- cd /var/www/html
- vi test.php
``` javascript
<?php
echo 'hello ';
echo 'your ip:'.$_SERVER["REMOTE_ADDR"];
phpinfo();
?>
```
- http:// 192.168.56.1/test.php
## 十、安裝Wordpress建立網站
1. ### 參考網站
- [[CentOS 7] 自己的部落格自己架,讓 Wordpress 幫你架好架滿](http://blog.itist.tw/2016/01/install-wordpress-on-centos-7-with-lemp-stack.html)
2. ### 下載Wordpress主程式
- 至Wordpress官網(https://tw.wordpress.org/)查詢正體中文版主程式路徑
- wget https://w.wordpress.org/latest-zh_TW.zip
3. ### 解壓縮
- unzip latest-zh_TW.zip -d /var/www/html
4. ### 調整Wordpress擁有者及群組
- cd /var/www/html
- chown -R apache:apache wordpress
5. ### EX:http://192.168.56.1/wordpress
6. ### 建立Wordpress資料庫
- 連線資料庫:mysql –u root –p
- 顯示已建立的資料庫:show databases;
- 建立專用資料庫:create database wordpress;
- 建立Wordpress專用帳號
* create user 'wpadmin'@'localhost' identified by 'wppassword';
* select Host,User from mysql.user;
- 讓專用帳號有完整存取wordpress資料庫的權限
* grant all on wordpress.* to 'wpadmin'@'localhost';
* 重新載入權限:flush privileges;
- 測試專用帳號登入
* mysql –u wpadmin –p
* show databases;
7. ### 安裝Wordpress(產生wp-config.php)
- http://192.168.56.1/wordpress
- 資料庫連線設定
* 資料庫名稱:wordpress
* 使用者名稱:wpadmin
* 密碼:wppassword
- 如果出現「無法寫入 wp-config.php 檔案」的錯誤訊息,需自己手動建立。
* vi /var/www/html/wordpress/wp-config.php
* 貼上系統提供的設定值文字內容
* chown apache:apache /var/www/html/wordpress/wp-config.php
- 開始安裝 → 輸入blog的基本資料 → 安裝WordPress
- 登入phpMyAdmin查看建立的資料表
8. ### 開始使用
- http://192.168.56.1/wordpress