thumbnail

近半年與 CentOS 相處頻繁,二十年前學的 Linux 知識不敷使用,該進行一個讀書充電的動作。從市圖借到的這本「CentOS 7.3 建置、管理與伺服器架設實戰」,非常淺顯好讀,章末還有簡單測驗題,頗有學校教科用書的 fu,用來入門很不錯。依照慣例,用做筆記逼自己認真讀完,筆記只有關鍵字,類似索引用途主要用於備忘,實際使用時細節再待爬文補足。

Linux 作業系統

UNIX 作業系統誕生於 1969 美國貝爾實驗室推出。Linux 始於 Linus Torvalds 1991 大學時代想實作一套用於學術的開放標準 UNIX。Linux 使用 X-Window (稱 X11 或 X)作為圖形介面標準,依 X 協定實作的環境如 KDE、GNOME。

發生版本 Distribution/Distro

早期 Linux 安裝步驟繁雜,故出現許多「發行版本」蒐集安裝、驅動、工具、軟體,方便安裝。當今主要的發行版本:

  1. RedHat:RedHat 公司(成立於1995) 的 RedHat Enterprise Linux,RHEL
  2. CentOS:The Community ENTterprise OS -> CentOS,RHEL 開源免費版
  3. Fedora:RedHat 公司贊助 Fedora Project 社群,每年推出新版 Fedora,也當成新技術試鍊場,驗證成功納入 RHEL
  4. Ubuntu:由自由軟體社群開發,近年火紅,硬體支援快又廣,有 Desktop 及 Server 版本、Kubuntu (以 KDE 取代 GNOME)、Gobuntu (全部使用 GNU 版權套件)、edubuntu (針對學校教學設計)
  5. Debian:由 Debian Project 組織維護,中文化做得最好。Ubuntu & Xandros (EeePC) 都是以 Debian 為基礎發展。
  6. SuSE:原為德國的一個 Linux 版本,2004 被 Novell 公司合併,主導推出套件格式 RPM 及更新軟體 YaST。Novell 贊助 openSuSE 社群,如同 Fedora 作為 SuSE 企業版驗證新技術的基礎

Open Source 授權


  1. GNU (GNU''s Not Unix) 計劃發展開源版本 UNIX 為宗旨,1991 Linux 出現,改以 Linux 為主軸。
  2. General Public License,GPL1989 Stallman GNU GPL 條款,為 Linux 上各類自由軟體(核心、gcc)主要授權,GPL 要求軟體如使用 GPL 程式碼,自己也要 Open Source(病毒式傳染力)
  3. Apache Apache Software Foundation(ASF)為支援自由軟體的非營利組織,最有名的軟體為 Apache 網頁伺器,其使用 Apache 授權,允許不提供源碼,並改以其他授權散佈,比 GPL 寬鬆

註:另外還有 MIT、BSD,延伸閱讀:開放源碼授權概觀

Linux 認證


  1. LPIC Linux Professional Institute Cerfification LPIC,Level 1、2、3
  2. RHCE RedHat Cerfificated Engineer
  3. NCLP Novell Certificated Linux Professional

Security Policy

RHEL 7.2 起導入 Security Policy,有多種 Profile:Default、Standard System、PCI-DSS V3 Control Baseline、C2S...

開機流程

BIOS -> GRUB(Bootloader,安裝多系統切換/單人模式救援) -> Linux 核心載入 -> 執行 init 程式(設環境變數、檢查分割區、掛載檔案系統...)

執行階層 Runlevel:

  • 0 - 系統關機
  • 1 - 單人模式(救援專用)
  • 2 - 多人模式,不載入NFS(救援專用)
  • 3 - 文字模式,多人使用
  • 4 - 保留未用
  • 5 - 圖形化介面(X-Window),多人使用
  • 6 - 系統重啟

Tips:

  • bash 指示符號 # 代表目前身分是 root、一般使用者時為 $
  • 快速鍵 Ctrl-D 送出EOF (相當於 DOS Ctrl-Z)
  • 快速鍵 Ctrl-Z 暫停目前工作

關機指令

  • shutdown -h now 馬上關 (先下w看誰在線上)
  • shutdown -h 10 十分鐘後關機 (亦可指定廣播訊息)
  • shutdown -c 取消關機
  • shutdown -r now 或 reboot (重啟系統)

目錄


  1. /bin 執行檔
  2. /etc 設定檔
  3. /sbin 系統管理者專用執行檔
  4. /dev 設備,如軟硬碟、印表機、光碟機、COM
  5. /home
  6. /root 系統管理者專屬目錄
  7. /boot 開機必須的核心檔案
  8. /usr package幾乎都在這裡
  9. /usr/bin
  10. /usr/sbin ⇐ root 系統管理工具
  11. /lib 共用程式庫
  12. /opt ⇐ 非Linux外來軟體,Oracle、StarOffice
  13. /var 變動性系統檔案(Log、郵件 Queue、資料庫檔案)
  14. /tmp ⇐ 重開機可能清除
  15. /media ⇐ 可移除媒體
  16. /mnt ⇐ 暫時性掛載

常用指令


  1. pwd
  2. ls、ls -l、ls -al(含隱藏檔)檔案權限欄共十個字元,如-rwxrwxrwx,第一欄為型態(-檔案、d目錄、l連結、b可儲存週邊、c序列埠設備如鍵盤滑鼠),後面接三組權限,擁有者、群組、其他人
  3. cd 換目錄
  4. cp、mv、rm 複製、搬移、刪除
  5. man - Manual 查看手冊,apropos 搜索手冊、info - 說明/教學
  6. cat - 相當於 DOS type 印出文字檔,cat -n xxx.txt 加上行列
  7. more - 多頁顯示、less - 可前後翻頁
  8. tail - 查看檔案最後10列,tail -n 100 xxx.log 顯示最後100列,tail -f xxx.log,內容有新增時即時顯示出來
  9. touch - 建立空白檔案、touch -t 20181231100000 xxx.txt 可修改檔案時間
  10. rmdir - 刪目錄 (rm -r 亦可)
  11. df -h 查詢磁碟空間、du 查詢目錄/子目錄佔用空間
  12. 導向 >、<、| (Pipeline)
  13. which (依PATH環境變數找尋檔案)、whereis 查詢檔案完整名稱、locate 查詢 /var/lib/mlocate/mlocate.db 資料庫找到檔案(updatedb更新)、find 搜尋檔案(搜HD,慢、耗資源)
  14. grep 搜索比對文字
  15. fdisk 管理分割區、mkfs 格式化

檔案系統


  • XFS - SGI 1993 發展 64 位元日誌型檔案系統,2001 加入 Linux,6.x 用 ext4,7.x 改 XFS,具 ext4 特性但效能更好。可支援到 8EB(=8000PB=8000*1000TB)
  • 每個檔案有一個 inode,記錄檔名、更動時間、權限、儲存區塊位置等資訊,可使用 ls -i 查詢,存取檔案時先找到 inode 知道區塊位址再讀資料
  • 建立連結 ln -s target source,Symbol Link,ls -l 時第一欄位為 l,後方有 -> 指向真實檔案,若真實檔案被刪除,連結無效會變紅色
  • Hard Link ln target source,若有兩個更連結指向同一檔案,刪除時另一個仍有效,硬連結不能跨分割區
  • mount 設備要掛載到路徑才能使用 mount -t iso9660 /dev/cdrom /media/cdrom
  • 檔案格式:xfs, iso9660, msdos, vfat, ntfs, nfs, smbfs, ext2, ext3, ext4
  • chmod 修改檔案權限設定範例:ug+rw, a+r, u-w, go-x, g=rx, ug=r, a=rx, "u+x,g+wx"(用逗號合併多個設定)
  • chown 修改擁有者 chown userName.grpName fileName, chown .grpName fileName
  • chgrp 修改所屬群組

Log


  • /var/log/dmesg 開機記錄 (指令dmesg,插上USB後用它查/dev/sdx、檔案系統格式資訊)
  • /var/log/secure 安全記錄
  • /var/log/messages 系統記錄

vi

一般模式、編輯模式(i,o,a)、命令模式(按ESC,最下方左側出現:)

使用者帳號


  1. groupadd 新增群組 groupdel 移除群組(群組必須是空的)
  2. useradd 新增使用者 -g 主要群組 -G 附加群組
  3. cat /etc/passwd 人員清單
  4. /etc/skel/ 預設 /home/user 的範本
  5. id username 列出使用者資訊
  6. userdel 刪除使用者 -r 移除家目錄
  7. usermod 修改使用者設定
  8. chsh 修改使用者的 shell -> /sbin/nologin 禁止登入

程序管理


  1. ps / ps -f 完整資訊 / ps aux 顯示 CPU, RAM, 狀態
  2. top 列出 CPU/Memory/Process 資訊,似 Windows 工作管理員
  3. pstree 列出行程從屬關係
  4. 指令後方加 & -> 丟入背景執行 == 先執行,Ctrl-Z 再輸入 bg
  5. jobs 列出背景行程
  6. fg 將上個背景行程拉回前景 / fg n ⇐ 配合 jobs 取得序號
  7. 優先權:nice 值(NI),用 ps l 看 NI,或用 -o comm,pid,ni 指定顯示欄位。NI 預設為 0,用 nice 指令可增減 NI 值啟動特定程序。renice NI值 pid 調整執行中程序的 NI 值
  8. kill pid 停止程序(請其自行了斷) / kill -9 pid 強制中止
  9. free 觀察記憶體、Swap
  10. 優先權:另有 Priority (PRI),預設 80,PRI + NICE 為實際用於分配優先權的值
  11. cat /proc 樹狀結構
  12. /proc/meminfo 記憶體 /proc/partitions 磁碟分割 /proc/cpuinfo CPU資訊 /proc/PID數字 => 該程序的資訊(attr, auxv, cmdline,cpuset,cwd,environ,io...)
  13. 甚至可改主機名稱 echo "newname" > /proc/sys/kernel/hostname

防火牆


  1. firewall-cmd --state 顯示目前狀態
  2. firewall-cmd --get-active-zone 列出各網路介面的 Zone
  3. firewall-cmd --zone=public --list-all 列出 public Zone 的所有服務
  4. firewall-cmd --get-zones
    public / external / dmz /work / home / internal / trusted / drop / block
  5. firewall-cmd --zone=home --change-interface=enpls0 指定 Zone 使用的網路介面
  6. firewall-cmd --permanent --zone=home --change-interface=enpls0 ⇐ 永久保存設定
  7. firewall-cmd --reload 重新讀取設定檔
  8. firewall-cmd --get-services 列出所有服務 dns, ftp, http, https, nfs, ntp, pop3s.... /usr/lib/firealld/services
  9. cat /usr/lib/firewalld/services/dns.xml 可知其對應 53/tcp, 53/udp 埤
  10. firewall-cmd --zone=public --add-service=dns 開放 DNS 服務 / --add-port=9958/tcp
  11. systemctl disable firewalld 下次開機後不再啟動 / systemctl stop firewalld 立即停用

壓縮打包


  1. gzip 附檔名為 .gz
  2. zip/unzip 配合 Windows
  3. tar -cvf name.tar file* 打包 -czvf 打包壓縮,形成 .tgz
  4. tar -xvf name.tar 解開 / -zxvf 解壓並解開
  5. bzip2 / bunzip2 => .bz2

時間


  1. 設定時區 cp /usr/share/zonefile/Asia/Taipei /etc/localtime
  2. date +%Y%m%d 得 20190104 %H、%M、%S
  3. date MMDDhhmmYYYY 設定時間,如 date 010410002019
  4. touch `date +%Y%m%d`.txt以 yyyyMMdd.txt 檔名建立檔案

套件


  1. RPM 套件的平台附檔名
    i386 - Pentium 3/4, AMD K7
    i586 - Pentium MMX, AMD K5, K6
    i686 - Pentium 3,4,M & AMD Athlon, Duron, Thunderbird+
    X86_64 Xeon, i5,i7, AMD K8, Athlon64
    ppc - DEC Alpha, PowerPC
    noarch - 不限平台
  2. rpm -qa 查詢已安裝 -qi 查詢特定套件 -ql 查詢套件檔案 -qf 查詢檔案之安裝來源
  3. rpm 套件相依性複雜,交給 yum 代勞才是王道
  4. yum install / update / remove / search(搜索特定文字) / list(列出所有)
  5. ant - Java 寫的建置工具
  6. yum repolist
  7. yum -y install epel-release ⇐ 新增套件庫

工具指令


  1. du -h 各目錄使用空間
  2. df -h 各分割區空間
  3. dd if=/dev/zero of=file3m bs=1M count=3 產生 3M 大小的檔案
  4. wc 計算字數
  5. tr 取代或刪除文字
    echo "ABCDE" | tr ABC xyz
    echo "ABCDE" | tr [:upper:] [:lower:] 尚有 [:alpha:] [:alnum:] [:blank:] [:digit:]
    echo "ABCD" | tr -d 'A'
  6. scp 透過 ssh 複製檔案
  7. seq 1 12 產生 1-12 數字 seq 1 2 11 遞增 2 seq -w 1 2 11 左補零同寬
  8. sort 排序
  9. uniq 相鄰相列相同者合併一列
  10. cut -d',' -f 2 filename,CSV取第二欄,不加 -d 預設以 \t 分隔
  11. split -b 1m file3m -> 拆成三個 1MB 檔案, 檔名 xaa xab xac
  12. cat xaa xab xac > joinfile 三檔合一
  13. diff joinfile file3m 比對是否相符
  14. ping BJ4
  15. traceroute BJ4
  16. hostname / hostnamectl 印出詳細設定 / set-hostname
  17. mail -s "subject" jeffrey@mail.com
  18. mutt 互動式文字介面郵件軟體

bash


  1. alias ls='ls --color=tty'
  2. 常用別名可寫成 ~/.bashrc
  3. echo 'AAA, BBB' (加-n不換行)
  4. echo -e"A\nB\tC\nD"
  5. 預設變數 (ex: echo $HOME)
    HOME(家目錄)、IFS(欄位分隔字元)、PATH、USER、UID、HISTFILE(指令歷史檔案位置)、LANG、PWD、RANDOM(0-32767亂數)
  6. var="A"
    echo $var 或 echo "$var"
  7. read var 鍵盤輸入變數
  8. $? ⇐ 上個指令的結束碼,DOS Exit Code
  9. test -d 測試是否為目錄 -e 檔案是否存在 -s 檔案是否大於0 -r 檔案是否可讀 -w 檔案是否可寫入 -x 檔案是否可執行 -L 檔案是否為連結 (搭配 echo $? 可顯示結果)
  10. test -n 字串長度是否大於0 -z 字串長度是否為0 str1=str2/str1!=str2 字串相等或不相等
  11. test n1 -eq n2, n1 -ne n2, ne -ge n2, n1 -gl n2, n1 -le n2, n1 -lt n2
  12. ~/.bashrc 設定別名
  13. ~/.bash_profile 設定環境變數
  14. shell script : $1 $2 -> myscript v1 v2, $1=v1, $2 = v2
  15. if 分支
if test 測試
then 
  ...
else
   ...
fi
  1. for 迴圈
for n in 1 2 3 4 5 (可用 `seq 1 5` 取代 1 2 3 4 5)
do
   echo $n
done

網路相關


  1. ifconfig 查網卡資訊
  2. cat /etc/hosts IP 對照表
  3. ifconfig enp0s3 192.168.1.30 netmask 255.255.255.0
    ifconfig enp0s3 up / down
  4. ip address show
    ip -s link show enp0s3 列出傳輸量統計
    進階用法:指派IP、刪除IP、變更屬性
  5. NetworkManager 服務,適合筆電在不同場合變換網路設定
  6. netstat (yum -t install net-tools)
  7. ncftp 續傳、網址下載 位於 EPEL (Extra Package for Enterprise Linux)

服務


  1. systemctl 取代 init 管理系統服務
  2. systemctl set-default multi-user.target / graphical.target 設定開機進入命令列模式或GUI
  3. systemctl isolate multi-user.target / graphical.target 立刻進入命令列模式或GUI
  4. 服務結尾 .service 持續運行快速回應 .socket 有連線才啟動
  5. /usr/lib/systemd systemd 的執行檔
  6. /usr/lib/systemd/system Unit服務與Target設定檔
  7. systemctl start/stop/restart/enabled(開機啟動)/disable(開機停用)/status service_name
  8. /etc/init.d 啟動時要執行的服務,由各套件安裝
  9. /etc/rcX.d 不同 runlevel 要啟動的服務
  10. /etc/rc.local 開機後自動執行的腳本
  11. chkconfig --list 列出服務在各 runlevel 的啟動設定
  12. xinetd 靠行時服務,有請求時啟動程式出來服務,例如:telnet, talk
  13. Anacron (yum install cronie-anacron)
    依頻率執行,如:一天一次,開機後五分鐘執行

伺服器

書中還介紹了 Apache、FTP、vsftpd、DNS、postfix、SMTP、IMAP、POP3、RoundCube Web Mail、Docker 等伺服器架設與設定,Docker 部分已做過研究,其他伺服器評估自己架設的機率不高,待有需要再查。

CentOS Basic


Comments

# by Daniel

這本書是不是透露了大大住在哪裡????

Post a comment