###### 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. ### 一般模式、編輯模式、指令模式 ![](https://i.imgur.com/7UEXcpO.png =350x) ## 八、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