# RHCSA(ex200含試題與解答) ### 基礎Bash指令 ``` $ whoami user $ command1 ; command2 output1 output2 $ !! #執行上一個command ``` ### 硬連結 & 軟連結 * 硬連結(Hard link) Linux中每個檔案都有inode(index node),指向磁碟上的實體位置,建立硬連結即是使用相同的inode。意思表示所有建立硬連結的檔案雖然不同檔名,但是都是同一個實體位置,因此修改內容後所有檔案內容皆會修改。 ==特點== 1. 目錄無法建立硬連結 2. 需要刪除所有硬連結的檔案,檔案才會真正被刪除 3. 硬連結需建立在同一個檔案系統 ``` $ ln test2.txt test3.txt #建立硬連結 $ ls -al -rw-r-----. 2 root root 16 Dec 21 00:45 test2.txt -rw-r-----. 2 root root 16 Dec 21 00:45 test3.txt $ ls -i test2.txt test3.txt #顯示檔案的inode 54390640 test2.txt 54390640 test3.txt ``` * 軟連結(symbolic link) 如同windows系統中建立捷徑,建立新的inode指向原始檔案 1. 目錄可以使用軟連結 2. 被指向的原始檔案刪除,軟連結的檔案即無法使用 3. 可以跨檔案系統 ``` $ ln -s test2.txt test4.txt #建立軟連結 $ ls -l -rw-r-----. 2 root root 16 Dec 21 00:45 test2.txt -rw-r-----. 2 root root 16 Dec 21 00:45 test3.txt lrwxrwxrwx. 1 root root 9 Dec 21 01:18 test4.txt -> test2.txt $ ls -i test2.txt test4.txt 54390640 test2.txt 33705998 test4.txt ``` ### Linux目錄結構 ![](https://i.imgur.com/IKwuTnw.png) ``` /boot:啟動Linux所需的核心文件 /dev:從此目錄可以訪問各種系統設備 /etc:系統與應用軟體的設定檔 /home:使用者的主目錄 /root:系統管理員的主目錄 /run:紀錄系統開啟以來的訊息,系統重啟後/run底下的文件就會被清除 /bin、/sbin:系統指令所存放的目錄,為/usr/bin、/usr/sbin的連結檔。bin提供給一般使用者、sbin提供給super user /tmp:臨時存放文件使用,所有用戶都可以在此目錄存取 /usr:Unix System Resources,儲存系統核心所使用的文件 /var:存放具有變動性資料 /mnt:用於臨時掛載的目錄 /opt:大多數第三方軟體安裝位置 /proc:存在記憶體中的虛擬文件系統 ``` ### root密碼重置 ``` 1. 開機時在grub選單按e進入命令模式 2. 在Linux這行最後加上rd.break 3. 按Ctrl+x重新開機 4. $ mount -o remount,rw /sysroot 5. chroot /sysroot 6. passwd root 7. ./touch autolrelabel 8. 2次exit ``` ### SELinux [參考資料](https://jeffwen0105.com/linux-selinux/#:~:text=SELinux%20%E6%98%AF%E4%B8%80%E5%80%8BLinux%E6%A0%B8%E5%BF%83,%E5%9D%87%E5%85%A7%E5%BB%BA%E6%AD%A4%E5%8A%9F%E8%83%BD%E3%80%82) 每個程序或檔案selinux都會設有類似標籤的type,僅有擁有那個type才能進行存取服務或檔案(下圖紅框處即為type) ![](https://i.imgur.com/g7VHfKH.png) * 工作模式 ``` $ getenforce #顯示目前使用的模式 $ setenforce [0|1] #設定模式 [Permissive|Enforce] Enforcing:啟用模式 Permissive:不會限制存取,只會輸出 log 警告 disabled:禁用 ``` * 範例 ``` $ dnf install httpd $ systemctl start httpd $ firewall-cmd --add-service=http $ firewall-cmd --reload $ curl 127.0.0.1 #測試網頁是否可以存取 #http type測試 $ cp -a /etc/shadow /var/www/html/ $ chmod 777 /var/www/html/shadow #模擬當使用者不小心把全限開到最大,selinux的防護作用 $ curl 127.0.0.1/shadow <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access this resource.</p> </body></html> $ chcon -t httpd_sys_content_t /var/www/html/shadow #透過指令chcon加入httpd_sys_content_t的type $ curl 127.0.0.1/shadow #可以正常顯示內容 #變更連接port號 80->82 $ vi /etc/httpd/conf/httpd.conf ... Listen 80 #改為82 $ systemctl restart httpd #此時會出現錯誤,無法啟動httpd服務 $ semanage port -a -t http_port_t -p tcp 82 $ systemctl restart httpd $ curl 127.0.0.1 curl: (7) Failed to connect to 127.0.0.1 port 80: 連線被拒絕 $ curl 127.0.0.1:82 #82 port可以正常連線 ``` ### 管理群組 ``` $ groupadd -g <gid> group名稱 $ groupmod -g <新gid> -n <新名稱> 舊名稱 $ groupdel group名稱 ``` ``` $ usermod -g <主要group> -aG <次要group> -L user名稱 -G:usermod會將帳號從原來的群組退出,前面加-a會保留原來的群組設定 -L:鎖定使用者 -U:解鎖使用者 ``` ### 管理使用者密碼 /etc/shadow 儲存使用者帳號資訊 /etc/login.defs 密碼設定資訊 ``` 範例: user03:$6$CSsXsd3rwghsdfarf:17933:0:99999:7:2:18113: 帳號名稱:(加密後)密碼:密碼最後一次更動時間:密碼不可修改天數:密碼有效天數:密碼失效前提醒:過期容許時間 ``` ``` $ chage -m 0 -M 90 -W 7 -I 14 <使用者名稱> 修改密碼規則 -m:密碼最少要幾天後才能改 -M:密碼最多幾天後過期 -W:密碼過期前幾天會提醒 -I:密碼過期後幾天無法使用 $ chage -l <使用者名稱> 查看使用者密碼資訊 ``` ### 更改檔案權限 ``` $ chmod who/what/which 檔案名稱 who u:user g:group o:other a:all what +:add -:remove =:set exactly which r:read w:write x:execute *特殊權限 u+s(suid):讓文件在執行時具有所有者權限 例:/etc/shadow 平時檔案權限為『-r--------』,但一般使用者要修改密碼,可透過/usr/bin/passwd 修改/etc/shadow g+s(sgid):只對目錄有效,任何使用者在此目錄底下建立的檔案,所屬群組與該目錄相同 o+t(sticky):防止刪除,用於目錄 例:ls -ld /tmp rwsrw-r-- 表示設置 SUID 屬性 rwxrwsrw- 表示設置 SGID 屬性 rwxrw-rwt 表示設置 SBIT 屬性 *預設檔案權限umask 目錄權限0777,檔案權限0666 umask預設是0022 (最大權限-umask=現在權限) 在/etc/bashrc中添加umask可永久生效 在~/.bashrc中添加umask可對個別使用者生效 ``` ``` $ chown 參數 使用者:群組 folder 參數 -v 輸出執行結果 -f 不輸出任何錯誤訊息 -R 遞迴更改 ``` ### Process Process states R - runnung K、I、D、S - sleeping T - stoped Z、X - zombie ``` [ctrl]+z 將目前工作丟到背景中暫停 # jobs 列出在背景工作的狀態,包括running、stoped的程序 # fg %1 將背景[1]的工作拿到前景處理 # ps aux 查看執行中的程序 # pstree 查看程序之間的關係 ``` ### Services & Daemons systemd:管理Linux啟動程序、服務的啟動以及服務的管理 ``` service units .service:系統服務 .socket:當client連線到sockect時,systemd會啟動一個daemon,並將連線轉移過去 .path ``` ``` # systemctl list-units --type=service 列出所有type為service的units(預設為只列出active的服務,加入--all參數可顯示所有服務) # systemctl is-active <服務名稱> 檢查服務是否啟動 # systemctl is-enable <服務名稱> 檢查服務是否在開機時會自動啟動 ``` ### SSH /etc/ssh/sshd_config ssh設定檔 `修改PermitRootLogin no` ``` $ w 顯示登入中的使用者 $ ssh <主機名稱> 使用當前使用者名稱登入<某主機> $ ssh-keygen 產生公鑰、私鑰,存於~/.ssh/id_rsa、~/.ssh/id_rsa.pub -t:選擇key的加密演算法 -P:後面接舊的密碼 $ ssh-copy-id <使用者>@<主機名稱> 複製一份公鑰至連線端 ``` ### log logrotate 所有log file都儲存在/var/log資料夾中,為避免佔用太多空間,一段時間後會將log檔壓縮並以當天日期重新命名。 ``` $ journalctl 顯示所有journal的messages $ journalctl -u sshd 顯示xx服務相關的訊息 $ journalctl _PID=xx 顯示PID=xx程序的相關訊息 $ journalctl _UID=xx 顯示UID=xx使用者的相關訊息 $ journalctl --since "2022-03-11 20:30" --until "2022-03-14 10:00" 顯示"YYYY-MM-DD hh:mm:ss" 特定時間的訊息 $ vi /etc/systemd/journald.conf Storage=auto persistent:將journal儲存在/var/log/journal,即使reboot也會存在 volatile:將journal儲存在/run/log/journal,reboot後資料就不存在 auto:如果/var/log/journal資料夾存在,journal就用persistent儲存,反之用volatile儲存 none:將log drop掉 $ systemctl restart systemd-journld 重啟journald ``` ``` $ timedatectl 控制系統的時間與日期 $ timedatectl list-timezone 列出可用時區 $ timedatectl set-timezone xx 將xx地區設為時區 $ timedatectl set-ntp yes 開啟ntp校時功能 ``` ### 網路設定 ``` $ ip addr show dev <網卡名稱> 顯示xx網卡的ip $ ip link 顯示所有連線 $ ip route 顯示routing資訊 $ tracepath <主機名稱> 顯示到達網域的主機路由訊息 ``` ``` NetworkManager Service $ nmcli d 顯示網卡的狀態 $ nmcli c --active 顯示網路連線狀態 $ nmcli c show <連線名稱> 顯示連線詳細資料 $ nmcli c add con-name <連線名稱> type ethernet ifname <網卡名稱> \ ipv4.method manual ipv4.addresses x.x.x.x ipv4.dns x.x.x.x ipv4.gateway x.x.x.x ipv6.method disabled $ nmcli c modify <連線名稱> <資訊> 修改連線資料 $ nmcli c reload <連線名稱> $ nmcli c delete <連線名稱> 刪除連線 ``` 使用hostnamectl指令控制/etc/hostname裡的名稱 ``` $ hostnamectl 顯示主機資訊 $ hostnamectl set-hostname <hostname> 修改主機名稱 ``` ``` $ dig <hostname> 測試DNS的連線狀況 $ getent hosts <hostname> 查看Name Server Switch上的條目 ``` ### 壓縮與檔案傳輸 ==tar== 語法:tar <參數> <產生新檔名> <目標目錄位址> 參數 -c 建立新的archive(檔案) -v 顯示詳細過程 -z 呼叫gzip壓縮tar檔 -f 指定檔名 -t 檢視壓縮檔內容 -x 從檔案中提取(解檔時用到) --- ==SFTP(Secure File Transfer Program)== ``` $ sftp <使用者>@<遠端IP> 登入遠端主機 ///本地主機操作 lcd lls lpwd ///遠端主機操作 cd ls pwd get <檔案名稱> 下載遠端主機上的檔案 get <檔案名稱> <新檔案名稱> 下載遠端檔案,並改為新名稱 get -r <目錄名稱> 下載遠端主機上的目錄 put <檔案名稱> 上傳檔案到遠端主機 put -r <目錄名稱> 上傳目錄到遠端主機 ``` --- ==rsync== Linux上複製與備份的工具 參數 -v:輸出詳細資訊 -a:封裝備份模式,遞迴備份目錄下所有檔案、檔案擁有者、群組、權限 -z:啟用壓縮 -h:將數字以比較容易閱讀的格式輸出 ``` $ rsync <參數> <來源位置> <目的位置> 範例:rsync -avh myfile.gz /tmp/ ``` ### 安裝、更新軟體包 ``` subscription-manager subscription-manager register --username <yourusername> #使用root帳號註冊RedHat訂閱 subscription-manager list --available #列出可使用的訂閱帳戶 subscription-manager facts --list | grep version #查詢訂閱版本 /etc/pki/product #此位置的證書代表已安裝的RedHat產品 /etc/pki/consumer #此位置的證書標示已註冊的RedHat帳號 /etc/pki/entitlement #此位置的證書代表使用哪個訂閱 ``` ``` rpm #rpm安裝包資訊 rpm -q <packages> #列出安裝包的版本 rpm -qa #列出所有安裝包 rpm -qi #列出安裝包的detail information rpm -ql #列出安裝package時建立的目錄 rpm -ivh <packages> #安裝rpm package ``` ``` dnf dnf list <packages*> #列出相似名稱安裝包 dnf search <關鍵字> #列出含有關鍵字的安裝包(包括安裝包介紹部分) dnf info <packages> #顯示安裝包的訊息 dnf provides <路徑、packages> #通過路徑找到packages dnf install <packages> #安裝packages dnf update #更新dnf dnf remove #移除packages dnf repolist all #列出所有儲存庫 dnf config-manager --enable <Repositories> #啟用/停止 /etc/yum.repos.d/ 底下repo config ###Repositories 2種加入方式 1. 手動加入 在/etc/yum.repos.d/目錄底下加入xxx.repo的config檔,baseurl的value加入來源 2. 使用命令自動建立 $ dnf config-manager --add-repo "http://XXXX" 使用上述指令後會自動在/etc/yum.repos.d/目錄底下加入xxx.repo的config檔 ``` ### Linux 檔案系統 Linux 檔案系統預設為XFS,支援ext4,RHEL9之後開始也支援exFAT。 將檔案系統掛載在一個目錄底下,那個目錄稱為「mount point」 ### 使用Linux Web console 從RHEL7開始,預設安裝cockpit web console ``` $ dnf install cockpit $ systemctl enable --now cockpit $ firewall-cmd --add-service=cockpit --permanent $ firewall-cmd --reload ``` --- ### RHCSA試題 1. ![](https://i.imgur.com/Ci2beE0.png) :::spoiler 解答 ``` $ hostnamectl set-hostname primary.net1.example.com $ su - $ nmcli c add con-name enp1s0 type ethernet ifname enp1s0 \ ipv4.addresses 172.24.1.15/24 ipv4.gateway 172.24.1.254 \ ipv4.dns 172.24.1.254 ipv4.method manual $ nmcli c up enp1s0 ``` ::: 2. ![](https://i.imgur.com/cJEfRVu.png) :::spoiler 解答 ``` $ vi /etc/yum.repo.d/rhel.repo [BaseOS] name=RHEL-BaseOS baseurl=http://server1.net1.example.com/BaseOS enabled=1 gpgcheck=0 [AppStream] name=RHEL-AppStream baseurl=http://server1.net1.example.com/AppStream enabled=1 gpgcheck=0 $ yum clean all $ yum repolist ``` ::: 3. ![](https://i.imgur.com/RDboFjT.png) :::spoiler 解答 ``` $ yum install httpd $ systemctl start httpd $ systemctl enable httpd $ firewall-cmd --add-service=http $ firewall-cmd --reload $ vi /etc/httpd/conf/httpd.conf ... Listen 82 ... $ semanage port -a -t http_port_t -p tcp 82 $ systemctl restart httpd $ curl 127.0.0.1:82 ``` ::: 4. ![](https://i.imgur.com/amhbsW3.png) :::spoiler 解答 ``` $ groupadd manager $ useradd -G manager natasha $ id natasha (查詢帳號資訊) uid=1001(natasha) gid=1002(natasha) groups=1002(natasha),1001(manager) $ useradd -G manager harry $ id harry uid=1002(harry) gid=1003(harry) groups=1003(harry),1001(manager) $ useradd -s /sbin/nologin sarah $ passwd natash $ echo flectrag | passwd --stdin natasha ``` ::: 5. ![](https://i.imgur.com/6aMXKPQ.png) :::spoiler 解答 ``` $ crontab -e -u natasha * * * * * logger "EX200 in progress" $ systemctl restart crond #重啟cron服務,載入crontab設定 $ cat /var/log/messages | grep EX200 Dec 26 15:40:01 RHEL8-100G natasha[114478]: EX200 in progress ``` ``` logger 使用這個指令可以直接將訊息寫入rsyslog中 例1: $ logger "insert test" $ cat /var/log/messages | grep insert Dec 26 16:15:17 RHEL8-100G root[114630]: insert test 例2(寫入指定的log紀錄檔): $ vi /etc/rsyslog ... local3.* /var/log/loggertest.log $ systemctl restart rsyslog $ logger -p local3.notice "logger test" $ cat /var/log/loggertest.log Dec 26 16:12:52 RHEL8-100G root[114627]: logger test ``` ::: 6. ![](https://i.imgur.com/hfLzRT6.png) :::spoiler 解答 ``` $ mkdir /home/contrib $ chgrp manager /home/contrib $ chmod g+ws /home/contrib drwxrws---. 2 root manager 6 12月 26 17:08 contrib #檢查/home/contrib目錄底下建立的檔案,group皆預設為manager $ cd /home/contrib $ touch test $ ls -l -rw-r-----. 1 root manager 0 12月 26 17:32 test ``` ::: 7. ![](https://i.imgur.com/s7XJQWq.png) :::spoiler 解答 ``` $ vi /etc/chrony.conf server utility.net1.example.com $ systemctl restart chronyd $ chronyc sources #查看是否有連上server端 ``` ::: 8. ![](https://i.imgur.com/FsFCgcu.png) :::spoiler 解答 ``` # 題目為將utility.net1.example.com的目錄透過NFS-exports掛到本機,前置作業皆在utility機器上已設好,無須再設定,僅供參考 $ yum install rpcbind #安裝套件rpcbind、nfs-utils $ systemctl start rpcbind #此套件負責執行rpc服務的port mapping,所以要先啟動 $ systemctl enable rpcbind $ yum install nfs-utils $ systemctl start nfs-server $ systemctl enable nfs-server $ firewall-cmd --add-service=rpc-bind --permanent #開啟防火牆,允許服務通過 $ firewall-cmd --add-service=nfs --permanent $ firewall-cmd --add-service=mountd --permanent $ firewall-cmd --reload $ vi /etc/exports /rusers/remoteuser1 primary.net1.example.com(ro) $ exportfs -arv #此指令能不須重啟nfs服務,即可套用新的設定檔 #以下操作在本地虛擬機(NFS client)上執行 $ showmount -e utility.net1.example.com #查看NFS server上分享的目錄 Export list for 172.24.1.100 /rusers/remoteuser1 primary.net1.example.com(ro) $ yum install autofs $ systemctl start autofs $ systemctl enable autofs $ vi /etc/auto.master /rusers /etc/auto.nfs $ vi /etc/auto.nfs remoteuser1 -r utility.net1.example.com:/rusers/remoteuser1 $ systemctl restart autofs #重啟autofs,吃到新的設定檔 $ cd /rusers/remoteuser1 ``` ::: 9. ![](https://i.imgur.com/Yr80JlI.png) :::spoiler 解答 ``` $ cp /etc/fstab /var/tmp/fstab $ setfacl -m u:natasha:rw /var/tmp/fstab $ setfacl -m u:harry:- /var/tmp/fstab $ setfacl -m o:r /var/tmp/fstab $ getfacl /var/tmp/fstab # file: var/tmp/fstab # owner: root # group: root user::rw- user:natasha:rw- user:harry:--- group::r-- mask::rw- other::r-- ``` ``` setfacl、getfacl(file access control list) getfacl查看檔案、目錄權限 $ getfacl file.txt # file: file.txt # owner: root # group: root user::rw- group::rw- other::r-- setfacl設定檔案、目錄權限 $ setfacl -m u:user:rx file.txt #-m表示修改權限 $ setfacl -x u:user file.txt #-x表示移除權限 $ setfacl -b file.txt #-b表示清除"檔案中"所有acl設定 $ setfacl -Rb file.txt #-R表示遞迴清除"目錄中"所有acl設定 $ setfacl -m m:r file.txt #m表示mask,設定遮罩,超出範圍的權限就會失效 $ setfacl -m d:u:user1:rw folder #d表示此目錄底下建立的新檔案,都會自動繼承acl設定 ``` ::: 10. ![](https://i.imgur.com/ZTgbrkx.png) :::spoiler 解答 ``` $ useradd -u 4332 jean $ echo flectrag | passwd --stdin jean ``` ::: 11. ![](https://i.imgur.com/UFlcXse.png) :::spoiler 解答 ``` $ find / -user simone -exec cp -a {} /root/found/ \; #利用find指令找到-user是simone的檔案,後面皆-exec將找到的結果進行複製。 #cp中 -a參數通常於複製目錄時使用,保留連結、文件屬性、並複製目錄下所有內容,{}表示find找到的結果 ***以下做法與上面同義*** $ mkdir /root/found $ cp -a $(find / -user simone) /root/found/ ``` ::: 12. ![](https://i.imgur.com/Nh9VCOz.png) :::spoiler 解答 ``` $ grep strato /usr/share/dict/words >> /root/lines.txt ``` ::: 13. ![](https://i.imgur.com/mHslVAf.png) :::spoiler 解答 ``` $ tar jcf /root/data.tar.bz2 /usr/local $ file /root/data.tar.bz2 data.tar.bz2: bzip2 compressed data, block size = 900k ``` ::: 14. ![](https://i.imgur.com/hscSCjc.png) :::spoiler 解答 ``` 1. 開機時在grub選單按e進入命令模式 2. 在Linux這行最後加上rd.break 3. 按Ctrl+x重新開機 4. $ mount -o remount,rw /sysroot 5. chroot /sysroot 6. passwd root 7. ./touch autolrelabel 8. 2次exit ``` ::: 15. ![](https://i.imgur.com/3kJGCYA.png) :::spoiler 解答 ``` $ vi /etc/yum.repo.d/rhel.repo [BaseOS] name=RHEL-BaseOS baseurl=http://server1.net1.example.com/BaseOS enabled=1 gpgcheck=0 [AppStream] name=RHEL-AppStream baseurl=http://server1.net1.example.com/AppStream enabled=1 gpgcheck=0 $ yum clean all #清理快取 $ yum repolist 軟體庫 ID 軟體庫名稱 BaseOS RHEL-BaseOS AppStream RHEL-AppStream ``` ::: 16. ![](https://i.imgur.com/7fUAHfi.png) :::spoiler 解答 ``` #建立一個2GB的partition: /dev/sdb1,並建立volune group: testvg,logic volume: vo $ lsblk sdb 8:16 0 2G 0 disk #要畫partition的disk $ fdisk /dev/sdb > 命令:F #顯示未分割的區域 Unpartitioned space /dev/sdb: 2 GiB, 2146435072 bytes, 4192256 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes Start 結束 磁區 Size 2048 4194303 4192256 2G > 命令:n #建立新分割 Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Using default response p. 分割區編號 (1-4, default 1): First sector (2048-4194303, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-4194303, default 4194303): Created a new partition 1 of type 'Linux' and of size 2 GiB. #全部選項接直接按enter,以預設進行 > 命令:w #儲存設定並離開 $ pvcreate /dev/sdb1 #將sdb1建立為pv,格式:pvcreate <要建立成pv的partition> $ pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- <2.00g <2.00g $ vgcreate testvg /dev/sdb1 #建立testvg,格式:vgcreate <vg名稱> <要加入的pv> $ vgs VG #PV #LV #SN Attr VSize VFree testvg 1 0 0 wz--n- <2.00g <2.00g $ lvcreate -n vo -L +200M /dev/testvg #從vg中建立200M的lv $ lvs LV VG Attr LSize vo testvg -wi-a----- 200.00m #將200M的lv格式化,檔案系統為xfs,並掛載至/mnt/vo底下 $ mkfs.xfs /dev/testvg/vo #將/dev/testvg/vo以xfs檔案系統格式化 $ mkdir /mnt/vo #建立mount point $ mount /dev/testvg/vo /mnt/vo $ df -Th 檔案系統 類型 容量 已用 可用 已用% 掛載點 ... /dev/mapper/testvg-vo xfs 195M 12M 184M 6% /mnt/vo #將200M的lv擴展至250M $ lvextend -L +50M /dev/testvg/vo #先擴增lv $ df -Th #測試若僅擴增lv,不擴檔案系統會如何 #結果顯示掛載起來後,也僅沒有檔案系統的lv無法使用 檔案系統 類型 容量 已用 可用 已用% 掛載點 ... /dev/mapper/testvg-vo xfs 195M 12M 184M 6% /mnt/vo $ xfs_growfs /dev/testvg/vo #擴展xfs檔案系統 $ df -Th #確認檔案系統是否有擴增成功 檔案系統 類型 容量 已用 可用 已用% 掛載點 ... /dev/mapper/testvg-vo xfs 247M 13M 235M 5% /mnt/vo $ vi /etc/fstab #設定開機自動掛載 ... /dev/testvg/vo /mnt/vo xfs defaults 0 0 ``` ::: 17. ![](https://i.imgur.com/6UVWZbv.png) :::spoiler 解答 ``` swap 空間 swap空間可以為分割區或檔案 當實體記憶體(RAM)用完時,假如系統還需要更多記憶體資源,會將不常用資源移至swap分割區中。 $ mkswap <partition> #初始化swap空間 $ swapon <partition> #啟用swap空間 $ swapon -a #編輯/etc/fstab以後,此指令會啟用標記為swap的 $ swapon -s #查看系統中的swap空間 Filename Type Size Used Priority /dev/dm-1 partition 5242876 0 -2 ###題目解答 $ fdisk /dev/sdb > 命令:n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p 分割區編號 (1-4, default 1): First sector (2048-2097151, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151): +512M Created a new partition 1 of type 'Linux' and of size 512 MiB. > 命令:w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. $ mkswap /dev/sdb1 Setting up swapspace version 1, size = 512 MiB (536866816 bytes) 無標籤,UUID=eb3e80cd-446b-4b37-9ebf-97b2b7b1e6bf $ vi /etc/fstab ... /dev/sdb1 none swap defaults 0 0 $ swapon -a $ swapon -s Filename Type Size Used Priority /dev/sdb1 partition 524284 0 -2 /dev/dm-1 partition 5242876 0 -3 ``` ::: 18. ![](https://i.imgur.com/6mZMkjz.png) :::spoiler 解答 ``` $ fdisk /dev/sdb > 命令:n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p 分割區編號 (2-4, default 2): First sector (1050624-4194303, default 1050624): Last sector, +sectors or +size{K,M,G,T,P} (1050624-4194303, default 4194303): +1G Created a new partition 2 of type 'Linux' and of size 1 GiB. > 命令:w The partition table has been altered. Syncing disks. $ pvcreate /dev/sdb2 $ vgcreate -s 8M wgroup /dev/sdb2 #vg wgroup中一個PE 8M $ vgdisplay wgroup ... PE Size 8.00 MiB Total PE 127 $ lvcreate -n wshare -l 100 wgroup #建立lv wshare 大小為100個PE $ lvs LV VG Attr LSize wshare wgroup -wi-a----- 800.00m $ mkfs.vfat /dev/wgroup/wshare $ mkdir /mnt/wshare $ vi /etc/fstab ... /dev/wgroup/wshare /mnt/wshare vfat defaults 0 0 $ mount -a $ df -Th 檔案系統 類型 容量 已用 可用 已用% 掛載點 /dev/mapper/wgroup-wshare vfat 799M 4.0K 799M 1% /mnt/wshare ``` ::: 19. ![](https://i.imgur.com/6mA8QFm.png) ![](https://i.imgur.com/M2MCPjz.png) :::spoiler 解答 架構圖 ![](https://i.imgur.com/0Kztkrp.png) ``` stratis透過(volume managing filesystem ,VMF),建立一個pool後可以在上面對多個filesystem進行管理。 Block device:可以是磁區、LVM,每個Block device最少1G pool:所有儲存區的集合 Filesystem:系統用於檔案管理 ###題目解答 $ yum install stratisd stratis-cli $ systemctl start stratisd $ systemctl enable stratisd #已有先建立的LVM空間拿來當作bolck device $ wipefs -a /dev/stratisvg/stratislv #若已經有filesystem需要先清除 $ stratis pool create stratispool /dev/stratisvg/stratislv #透過建立pool將之前劃好的LVM空間加入,此空間大小為3GB $ stratis pool list Name Total Physical Properties stratispool 3 GiB / 37.63 MiB / 2.96 GiB ~Ca,~Cr $ stratis blockdev list Pool Name Device Node Physical Size Tier stratispool /dev/stratisvg/stratislv 3 GiB Data $ mkdir /stratisvolume #建立mount point $ blkid /dev/stratis/stratispool/stratisfs /dev/stratis/stratispool/stratisfs: UUID="afd3d918-3ffa-4ec4-8622-b837081879c7" BLOCK_SIZE="512" TYPE="xfs" #查詢stratisfs的UUID,以便寫入/etc/fstab $ vi /etc/fstab UUID=afd3d918-3ffa-4ec4-8622-b837081879c7 /stratisvolume xfs defaults,x-systemd.requires=stratisd.service 0 0 #x-systemd.requires=stratisd.service表示系統啟動要掛載時要先啟動stratisd,才能避免無法掛載stratis的檔案系統導致無法開機 $ stratis filesystem snapshot stratisfs stratis #建立stratisfs的snapshot:stratisnap $ stratis filesystem list Pool Name Name Used Created Device UUID stratispool stratisfs 546 MiB Jan 05 2023 13:37 /dev/stratis/stratispool/stratisfs afd3d9183ffa4ec48622b837081879c7 stratispool stratisnap 546 MiB Jan 05 2023 14:49 /dev/stratis/stratispool/stratisnap cc84e03850394cd9a66e10a4001701d3 ###stratis相關指令 $ stratis pool add-data stratispool /dev/sdc #在現有的pool新增block device $ stratis filesystem destroy stratispool stratisfs #刪除已建立的filesystem $ stratis pool destroy stratispool #刪除已建立的pool ``` ::: 20. 建立VDO volume,符合以下條件: >* 使用unpartition disk (/dev/sdb) >* 名稱為myvdo >* 大小為5G >* filesystem為xfs >* 開機時會自動掛載至/vblock :::spoiler 解答 ``` vdo(Virtual Data Optimizer) 透過vdo處理虛擬機的磁碟,存在vdo掛載點的資料可以使用vdo系統管理,資料同步、壓縮。因此假設實際上有1T的空間,經過vdo處理可以產生5T的虛擬空間。 ###題目解答 $ yum install vdo kmod-kvdo $ systemctl start vdo $ systemctl enable vdo $ vdo create --name=myvdo --vdoLogicalSize=5G --device=/dev/sdb #建立vdo最小邏輯大小至少5G $ vdo status --name=myvdo #可以查看vdo的狀態 $ mkfs.xfs /dev/mapper/myvdo #用xfs格式化 $ vi /etc/fstab /dev/mapper/vdo /vblock xfs defaults,x-systemd.requires=vdo.service 0 0 $ mkdir /vblock $ mount -a $ df -h 檔案系統 容量 已用 可用 已用% 掛載點 /dev/mapper/myvdo 5.0G 68M 5.0G 2% /vblock ###刪除vdo $ umount /vblock $ vdo remove myvdo ``` ::: 21. ![](https://i.imgur.com/KxmUk81.png) :::spoiler 解答 ``` Tuned 動態系統優化 依據監控到的系統狀態自動調整系統設置,以達到服務器最佳性能。 RHEL預設已安裝且啟動 tuned為監控並調整系統設置服務 tuned-adm以命令管理tuned ###題目解答 $ tuned-adm list #列出所有可使用的profile $ tuned-adm active #查看現在正在使用的profile $ tuned-adm recommend #查看系統推薦的優畫策略 virtual-guest $ tuned-adm profile virtual-guest #將profile設為系統推薦的virtual-guest ``` ::: ###### tags `RHCSA`