码迷,mamicode.com
首页 > 系统相关 > 详细

Linux系统管理之总结

时间:2017-09-16 18:46:12      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:博客 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

		未行模式: 在命令模式中输入 :
			:地址定界s@PATTERN@要替换的内容@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,.... 存储向脚本传递的对应位置的参数,方便调用
		特殊变量 $#,$@,$*,$? $*: 当作一个整体。 $@: 参数独立存在。 $?: 当作命令的返回值

		本地变量
			赋值变量: 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 # 换港符

		特殊变量
			$* 调用所有传递给命令的参数,所有参数当作一个整体
			$@ 调用所有传递给命令的参数,每个参数独立存在
			$# 传递给命令的参数的个数
			$? 命令的执行状态结果

	配置文件
		全局: 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,,
				s@@
				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系统管理之总结

标签:博客 linux 运维 游戏 it 互联网

原文地址:http://sonlich.blog.51cto.com/12825953/1965815

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!