Linux系統管理之總結
阿新 • • 發佈:2017-09-16
博客 linux 運維 遊戲 it 互聯網
總結: 文件系統:基礎、文件、目錄管理,用戶及權限管理、bash基本特性: 命令歷史、hash、命令補全、路徑補全、glob、快捷鍵、IO重定向、管道、變量、vim、bash編程、變量、配置文件、算術運算、測試、grep,fgrep,egrep、測試、find、特殊權限進程安全上下文、bash編程。 touch,state mkdir,tree,rmdir,install,cp,rm,mv 用戶: 用戶認證 useradd,usermod,userdel passwd,chage 組;用戶授權機制 groupadd,groupmod,groupdel gpasswd chfn chsh finger su id pwck 權限: chmod , chgrp , chown --reference=IFILE -R -L 命令歷史:啟動時,將HISTFILE變量中的文件中的內容加載至內。停止時,將歷史中新增加的條目同步至HISTFILE變量中的文件中 hash: 運行命令時,bash提請內核運行為一個進程,bash在PATH變量中查找命令的代碼,記錄hash中。下次查找時,先找hash中(O1標準),再找PATH 命令補全: 從PATH變量查找 路徑補全: 從用戶所給目錄中找 glob: *任意長度任意字符,? 任意單個字符 , [] 任意範圍內的任意單個字符[abc] 或a或b或c , [^] 任意範圍外的任意單個字符 快捷鍵: Ctrl + a 行首, Ctrl + e 行尾, Ctrl + l 清屏, Ctrl + s 暫停屏幕, Ctrl + q 取消暫停, Ctrl + c 撤消命令執行 管道:任何一個打開的文件,都有一個文件描述符追蹤。上一個文件的標準輸入作為下一個文件的標準輸出。最後一個命令在當前shell的子進程中運行 IO: 覆蓋,追加,set -C 關閉 ,合並 &> , > FILE 2>&1 , > FILE1 2> FILE1 變量: 過程式編程: 選擇、循環、順序 以指令為中心組織數據。 對象式編程:以數據為中心組織指令。 bash過程式編程: magic number ,純文本 , 變量類型 內部數據的類型 弱類型 bash , 不申明,直接引用,賦值 ,直接運算隱式轉換 強類型 必須申明 變量類型的作用: 內部數據的存儲格式 數據的範圍 參與的運算 vim 使用: vim + FILE vim -o | -O FILE1 FILE2 Ctrl + w 松手後按 : 上,下,左,右 vim FILE1 FILE2 ... :first :pre :next :last 特性: syntax on|off set ai|noai set ic|noic set hlsearch | nohlsearch set tabstop=# set nu|nonu 命令模式 光標跳轉: hjkl w 行首 e 不在行尾,當前單詞行尾。在行尾,下個單詞行尾。 b 不在行首,當前單詞行首。在行首,上個單詞行首。 [] {} [#][]x [#]r | R d[] | dd 刪除 y[] | yy 復制 c[] | cc 刪除並進入INSERT模式 其他操作 視圖: v | V 進入編輯模式 i,I a,A o,O c[],cc 保存並退出文件: ZZ 退出編輯模式: ESC 未行模式: 在命令模式中輸入 : :地址定界[email protected]@要替換的內容@g/i 地址定界: % 全文 # 第#行 #1,# 從#1至#行的所有內容 /part1/,/part/ 第part1模式所匹配到的內容所在的行起始至第part所匹配的到的內容所在的行結束。正則表達式的元字符 #,/part/ /part/,# $ 最後一行 #,$ 第#至$行 /part/,$ PATTERN: 支持正則表達式 . * : .* \? , \+ \{m,n\} , \{m\},\{n\} 支持(),正則表達式引擎將括號所匹配到內容保存至內置變量中,依次為\1,\2,.... 要替換的內容: 支持後向引用 \1,\2,.... g/i g: 當作行有多次出現模式匹配至的內容時,只替換一處 i: 忽略PATTERN的大小寫匹配 退出文件: :wq 保存文件內容並退出 :q 不保存文件內容並退出 bash編程 if CONDITION; then if-ture ## CONDITION執行狀態結果為0時,執行此分支 fi if CONDITION; then if-ture else if-false ## CONDITION執行狀態結果非0時,執行此分支 fi if CONDITION; then if-ture elif CONDITION; then if-ture elif CONDITION; then if-ture ... else all-false ## 以上條件均不滿足時,執行此分支。只要滿足其中一個分支,執行後會自動退出 fi 變量 本地變量 對當前shell有效,對其他無效 環境變量 對當前shell及子shell有效,對其他終端無效 局部變量 在調用函數運行的生命周期中變量有效 位置變量 類似於後向引用,正則表達式引擎存儲括號中匹配到內容至內置的變量中。$1,$2,.... 存儲向腳本傳遞的對應位置的參數,方便調用 特殊變量 $#,[email protected],$*,$? $*: 當作一個整體。 [email protected]: 參數獨立存在。 $?: 當作命令的返回值 本地變量 賦值變量: name=value 將value值存儲至name變量名所表示的內存空間中 當value有空格時,需要用引號: name="1 2 3" 查看變量: set (本地和環境) 引用變量: ${name} 或 $name ${name} 容易與變量名混淆的字符,能作為變量名存在的字符和變量在一起時,需要用到引號 name=pig echo "there are some $names" echo "there are some ${name}s" $name 不會產生混淆時,可以使用$name 環境變量 賦值變量: declare -x name=value , export name=value 1)變量引用實現賦值 name=$mingetty 引用後,存回原處: name=$name 引用後,存回別處: xue=$name 2)命令引用實現賦值 name=$(COMMAND) name=`COMMAND` 3)純字符 name=value 查看變量 export printenv env 引用變量 $name 局部變量: 調用函數片段的生命周期內有效 位置變量 $0: 命令本身 $1: 向命令傳遞的第一個參數 $2: ... shift # 換港符 特殊變量 $* 調用所有傳遞給命令的參數,所有參數當作一個整體 [email protected] 調用所有傳遞給命令的參數,每個參數獨立存在 $# 傳遞給命令的參數的個數 $? 命令的執行狀態結果 配置文件 全局: profile類 功能: 1) 腳本 2) 環境變量 配置文件 /etc/profile, /etc/profile.d/*.sh, ~/.bash_profile 個人: bashrc類 功能: 1) 別名 2)本地變量 配置文件 /etc/bashrc, ~/.bash_bashrc 登陸式 /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc 1) su - user 或 su -l user 2) 終端通過賬號密碼 非登陸式 ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh 1) su user 2) 腳本 3) 圖形界面下啟動的終端 讀取配置文件 1). 或 source 多次重讀時,會重復出現(有副作用) 2)重新登陸終端 算術運算: + - * / % let A=$B+$C 變量引用實現賦值 $[$B+$C] $(($B+$C)) 命令引用實現賦值 $(expr $A % $B) 註意: $(expr $A \* $B) 變量取模: let A=$RANDOM%$B 測試 test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]] 數值測試: -eq,-ne -lt,-le -gt,-ge 例如: test $A -lt $B [ $A -eq $B ] [[ $A -gt $B ]] 字符測試: 必須都用引號,除了PATTERN,且必須用[[]] == != ~ 例如: test "$A" == "$B" [ "1" == "$A" ] [[ "$A" ~ PATTERN ]] PATTER支持正則表達式 -z STRING 是否存在且為空 -n STRING 是否存在且不為空 fgrep,grep,egrep COMMAND PATTERN file 用PATTERN逐行匹配file中的每一行,將PATTERN匹配到的字符所在的行顯示到標準輸出 PATTERN 由特殊的元字符組成 不同工具使用不同的正則表達式引擎,或不同的特殊元字符 fgrep 純文本字符 grep 正則表達式元字符 egrep 擴展正則表達式元字符 perl perl正則表達式元字符 正則表達式字符: . 任意單個字符 * 對前面單個字符任意次數: .* \? 前面單個字符0或1次 \+ 前面單個字符至少1次 \{m,n\} \{m,\} \{,n\} \(\) 支持後向引用,正則表達式引擎將括號中的模式匹配到的內容存儲在內置的變量中 擴展正則表達式字符 . * ? + {m,n} {m,} {,n} () | 分組 : c|Cat 表示 c或 Cat (c|C)at表達cat或Cat 文件測試 -t fd -s 文件有內容 [ -N FILE ] 最近一次查看文件後,是否被修改(重定向或編輯過) [ FILE -ef IFLE ] 指向同一設備的同一inode [ FILE -nt IFLE ] FILE是否比IFLE更新或修改時間戳比IFLE的時間戳離現在更近 -ot -O | -G -[fdbcLhsp] -a | -e -r | -w | -x find命令 -ls , -delete , -fls /path/to/somefile -exec ,-ok find -exec {} \; 所有文件 find | xargs -I {} command {} 單獨的文件 {} 代表每一個匹配到的文件 -user USERNAME , -group GRPNAME -nouser , -nogroup -uid UID , -gid GID -name "glob_expr" -iname "glob_expr" -regex "expression" -iregex "expression" -type {f|d|c|b|l|s|p} -size [+|-]#[KMG] -perm [\|-]# \( expr -a expr \) -not \( expr -a expr \) 相當於 -not expr -o -not expr \( expr -o expr \) -not \( expr -o expr \) 相當於 -not expr -a -not expr 用戶對文件的權限 用戶同文件的屬主,應用屬主的權限 同文件的屬組,應用屬組的權限 應用其他用戶的權限 進程的安全上下文 當用戶對文件有權限運行為一個進程 進程的屬主同用戶名 進程的屬主同文件的屬主,應用屬主的權限 同文件的屬組,應用屬組的權限 應用其他用戶的權限 r 文件可用文件查看類命令查看 目錄可用ls查看 w 文件可修改 目錄可創建或刪除目錄中的文件 x 文件可運行為一個進程 目錄: 可用ls -l 或cd 特殊權限 suid,sgid,sticky 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 suid: 當文件有suid權限時,文件被運行為一個進程後,其進程的屬主為文件的的屬主 sgid: 當目錄有sgid權限時,任何用戶在其目錄下創建的文件的屬組同目錄的屬組 sticky: 當目錄有sticky權限時,目錄中不同用戶的文件只能由文件對應的用戶刪除 權限位的映射: 當存在x時,為小寫 當不存在x時,為大寫 例如: 文件為: rw- r-- --- 給予suid權限後: rwS r-- --- 文件為: rwx r-- --- 給予suid權限後: rws r-- --- 編程 for i in 列表; do 循環體 done 列表: 1) 直接給出 2) glob /etc/lib/* 3) 命令生成 $(ls /) 4) 命令 $(seq start step end) $(seq 1 2 100) 5) {start..end} {1..10} 系統管理 磁盤管理 分區、查看、調整、格式化、掛載、編程 RAID,LVM2 程序包管理 安裝、重裝、升級、降級、卸載、查詢、檢驗、數據庫、緩存 進程管理 htop,vmstat,glances 網絡管理 命令行、配置文件、圖形 系統啟動流程 加電 --> 自檢 --> Bootsquence(MBR) --> MBR工作 --> kernel工作 --> 只讀切換掛載rootfs --> 運行init,init工作 grub命令 grub-install, chroot /mnt/sysimage --> root(hd0,0) --> setup (hd0) 磁盤管理 分區、查看、調整、格式化、掛載、編程 RAID,LVM2 mdadm -C /dev/md0 -a yes -l {1,0,5,10} -n # -x # /dev/sda{1,2,3} mdadm -D /dev/md0 mdadm -S /dev/md0 mdadm /dev/md0 -f /dev/sda1 mdadm /dev/md0 -r /dev/sda1 mdadm /dev/md0 -a /dev/sdb1(fd) /dev/sda{1,2,3} pvcreate /dev/sda{1,2,3} vgcreate -s #[KMG] VGNAME /dev/sda{1,2,3} vgremove VGNAME vgextend VGNAME /dev/sda4 (8e) pvmove /dev/sda3 ; vgreduce /dev/sda3 lvcreate -L #[KMG] -n LVNAME VGNAME lvpath: /dev/mapper/VGNAME-LVNAME /dev/VGNAME/LVNAME lvcreate -L #[KMG] -s -n LVNAME_snap -p r lvpath 擴展: lvextend -L [+]#[KMG] lvpath resize2fs lvpath 縮減 umount lvpath e2fsck -fy lvpath resize2fs lvpath [-]#[KMG] lvreduce -L [-]#[KMG] lvpath mount lvpath DIR 程序包管理 安裝、重裝、升級、降級、卸載、查詢、檢驗、數據庫、緩存 安裝: rpm -ivh FILE.rpm yum install dnf install apt-get install 重裝: rpm -ivh --replacepkgs yum reinstall dnf reinstall apt-get reinstall 升級: rpm -Uvh(安裝或升級) -Fvh(僅能升級) yum update dnf update apt-get update 降級 rpm -Uvh | -Fvh --oldpackages yum downgrade dnf downgrade apt-get downgrade 卸載 rpm -e yum remove dnf remove 查詢 倉庫信息 yum|dnf repolist 程序包: rpm -q -a rpm -q -f CAPABILITY 文件由哪個包所提供 rpm -q --whatprovides CAPABILITY 文件或功能由哪個包所提供 yum|dnf --whatprovides CAPABILITY rpm -q --whatrequires CAPABILITY 包內的信息 rpm -q -i rpm -q --changlog rpm -q -L rpm -q -c, -d rpm -q --scripts | --triggers | --conflicts rpm -R 包依賴的功能 yum deplist rpm --provides 包提供的功能 yum info 校驗 rpm -V rpm --import GPG_FILE 數據庫 rpm --initdb 初始化,存在時,不執行任何操作 rpm --rebuildb 重建 緩存 yum clean {all|metadata|packages} yum --disablerepo= expr_glob --enablerepo= expr_glob yum --downloadonly --downloaddir=DIR --noplugins --nogpgcheck --version -q rpm --nodigest | --nosignature | --import --nodeps --noscripts --nofiledigest --nomd5 -d -c -l --force 進程管理 htop,vmstat,glances 網絡管理 命令行、配置文件、圖形 address: 192.168.1.1/24 或 192.168.1.1 255.255.255.0 ifconfig eth0 address [up|down] ifconfig [IFACE] [up|down] ifconfig IFACE metric N | mtu N | broadcast BROADCAST | multicast ip addr show|flush [dev IFACE] [label LABEL] [scope {global|link|host}] [primary|secondary] add|del address dev IFACE [broadcast BROADCAST] [label LABEL] [scope {global|link|host}] route add|del -host|-net address gw GW [dev IFACE] [scope {global|secondary}] ip route add|del address via VIA dev IFACE [src SRC] [mtu MTU] ip route show|flush via VIA [dev IFACE] src SRC ip link show up|dev IFACE ip link set [ dev IFACE up|down ] arp on | arp off multicast on | multicast off netstat | ss -t 、 -u 、 -w -a , -l , -n , -p netstat -i ss -m | -o STATE EXPRESSION STATE established listen EXPRESSION ‘( dport = :ssh or sport = :ssh )‘ 系統啟動流程 加電 --> 自檢 --> Bootsquence(MBR) --> MBR工作 --> kernel工作 --> 只讀切換掛載rootfs --> 運行init,init工作 1、CPU自舉 ,裝載ROM特定地址空間中的特定指令,完成自檢,顯示BIOS界面 2、依據BIOS配置,從上至下查找第一個有MBR的設備或能模擬MBR的設備,完成系統引導 磁盤: MBR 網卡: 通過網卡發送廣播,找到dhcp服務器,獲取IP和tftpIP,從tftp獲取引導程序 3、MBR工作 1)找到MBR,運行MBR,在MBR後有一段空間作為1.5階段(安裝時,自動將1.5階段放在MBR之後,是os所在分區的文件系統的驅動) 2)step1.5,bootloader通過1.5找到2 3)step2,提供菜單,將用戶選擇的內核及ramdisk加載至內存中, 將控制權交給kernel 4、kernel工作 1)自解壓、展開 2)探測硬件 3)加載驅動(包括ramdisk) 5、ro掛載rootfs 6、運行用戶空間第一個程序init 設定默認啟動選項 1)系統初始化 2)啟動或關閉服務 3)打印登陸提示符(字符終端或圖形終端) bootloader windows: NT loader Linux: 1) LILO Linux loader 2) grub grand uniform boot 1系 CentOS 5,6 2系 CentOS 7 (完成重寫) ramdisk分類 1)CentOS 5 ramdisk 將ramdisk加載至磁盤中時,內核將其當作磁盤,會再緩沖一次 2) CentOS 6,7 ramfs 將ramfs加載至磁盤中時,內核直接讀取 init分類 CentOS 5 init 配置文件: /etc/inittab 1、大量進程創建、銷毀 2、進程的依賴性 CentOS 6 upstart --> init(重命名) 配置文件: /etc/inittab(兼容centos5) /etc/init/*.conf (BUS)消息總線進行進程間通信,讓互相依賴的進程能接近並行起動進程。 dbus機制解決進程間的依賴關系 CentOS 7 systemd 只啟動開機需要的服務,其他服務只是告訴你啟動了,實際並沒有啟動。而是在第一次訪問時,在臨時啟動,可實現秒級別啟動。 進程管理: htop、glances、vmstat top: 命令選項: -d 、-b 、-n -d # 刷新間隔 -b 分批次顯示 -n # 顯示多少個批次 內建命令: s,k,q l,t,1,m s 刷新間隔高速 k 殺進程 q quit l uptime t task and cpu 1 cpus m mem and swap top - 15:01:32 up 2 days, 4:12, 4 users, load average: 0.53, 0.44, 0.29 Tasks: 137 total, 1 running, 136 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.5%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 1460312k total, 1403796k used, 56516k free, 135724k buffers Swap: 2047996k total, 1268k used, 2046728k free, 1129308k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND uptime命令: l 控制顯示 15:01:32 當前時間 up 2 days 系統在線時長 4 users 在線用戶數 load average: 0.53, 0.44, 0.29 過去1,5,15分鐘的平均負載 控制CPU及TASK顯示: t Tasks: 137 total, 總進程數 1 running, 136 sleeping, 0 stopped, 0 zombie Cpu(s): 每個CPU,1 0.0%us, 0.5%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st 控制Mem及Swap顯示: m Mem: 1460312k total, 1403796k used, 56516k free, 135724k buffers Swap: 2047996k total, 1268k used, 2046728k free, 1129308k cached htop (Fedora-EPEL) a affinite cpu 緩存命令率 l list 列出進程打開的文件 s systemcall 進程發起的syscall glances 服務端: glances -s -B 192.168.1.2 -p 8888 -P 123 客戶端: glances -c -p 8888 -P 123 192.168.1.2 b 以字節顯示網絡速率 m/n/d 控制mount,network,disk模塊的顯示 t # 延遲間隔 1 每個cpu信息單獨顯示 -f /path/to/somefile galance顯示的結果保存至文件中 -o {HTML|CSV} 文件的格式 vmstat [delay [count]] delay 刷新延遲 count 刷新次數 -s 顯示內存信息 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 1268 695236 169916 471904 0 0 13 46 56 90 7 21 61 10 0 procs r running b blocking memory swpd swap占用大小 free 空間內存 buff 內存分配為buff占據大小 cache swap si swap input 從內存至磁盤中的swap速率 so io bi block input 從磁盤至內存 bo system in/int interrupt cs context swtich cpu us user space sy system space id idle wa wait st stole grub grub-install --root-directory=DIR DEVICE DIR 為boot目錄的上級目錄 /boot --> / /mnt/boot --> /mnt DEVICE 磁盤 , 要給哪個磁盤安裝grub boot: linux resuce chroot /mnt/sysimage grub root(hd0,0) setup (hd0) (hd#,#) hd# #表示,第幾個磁盤 # 表示,指定磁盤的第幾個分區 內核編譯 獲取硬件信息: lscpu, lspci, lsusb, lsblk hal-device 開發環境 下載源碼: kernel.org 展開至內核源碼樹 tar xf linux-VERSION.RELEASE.tar.xz -C /usr/local/src ln -sv linux-VERSION.RELEASE linux 清理 make clean | mrproper | distclean 內核選項 make config make menuconfig make xconfig QT,gnome make gconfig GTK,KDE make allnoconfig make defconfig 編譯 make [-j #] make dir/ make dir/file.[oiSs] make dir/file.ko make all [*] make vmlinux make modules [M] make modules_install make install screen命令 screen [-S NAME] exit Ctrl + a + d screen -ls screen -r NUM 光盤啟動流程 POST -- MBR(boot.cat) -- isolinux.bin -- kernel(initrd.img) -- anaconda anaconda程序 運行:配置,安裝,配置 配置文件: 命令段,程序包段,腳本段 kickstart文件生成 1、system-config-kickstart 和 xmanager 2、vim編輯 光盤生成命令: mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 i386 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /tmp/myiso -b 2階段 -c 1階段 -o 輸出文件 SELinux 配置文件: /etc/selinux/config <--- /etc/sysconfig/selinux MAC: 強制訪問控制 用戶對文件的權限--> 進程對文件的權限 --> 文件type是否屬於進程的domain的子集 是: 可訪問 否: 1) chcon [-R] -t TYPE FILE restorecon [-R] FILE 2) 訪問記錄於/var/log/audit.log 3) setenforing 0 SELinuxTYPE: target: 部分 從permissive/enforing <--> disable: 1)改變配置文件 2)重啟 從enforing <--> permissive setenforing {0|1} 0: permissive 1: enforing 查看狀態: getenforing 設定程序功能開啟或關閉 獲取: getsebool [-a | 程序功能名] 設置: setsebool [-P] SEBOOL=VALUE -P 設置至規則庫中,(找到規則,設定,轉換為binary格式) while語句: while CONDITION; do 循環體 done sed工具使用: 全文都會一行一行的加載至pattern space中, 每加載進一行, 首先匹配: 地址定界是否符合,符合:執行command,顯示執行後的結果至標準輸出.不符合,顯示至標準輸出. n 加載一行後,顯示後,讀取下一行,覆蓋本行,行的序號遞增 sed [OPTIONS...] ‘地址定界command;[地址定界command;...]‘ FILE1 FILE2 ... OPTIONS: -i 將模式空間中的內容,寫入文件中 -n 不顯示默認輸出的內容 -r extension reguler expresison -f /PATH/TO/SOMEFILE 地址定界: #[,#] /pat/[,/pat/] #~# = ! 取反,在地址定界後 command d, p, w /PATH/TO/FILE, r /PATH/TO/FILE, a \TEXT, c \TEXT, i \TEXT, s 分隔符 模式 分隔符 修飾符 s// s|| s,, [email protected]@ s## 模式 修飾符: i/g/w/p ignore global w /path/to/somefile p 僅顯示替換的結果 n,N g,G get 模式 <-- hold h,H hold 模式 --> hold d,D 刪除行 until, for, while, break, continue, case while CONDITION; do 循環體 條件正確進入 done until ! CONDITION; do 循環體 條件不確進入 done for ((控制變量初始化;條件判斷表達式;控制變量修正表達式)); do 循環體 done while read line; do 循環體 done < /PATH/TO/SOMEFILE while true; do if CONDITION; then condition else break fi done until false; do if CONDITION; then break else continue fi done case 變量 in glob|純字符) statement ;; ... *) statement ;; esac 函數 函數: 代碼片斷 函數名: 代碼片斷的簡短名稱 調用函數名:進入函數的上下文 函數的生命周期: 調用起始,調用後結束 函數返回狀態碼: 函數體中最後一個命令執行結束後或return # 返回的#的值 局部變量與本地變量相同時, 局部變量只存活在函數體中 函數/變量/文件名 1) <255 2) 見名知義: small_dog, smallDog 3) 區分大小寫 4) 不能有關鍵字: if, else, then, while 等 函數語法; funciton f_name { 函數體 } f_name() { 函數體 } systemd<CentOS 7的init程序> 完成用戶空間的一切事務,但系統調用仍由kernel執行 init新特征: 並行啟動進程 按需激活進程: 啟動速度快 快照 依賴控制服務啟動邏輯 /etc /usr/lib /run /systemd/systemd .service 管理服務 .target 模擬實現運行級別 .device 定義內核識別的設備 .mount 定義文件系統的掛載點 .socket 進程間通信的文件 .snapshot 管理系統快照 .swap 標識swap設備 .automount 文件系統自動掛載點 .path 定義文件系統中的一個文件或目錄 沒有腳本靈活 非由systemd啟動的進程,systemd無法控制 systemd級別不是完全兼容: 2, 3, 4, multi-user.target 都是單用戶模式 systemctl不會讀取標準輸入數據流 跟用戶環境無關(PATH) unit均受5min超時時長 systemctl {start|stop|restart|status|relaod|reload-or-restart|try-restart} name.service 服務狀態: systemctl list-units --type TYPE [--all] TYPE: service 服務的狀態 target 運行級別 是否運行: systemctl is-active name.service 依賴: systemctl list-dependencies name.service 開機是否自啟: systemctl list-unit-files --type service is-enabled name.service 設定服務開機是否自啟 systemctl enable|diable|reenable name.service systemctl mask|umask name.service 調整運行級別: systemctl isolate name.target 設定默認運行級別: systemctl get-default systemctl set-default name.target systemctl rescue|halt|power off|reboot|suspend|hibenate|hybrid-sleep suspend 掛起 hibenate 保存快照 hybrid-sleep 快照並掛起 bash編程: 過程式編程: c 完成特定功能 選擇/循環/順序 對象編程: 類,多次調用, c++, java 數組: ${array[index]} index: [0,....] 數值 declare -a 字符 declare -A (bash version 4.0) 賦值: array[index]= array=("val1" "val2" "val3" ...) array=([0]="val1" [1]="val2" [10]="val3" ...) read -a array array[${#array[@]}]= 銷毀: unset array[index] 字符串: 知道變量的存儲值時可以使用:非通用格式 ${var:3} 過3取所有 ${var:3:3} 過3取3個 ${var: -3} 取後3個 ${var#*/} 左向右,至第一個匹配到/全刪除 ${var##*/} 左向右,至所有匹配到/全刪除 var=/var/log/message 基名: echo ${var##*/} ${var%/*} 右向左,至第一個匹配到/全刪除 ${var%%/*} 右向左,至所有匹配到/全刪除 var=/var/log/message 目錄名: echo ${var%/*} 替換: ${var/pattern} 左向右,匹配到pattern的字符串,第一個刪除 ${var/pattern/substi} 左向右,匹配到pattern的字符串,第一個替換 ${var//pattern} 左向右,匹配到pattern的字符串,所有刪除 ${var//pattern/substi} 左向右,匹配到pattern的字符串,所有替換 ${var/#pattern} 左向右,匹配到pattern的字符串,首行刪除 {var/#pattern/substi} ${var/%pattern} {var/%pattern/substi} 默認值: 不存在時,返回string ${var:-STRING} ${var:=STRING} 存在時,返回STRING ${var:+STRING} 不存在,報錯: ${var:?STRING} 配置文件: # vim file1 HOSTNAME=lcc.org # vim file.sh #!/bin/bash # [ -f file1 ] && source file1 HOSTNAME=${HOSTNAME:-lcc.org} if [ -z ${HOSTNAME:-} ]; then HOSTNMAE=lcc.org fi hostname $HOSTNMAE install命令創建目錄或復制文件 install -d -m MODE -o OWNER -g GROUP FILE mktemp:創建臨時文件或目錄 mktemp [-d] [-p DIR] [--tmpdir DIR] [-u] FILE.XXX XXX 至少3個 awk命令 ~ /pat/ !~ "" == "" print item1,item2 printf "FORMAT",item1,item2 %i,%d decimal,interger %s 字符串 %e 科學計數法 %f floating %G %e + %f #[.#] 寬度 .# 精度 + 符號 - 左對齊: 默認右對齊 模式支持擴展正則 $表示字段 ""中不用使用變量,引用字符 表示行數;NR >= # && NR <= # 取反在PATTERN前 awk [OPTION...] ‘PATTERN{ACTION STATEMENT;ACTION STATEMENT;...}‘ FILE1 FILE2 ... -F ‘‘ 相當於 -v FS=‘‘ -v OFS=‘‘ 字段分隔符: FS, OFS 行分隔符: RS, ORS 行:NR, FNR ARGC 命令行除了program個數 ARGV 將命令行參數保存於ARGV的數組中 if (condition) {statement} 或 if (condition) statement if (condition) {statement} else {statement} for (condition) {statement} while (condition) {statement} 或 do {statement} while (condition) next # awk -F ‘:‘ ‘{if ($NF != "/bin/bash"){next} else {print $0}}‘ /etc/passwd 遍歷數組: for (i in array) {print i,array[i]} 替換: sub(r,s,t) gsub(r,s,t) ("o"."O",$1) split($5,ARRAY,"%")
本文出自 “Reading” 博客,請務必保留此出處http://sonlich.blog.51cto.com/12825953/1965815
Linux系統管理之總結