# Linux Learning * sudo apt update : 查看可更新的套件 * sudo apt upgrade : 安裝可更新的套件 * apt list --upgradeable :查看可更新的軟件包及版本資訊 * apt list --installed : 列出已安裝的 * sudo apt install [package name] * sudo apt remove [package name] * sudo apt clean : 清楚下載檔案的存檔 * apt search [package name] : 查找 * apt show : 查看相關資訊 * sudo apt autoremove : 移出不再使用依賴和文件 * ls * -a 列出所有檔案,包含隱藏檔案 * -h 顯示檔名 * -l 顯示列出檔案的存取權限的資訊 * -d 列出指定的檔案 * -R 列出指定檔案函底下的檔案 * -r 反向排序顯示 * -S 用檔案大小排序顯示 * -t 用時間排序顯示 * ll => ls -l : 顯示文件的詳細資訊 * -n :將所有權的user name , group name 換成數字(id) * mkdir * -p + dic1/dic2 : 若dic1不存在會先建立dic1,再建立dic2 * cp : 複製檔案 * -r : 複製資料夾中的所有檔案 * -i : 詢問重複檔案是否覆蓋 * -p : 將本身檔案的屬性都複製過去 , 備份用 * rm : 刪除指定檔案 * -i : 互動式,刪除前會再向usr確認一次 * -r : 刪除資料夾內所有檔案 * -f : 強制刪除,不管存不存在 * rmdir : 刪除空資料夾,若底下不是空,則無法刪除 * w : 顯示目前登入usr的相關資訊 * -f : usr 從何處登入 * -h : 不顯示欄位 * -s : 簡短輸出,不顯示usr登入時間、JCPU、PCPU * who : 顯示當前登入用戶 * a1095551 tty2 2023-06-03 16:16(tty2) * whoami : 顯示目前使用者名稱 * a1095551 * id : 顯示目前用戶的id 與 所屬group的id * -g : 顯示用戶所屬群組ID (被系統指派) * -G : 顯示用戶所屬的附加群組ID (用戶選擇加入) * -u : 顯示用戶ID * * 以下兩個搭配 上面使用 * -n : 顯示用戶、所屬群組、附加群組的名稱 , -g -n * -r : 顯示實際ID , -G -r * cat : 顯示內容 * 後面有加 顯示該檔案內容 * 沒加 輸入甚麼、顯示甚麼 * cat file1 file2 > file3 : 合併 file1 , file2 到 file3 * -n : 加入行數編號 * -b : 加入不為空白行的行數編號 * date : 顯示日期 * -s :修改日期 * -d :輸出某段的時間,date -d "1 day ago" +"%Y-%m-%d %H:%M:%S" * cal : 顯示日曆 * cal 2023 :顯示整年 * wc [file_name]: 計算檔案的行數、字數、字元數 * wc file1 file2 file2 : 計算多個 並加總 * -l : 算行 * -w : 算字 * -c , -m: 字元數 * -L : 最長行數 * mii-tool : 主要用於查看 、管理 網路接口的狀態 * -v enp0s3 : 查看網卡資訊 * useradd : 新增使用者 * -u 指定UID * -n 群組為users * -g 指定用戶主要群組 * -G 指定附加群組 * -M 不要建立家目錄 * -m 建立使用者家目錄 * -d 指定用戶登入時的起始目錄 * 切換帳號 * 要先設密碼: * sudo passwd [user] * su - [user] , 輸入密碼即可 * groupadd : 新增群組 * groupadd -g [GID] [group-name] * -o | non-unique : 多群組共用GID * groupmod : 修改group的設定 * -g : GID * -n : group name * groupdel : 刪除 * getent : 用於查看系統數據及中的紀錄資訊 * getent group * getent hosts * getent passwd * usermod : 修改帳號各項設定 * -d : 修改用戶登入時的目錄 * -g : 修改用戶主要群組 * -G : 修改附加群組 , 原本的群組會被退掉 * -l : 修改用戶帳號名稱 * -L : 鎖定密碼 使無效 * -U : 解除密碼鎖定 * -u : 修改ID * -e : 帳號過期設定 * -c : 備註 * cat /etc/shadow : 上次修改密碼時間 * cat /etc/passwd * gpasswd : 添加到群組 * -a : 添加到群組 , 原本的不會被退掉 * gpasswd -a [user_name] [group_name] * -d : 刪除 * -A : 指令管理員 * -r : 刪除密碼 * touch : 更改檔案的存取時間、更改時間,不存在則會創建 * sudo chown [user1] [file-name] * sudo chgrp [user1] [file-name] * chattr : 更改文件屬性 * +a : 僅附加 * +i : 不得更動文件或目錄 * chmod * user , group , other許可權限 , a = ugo * rwx = 7 , rw- = 6 , r-- = 4 * chmod 764 [file-name] * + :新增 , - : 減少 , = , 指訂,其餘刪除 * umask : 建立文件時的預設權限mask * 一般usr 為 002 * 可以在 ~/.bashrc 加入 unmask 022 * if umask = 0022 * 文件夾默認權限777 , 檔案為666(因為系統默認一開始不能執行) * 如果創建一個新的文件夾 777 - 022 = 755 * 如果創建一個檔案 666 - 022 = 644 * 後續在調整 * file : 辨識文件類型 * -c : 顯示執行過程 * strings : 從文本中提取所有文本字串 * strings [file-name] * -a 掃描整個檔案 * stat : 查看檔案資訊 * -f : 不顯示文件本身的資訊,顯示文件所在的系統資訊 * ln : 建立連結 , 在不同目錄下 使用相同的檔案,減少不必要的磁碟空間 * -s : 軟連結,類似捷徑,產生特殊的檔案 可跨連結 * 硬連結不能跨目錄 * find : 找目錄 或 檔案 * find . -type f : 將當前目錄及其子目錄中的所有文件列出 * find . -type f -perm 0777 : 找出權限為777 * find . type f ! -perm 0777 : 找出權限不是777 * dumpe2fs : 查看文件系統的詳細資訊 * 將EXT2 檔案系統狀態輸出到標準的設備上,用於分析問題以及檔案系統的資訊 * e2fsck : 检查使用 ext2 档案系统的 partition 是否正常工作。 * mke2fs : 用于建立ext2文件系统。 * fsck : 檢測或修復檔案系統,硬碟檢測工具、檔案系統是否有錯誤,並嘗試修復,使用時硬碟要處於沒有被掛載的狀態下,避免資料損壞 * mount , df : 查看以掛載的文件系統 * lsblk 、 fdisk : 顯示所有磁碟分區的訊息,上面沒有顯示,此處有代表沒掛載,或是 lsblk中mountpoint 為 空。 * fdsik : 磁碟分割區管理工具,檢視、建立、修改、刪除硬碟分割區 * fdisk -l /dev/sda * 切割磁碟 : * fdisk [目標磁碟] -> 輸入n (分磁區) -> lsblk 確認 * 按照以下步驟創建分割區: 1. 列出當前分區:`fdisk -l` 2. 選擇存儲磁盤:`fdisk /dev/sdX`(其中 X 是您要添加分區的設備) 3. 創建新分區:輸入 `n` 並指定分區的開始和結束位置。 * parted : 查看、管理磁碟分割表 * parted /dev/sda 會進入互動介面 * 輸入 print : 顯示磁碟分區狀態 * mkpart * rm * 照以下步驟創建分割區: 1. 選擇目標磁盤:`sudo parted /dev/sdb` 2. 創建分區表:`mklabel [partition_table_type]` 3. 創建分區:`mkpart` * e4defrag : 檢查ext4,碎片整理 * 可以用df 看type 找 ext4 * e4defrag /dev/sda3 * -c 僅查看,不整理,書Done 為沒碎片 * e2label : 變更ext 檔案系統的磁碟 * e2label + 磁碟代號 * e2label /dev/sda3 * e2label + 磁碟代號 + 磁碟名稱 : 變更 * e2label /dev/sda3 123 * smartctl : 判斷磁碟的健康狀態及提供健康狀態預警 * yes : 產生data stream * yes 123 , 會不斷輸出123 * df : 管理檔案系統 * -h : 人類可讀形式 * watch : 不斷刷新 後面的指令 * watch -n 1 df -h : 1 秒更新一次 * dd : 資料 copy 、 備份與回復整顆硬碟資料 * dd if=[讀入檔案] of = [輸出檔案] bs =[一次輸入/輸出的bytes] count= [copy數] * grep : 找相同內容的 * ls -la | grep -v ^d 找開頭不是d的 * vim * 好處 : 速度快 、 開啟檔案快 、編輯速度快 、精準 * 壞處 : 中文輸入不方便、不適用windows平台、學習曲線高 * 替換文字 * :%s/[要換的]/[換成甚麼]/gc :會一個一個確認y/n * /g : 直接全換 * 遇到唯獨 * 輸入 :shell * chmod u+w file.txt * 往下搜尋 : /[string] , n 下一個 ,N 上一個 * * 往下搜尋 : /[string] , n 下一個 ,N 上一個 * O : 插入中間 * dd : 刪一行 , 2dd : 刪兩行 * :qa : quit all * shift zz : 退出 * :w [filename] : 寫入新檔 * :e [filename] : 開檔 * 一次打多個 : * ex: 10 , i , [string] , [esc] * :! 執行外部指令 * h 左 , j 下 , k 上 , l 右 * H : 第一行 of window , L : 最後一行 of window * w : 每次前進一個word * b : 每次後退一個word * shift $ 該行最後 , shift ^ 該行文字最前 , shift 0 該行最前 * [n]G : goto * ctrl G : 現在在哪 * ctrl B : 往下一頁 , ctrl F : 往上一頁 * m{a-z} : 標籤 , `{a-z} : 到標籤 * map 替換功能 * shell * !$ 傳入上一個參數 * ex : 先用 vim a1095551.txt , arg = a1095551.txt * !$ = a1095551.txt * && : 前面的指令錯 就不會繼續執行 * || : 前面的指令錯 還是會執行 * | : 會將前面指令的輸出,傳到下一個指令 * ; : 指令依次執行 * & : 後臺執行 * set * [0-9], [a-z] , [a-zA-Z] , [!a-z] , [a-gxz] * touch file{000..300}.txt 新增file000 - file300 的檔案 * bash 環境: * /etc/profile : 系統範圍的環境和啟動程序 * /etc/bashrc : 系統範圍的功能和別名 * /etc/profile.d/ : 設定CLI工具的系統範圍腳本,可自行添加 * ~/.bash_profile : 用戶特定的環境和啟動程序 * ~/.bashrc : 用戶特定的別名和功能 * ~/.bash_logout : 用戶在退出時執行的特定指令 * shell 登入時 ,先運行 /etc/profile ,完成後運行 ~/.bash_profile , 再調用 ~/.bashrc * export [var]=[something] : 在當前的shell 內都可以使用 * 若要永久 就需要到使用 ~./bashrc 添加 * unset [var] : 解除設定的環境變數 * alias ll = "ls -l" * true ; echo $? => 0 * true 為 0 , $? 為上一個指令的返回值 * true && echo "True" || echo "False" * true 輸出 "True" , 反之 輸出False ```=shell x=0; if [$X==0]; // test $X == 0 then echo "X=0"; else echo "X!=0"; fi ``` * -e filename : exist * -d filename : exist 唯一路徑 * -w filename : 是否可寫入 ```=shell File="test123"; if [-e $File]; then echo "The file $File .."; else echo "the ..."; fi ``` * -z string : 字串長度是否為0 * -n string : 字串長度是否不為0 * expr length $var : 字串長度 * 指令中用指令 `` , $() ```=shell echo "today date is `date`" echo "today date is $(date)" ``` * for loop ```=shell for I in a b c d; do echo $I; [other command] done $(seq 1 100) {1..100} ``` * while loop ```=shell x=0; while[ true ]; do echo $((x++)); [other command] done ``` ```=shell x=0; while[ $x -le 5 ]; do echo $((x++)); [other command] done ``` * * , @ : 所有的變數 * ${!prefix*} . ${!prefix@} :加prefix 給所有變數 * ${!name[@]} , ${!name[*]} : 給 index * ${#parameter} : 長度 * ${param#word} : 在 param中從前開始找距離最近的word,之前全部移除 * ${param##word} : 在 param中從前開始找距離最遠的word,之前全部移除 * ${param%word} : 在 param中從後開始找距離最近的word,之後全部移除 * ${param%%word} : 在 param中從後開始找距離最遠的word,之後全部移除 * sed : 字串取代、複製、刪除 * sed 參數 "動作/要被取代的字串/要替代的字串/flag" * 參數 -e : 連接多個sed * 動作 s : 替換 * flag g : 套用全部 * awk : 輸出格式 * awk '{print $1" "$2" <"$3">"}' * /proc : 儲存正在執行的kernel與其效能數據 * /proc/cpuinfo : cpu 資訊 * /proc/meminfo : memory 資訊 * /proc/sys/net/ipv4 : 網路設定 * free :查看記憶體使用狀態 * /sys : 裝置與驅動程式的資料與設定 * 看到硬碟的系統檔案 * ls /sys/bus/usb/devices/usb2 : 查看bus和usb資訊 * /etc/fstab : 硬碟分區與掛載點設定 * tar : 加/解壓縮 * -c : 建立打包檔案 * -t : 查看打包檔案的內容有哪些檔名 * -z : 打包成 *.tar.gz * -f : 後面接要被處理的檔名 * -v : 將正在處理的檔名顯示出來 * -C : 要在哪解開 * sudo tar -czvf a1095551.tar a1095551.txt : 壓縮 * sudo tar -tzvf a1095551.tar : 查詢壓縮檔,看到其中資訊 * sudo tar -xzvf a1095551.tar : 解壓縮 * 搭配 grep 可以解特定目標 * dd if = 輸入檔案路徑 bs = 緩衝空間大小 | tar -xzvf filename -C "檔案在壓縮檔內的路徑和檔名" 輸出壓縮檔案路徑 * top : 觀察內存和CPU的使用情況以及平均負載 * 檢查CPU 使用率 * 輸入 k = 可以終止 * 修改 nice number : 優先度 * -20 - 19 越小越優先 * renice [要調的值] pid * kill -<數字> PID * -9 : 強制終止 * -2 : 中斷 = ctrl+C * ps : 條列出該使用者的process * -r : 當前執行的process * -ef :所以的process * -au<使用者名稱> : 列出屬於使用者的process * pgrep : 尋找指定的process * pgrep -l cpu * pkill : 將符合搜尋條件的process一次停止 * mkfifo : 創建name pipe * htop : 與top類似,但能夠與正在運行的process互動 * 可終止或調整所選process的優先級,以及像一個或多個process發送多個信號 * free : 查看內存使用情況 * vmstat : 查看內存使用率 、CPU使用率 * iostat : 呈現磁碟讀取效能 、 堤共CPU 對I/O工作所佔的比例 * iostat -c 1 : 每秒顯示一次CPU資訊 * iostat -j ID : 查看檔案系統名稱 * -c : 顯示CPU使用 * -d : 磁碟使用 * -N : LVM資訊 * -n : NFS使用情況 * -p : 磁碟和分割槽的情況 * iotop : 顯示當前間隔內的總磁碟讀寫數據和實際讀寫數據 * iotop : 顯示使用I/O最多進程 * lshw : 列出主機板、CPU和其他安裝的硬體資料 * dmidecode : 列出硬體的資料 * sudo dmidecode -t processor : 顯示處理器資訊 * 0 : bios * 1 : system * 2 : 主機板 * 4 : processor * 17 : memory device * lsusb : 查看usb * usb-devices 也可 * lspci : 查看PCI設備 * lm-sensors : 監測內部傳感器 * sudo sensors-detect :偵測可用的硬體監控器 * cupsdisable : 禁用設備 * cupsdisable <設備名稱> 禁用設備 * sar : 查看指定的操作系統狀態 * sar -u 1 10 : 每秒顯示一次CPU使用,顯示10次 * od :以八進制或其他格式轉換文件 * chronyc * chronyc tracking : 查看時間參考來源 * chronyc sources : 列出NTP校正來源 * tail -f [file] : 即時更新 * at : 建立一次性任務 * at> at [時間] * at> [指令] * at> crtrl+d : 結束 * atq : 查看排程 * atmr [編號] : 刪除at的工作 * mailx : 開啟mailutils的郵件管理工具 * 啟用sysstat * sudo systemctl enable sysstat * sudo systemctl start sysstat * dmesg : 查看開機資訊 * journalctl : 查看 systemd 系統日誌 * logwatch : 啟動日誌分析工具 * ip addr :查看網卡介面資訊 * ip addr flush : 清楚有ip 設定 * ip neigh :查看同網域下的其他裝置IP * ip route : 看 gateway * sudo ip route add default via [ip] * ping : 對 ip 或 網址進行呼叫 * ping 127.0.0.1 確認網卡功能 * dmesg | grep eth0 : 查看開機資訊上的eth0資訊 * ip link set <介面卡名稱> down : 停用網卡 * ip link set <介面卡名稱> up : 啟用網卡 * route -n : 查看routing table * iptraf-ng : 進入iptraf-ng 功能表 * lshw : 查看所有可用的網路介面 * ethtool * ufw * ufw status * ufw enable : 開機自動載入和啟用 * ufw disable * ufw default allow : 允許所有連線 * ufw default allow 80 , 80/udp ,80/tcp * ufw allow from [ip] to any port [port]:從此ip的port來都允許 * ufw default deny : 拒絕所有連線 * ufw delete allow 80 : 刪除規則 * ufw reset : 全部重設 * ssh * /etc/hosts.allow : 把允許的主機ip 加進來 * ex : sshd:192.168.1.88:allow * /etc/hosts.deny : 拒絕所有主機 * ex: sshs:all:deny * 設置黑白名單 * /etc/spamassassin/local.cf 新增黑/白名單 * blacklist_from *@vm2 * whitelist_from *@vm2 * echo "信件內文" | mailx -s "主旨" <對象> * mailx :查看信件 * mailx []@[] * Cc:副本 * Subject :主旨 * 內容 * ctrl+d * vm 複製 * 再製VM * 複製完全一樣的VM,創建相同環境的VM * 可個別開啟 * 較慢 * 直接匯入VM * vdi * 檔案大小一樣大 * 外部設定都會一樣 * 備分用 * 匯出 ova * 檔案較小 * 打包到其他電腦上,設定都相同 * 資料夾複製 : 暴力複製 * crontab * 整個環境都複製出來 , 網卡資訊都會相同 * snapshot : 僅複製每次檔案之間的差異 * 出問題可以還原前一次狀況 ## 系統管理題庫 1. Boot Loader 於開機時會讀取的系統核心為下列哪一項? (A) /boot/kernel (B) /boot/vmlinuz (C) /boot/system (D) /boot/initrd.img Ans : C * Boot Loader 是開機載入程式,用來載入OS kernel,Loader 分別有LILO(LInux LOader) 及 GRUB (GRand Unified Bootloader),都具有Boot Manager。 * 等grub 的選單中選擇了 Linux 這個系統,然後主機跑到 Linux 所在的硬碟之下,就開始將他的核心載入囉。在 Linux 的系統下,通常開機的核心都擺在 /boot 底下,因此,這個時候的 boot loader 就會到 /boot 去尋找相關的核心。kernel 名稱通常就是 /boot/vmlinuz-xxxx 的格式, 2. 在/etc/inittab 檔案中,不應將預設的 Run Level 設定為下列哪些值? (複選) (A) 0 (B) 1 (C) 4 (D) 6 Ans: A ,C ,D * 在 Linux 和其他類 Unix 系統中,Run Level 0-6 通常定義如下: - Run Level 0: 系統關機。 - Run Level 1: 單用戶模式。僅有根用戶可以登錄,用於系統維護。 - Run Level 2: 多用戶模式,但不啟用網絡服務。 - Run Level 3: 多用戶模式,並啟用網絡服務。 - Run Level 4: 未定義。不同的 Linux 發行版可能會有不同的定義。 - Run Level 5: 多用戶模式,並啟用網絡服務和圖形用戶界面。 - Run Level 6: 系統重新啟動。 * 通常用3 CUI 、 5 GUI。 * init , telinit 可以切換 run level 3. 下列哪一個目錄中的檔案,是開機時 Kernel 依據目前執行環境自動產生的? (A) /temp (B) /opt (C) /root (D) /proc Ans : D (A) /temp 不是一個標準的 Linux 目錄。通常用於存儲臨時文件的目錄是 /tmp。 (B) /opt 用於存儲可選的應用程序軟件包。 (C) /root 是根用戶的主目錄。 (D) /proc 目錄包含了系統運行時的實時信息,例如系統硬件和進程信息。這些文件是由内核在開機時自動產生的,並且會根據系統的實時狀態不斷更新。 4. 想要看電腦所有磁碟與其掛載點,可使用下列哪些指令?(複選) (A) du (B) mount (C) fdisk (D) df Ans : B ,D 9. 在 systemd 程序下,若要變更或增加一個 system 服務的相關參數,下列 敘述哪一項正確? (A) 加入命令於/etc/systemd/system 其優先權低於/lib/systemd/system (B) /etc/systemd/system 與/lib/systemd/system 的內容必須相同 (C) 加入命令於/etc/systemd/system 其優先權高於/lib/systemd/system (D) /lib/systemd/system 為/etc/systemd/system 的符號連結 Ans :C 在 systemd 程序下,若要變更或增加一個 system 服務的相關參數,可以將命令加入 `/etc/systemd/system` 目錄中。`/etc/systemd/system` 目錄中的設置具有高於 `/lib/systemd/system` 目錄中設置的優先權。因此,正確答案是 (C) 加入命令於 `/etc/systemd/system` 其優先權高於 `/lib/systemd/system`。 其他選項的說明如下: (A) 不正確,因為 `/etc/systemd/system` 目錄中的設置具有高於 `/lib/systemd/system` 目錄中設置的優先權。 (B) 不正確,因為 `/etc/systemd/system` 和 `/lib/systemd/system` 的內容不必相同。 (D) 不正確,因為 `/lib/systemd/system` 不是 `/etc/systemd/system` 的符號連結。 0. 安裝 Linux 時,下列哪一項一定要切成單獨分割區的掛載點? (A) swap (B) /tmp (C) /var (D) /usr Ans : A 單獨分割區是指將硬碟分割成多個獨立的區域,每個區域都可以獨立掛載和使用。這樣可以幫助您為特定用途分配不同的內存區域。創建分割區還可以幫助您在同一台計算機上安裝多個操作系統,並在磁盤損壞時最小化損害 ²。 在 Linux 中,您可以使用 `parted` 或 `fdisk` 命令來創建分割區。例如,使用 `parted` 命令,您可以按 13. 系統預設的 umask 設定是記錄在下列哪一項檔案中? (A) /etc/bashrc (B) /etc/basb_profile (C) /etc/profile (D) /etc/chs.login Ans : A 永久修改在 /etc/bashrc 14. 假如想看到某個檔案 test.txt 的全部內容時,下列哪些指令可以達到此目 的?(複選) (A) cat test.txt (B) tail test.txt (C) pr test.txt (D) more test.txt Ans : A ,C ,D 6. 在 Vi 編輯器中,按下列哪些按鍵可以開始編輯輸入文字?(複選) (A) [w]鍵 (B) [i]鍵 (C) [a]鍵 (D) [o]鍵 Ans : B ,C ,D 18. cat 指令中加入下列哪些項目指令,可顯示 test 檔案內容並加入行號? (複選) (A) cat -l test (B) cat -b test (C) cat -n test (D) cat –u test 21. 下列哪一項指令可以將 EXT2 檔案系統狀態輸出到標準的設備上,用於 分析問題以及檔案系統的資訊? (A) tune2fs (B) mke2fs (C) e2fsck (D) dumpe2fs Ans : D 22. 關於 Sysfs 的敘述,下列哪一項錯誤? (A) 管理 Linux 系統中的週邊元件,配合使用公用程式來自動產生 Device Node (B) 它是從 Proc 所變化而來並由各個 Driver 自行產生相關檔案 (C) 它是繼承 Kobject 的資料結構,其檔名及內容都是 Driver 自行解決, 主要是用來設定 Driver 的功能 (D) 它是一個實體檔案系統,可用指令 mount–t sysfs sysfs /sys 將其掛載 34. DNS 正解檔案中,DNS Server 本身要設定下列哪些記錄,DNS Server方可正常運作?(複選) (A) NS (B) MX (C) A (D) CNAME DNS 正解檔案中,DNS Server 本身要設定下列哪些記錄,DNS Server方可正常運作?(複選)(A) NS (B) MX (C) A (D) CNAME 答案是 (A) NS 和 (C) A。這兩種記錄都是 DNS Server 正常運作所必需的。 - `NS`(Name Server)記錄用於指定負責管理某個域名的 DNS 服務器。它告訴客戶端應該向哪個服務器發送查詢請求。 - `A`(Address)記錄用於將主機名映射到 IP 地址。它告訴客戶端某個主機名對應的 IP 地址是什麼。 而 `MX`(Mail Exchange)記錄和 `CNAME`(Canonical Name)記錄則不是 DNS Server 正常運作所必需的。`MX` 記錄用於指定負責接收某個域名郵件的郵件服務器,而 `CNAME` 記錄用於為主機名創建別名。