1. 程式人生 > >Linux系統管理之總結

Linux系統管理之總結

博客 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系統管理之總結