Linux命令

Linux关机命令 重启命令

关机:
shutdown -h now 直接关机
shutdown -h 0   直接关机
shutdown -h 10  10分钟后关机
shutdown -c 	取消关机
poweroff	    关机
halt			关机
init 0		    关机

重启:
shutdown -r  now   重启
shutdown -r 10	10分钟后重启
reboot		   重启
init 6		   重启`

命令行快捷键的使用 提升工作效率

ctrl + l(小写的L) 清屏 			对应的命令clear
ctrl + c  	终止退出当前的操作
ctrl + a    快速移动光标到行首 Home
ctrl + e    快速移动光标到行尾 End
ctrl + u    剪切光标所在到行首
ctrl + y    粘贴 ctrl+u剪切的内容
ctrl + k    剪切光标所在到行尾
ctrl + ←    快速向左移动一个单词
ctrl + →    快速向右移动一个单词
ctrl + s	锁屏(不禁止输入内容)
ctrl + q    解锁
ctrl + r	搜索使用过的命令  history 查看历史
ctrl + d    退出当前登录

路径

相对路径

hosts oldboy.txt passwd
				隔壁305 隔壁304
	  绝对路径  地球/亚洲/中国/广东/深圳/南山区/室外桃园创意园/C栋/306
	  /etc/oldboy /etc/passwd

命令

pwd print working directory 查看当前路径 当前在哪个目录
	cd	change directory  改变当前的工作目录	
	两种方式
		    1.全路径
			  cd /etc/sysconfig/network-scripts/
			2.一步步的进  相对路径查找
			  cd /
			  cd etc
			  cd sysconfig
			  cd network-scripts
	~   表示家目录 当前登录用户的家目录	
	cd ~  ===  cd 回车
	cd -  切换到上一次所在的目录
	cd .. 切换到上一级目录
	cd .  代表了当前的目录 
	ls	list	  显示目录中的内容
		-l 		  显示详细信息
		-r		  逆序排序默认是 根据首字母
	mkdir	      创建目录 make directory
		-p        递归创建目录
		 相对路径创建   mkdir test
		 绝对路径创建   mkdir /tmp/test
		 一次性创建多个目录
		 如在在/oldboy/下 创建test1 test2 test3目录
		 mkdir -p /oldboy/test1 /oldboy/test2 /oldboy/test3
	touch  	摸   创建文件	更改文件的时间 不影响文件内容
		 一次性创建多个文件
		如何在/oldboy/alex/创建 1.txt 2.txt 3.txt
		touch /oldboy/alex/test1.txt /oldboy/alex/test2.txt /oldboy/alex/test3.txt
cp copy 复制
	-r  拷贝目录及目录下面的所有内容  递归
	[root@oldboyedu ~]# #把oldboy.txt 拷贝到/opt下
	[root@oldboyedu ~]# cp oldboy.txt /opt/
	[root@oldboyedu ~]# ls -l /opt/
	total 0
	-rw-r--r--. 1 root root 0 Dec 10 10:34 oldboy.txt
	[root@oldboyedu ~]# #cp 源文件 目标地址
	[root@oldboyedu ~]# #cp  从哪里  到哪里去
Linux中大部分命令无法直接对目录进行操作 需要加参数
	[root@oldboyedu ~]# \cp -r /etc/ /opt/	直接覆盖 不提示

	很多命令都给我们起了个小名 都加-i参数 目的就是保护系统安全

	. 
	cp /opt/oldboy.txt .   拷贝oldboy.txt 文件到当前目录
	cp 文件后如果写了新的名字  则为重命名
	
	练习: 
	1.在/opt下创建 oldboy目录
		mkdir /opt/oldboy
	2.在oldboy目录下创建test1 test2目录
		mkdir /opt/oldboy/test1 /opt/oldboy/test2
	3.在/opt/oldboy目录下创建alex1.txt alex2.txt
		touch /opt/oldboy/alex1.txt /opt/oldboy/alex2.txt
	4.然后把alex1.txt alex2.txt 复制到 /opt/oldboy/test1和test2目录下
	   cp /opt/oldboy/alex1.txt /opt/oldboy/alex2.txt /opt/oldboy/test1
	   cp /opt/oldboy/alex1.txt /opt/oldboy/alex2.txt /opt/oldboy/test2
	5.然后把/opt/oldboy下的test1和test2目录 复制到 /tmp/下
	   cp -r /opt/oldboy/test1 /tmp
	   cp -r /opt/oldboy/test2 /tmp
	6.重复5的操作 在复制一遍
		\cp -r /opt/oldboy/test1 /tmp
		\cp -r /opt/oldboy/test2 /tmp
	7.history历史命令截图
	
echo 输出内容到桌面
	[root@oldboyedu ~]# echo I am lizhenya teacher > oldboy.txt
	[root@oldboyedu ~]# # echo 内容 漏斗 输入到oldboy.txt
	> 重定向 先清空源文件 在把新的内容重定向到文件中
	echo > oldboy.txt	清空文件内容
	>> 追加重定向 
	echo I am lizhenya teacher >> oldboy.txt
cat 查看文件内容
	-n 显示行号
	
tree 以树形结构显示目录 需要安装此命令
	-d  只显示目录
	-F  在目录的后面加上/ 区分是否是目录还是文件
	-L  显示目录层级
		tree -L 1 /opt/oldboy/  只显示oldboy下的第一层目录

rm	remove 删除文件或目录
	-f  force 强制删除 不提示
	-r  递归删除目录及目录下所有内容
mv  move 移动目录或文件
	mv alex1.txt test.txt	改名

vim

1)vim  编辑器 vi
	第一个里程碑 如何进入到文件 如何打开文件 
	vim oldboy.txt 如果文件不存在 则创建为新文件  无法创建目录
	vim 进入到视图模式
	第二个里程碑 如何编辑
	i o 进入到编辑模式
	第三个里程碑 如何退出
	先进入到视图模式 esc 多按
	第四个里程碑 如何保存
	输入: 进入到底行模式
	w	  保存 write
	q	  退出 quit
	q!    强制退出不保存
	wq    保存并退出
	wq!   强制保存并退出
  	2)vim快捷键
	  光标的移动
				G 	     快速移动到文件的尾部
				10G      快速移动到文件的第10行
				gg 1G    快速移动到行首
				10gg 	 快速移动到文件的第10行
				$ End 	 快速移动光标所在行的行尾
				^ Home 0 快速移动光标所在行到行首
	  复制粘贴剪切删除  视图模式
				yy		 复制当前光标所在行
				2yy		 复制光标所在连续两行
				p		 粘贴到光标所在行的下一行
				3p		 粘贴3次内容
				dd		 剪切光标所在的行
				2dd		 剪切光标所在连续的两行
				u		 撤销操作
				d$ d+End 剪切光标所在到行尾
				D	     删除光标所在到行尾				
			d^ d+Home d0 删除光标所在到行首
				dG		 删除光标所在行到文件的尾部
				dw		 删除一个单词
				s		 删除一个字母并进入编辑模式
				x		 删除一个字母
		进入编辑模式
				i a      进入编辑模式
				o		 进入光标所在行的下一行编辑
				O		 进入光标所在行的上一行进行编辑
				C		 删除光标所在行行尾并进入编辑模式
				A		 移动到行尾并进入编辑模式
				cc		 删除整行进入编辑模式
		批量操作
				1. ctrl+v 选中行
				2. 按大写I
				3. 输入要添加的内容
				4. 按两次esc
	3)vim报错
		在vim编辑文件的时候 系统自动生成一个隐藏文件.swp结尾
		如果正常退出 则生成的.swp消失
		如果处理不正常退出产生的隐藏文件.swp
		1. 直接删除.swp文件 进行编辑 新写入的内容会消失
		2. 如何恢复
			vim -r oldboy.txt 按回车保存退出
			删除.swp文件即可

		不正常退出?
		1. 不小心关闭窗口
		2. 台式机断电
		3. 自己在多窗口中打开了相同的文件  关闭一个即可
		4. 在公司中其他同事在编辑 你俩谁先编辑

目录结构网卡介绍

 Linux目录的特点
	1. 一切从根开始  / 顶点
	2. 类似于倒挂的一棵树
	3. 有层次的目录结构
	4. 每一个目录都有规范性
	4. Linux的目录可以挂在不同的磁盘上
	
		
	模拟挂载过程 光驱  所有的硬件设备都在linux系统dev目录下
	第一个里程碑
	把iso文件放入光驱内
	第二个里程碑
	如何查看光驱里的内容
	给光驱设备开一个窗口
	/mnt 目录 可以是新创建 可以是以存在的 /mnt已存在的目录  临时挂载点
	第三个里程碑 如何挂载 如何开通窗口
	命令	设备名称 窗口/目录
	mount /dev/cdrom /mnt/
	第四个里程碑 卸载 不用这个设备
	umount /mnt/
	如果挂载点有内容 则会隐藏 卸载后显示内容
	
	df -h 查看磁盘信息 查看挂载信息


	目录层次标准 FHS

3. 重要的配置文件
	/etc
	1)网卡配置文件
	ifconfig
	/etc/sysconfig/network-scripts/ifcfg-eth0
	TYPE=Ethernet   		# 网络类型 以太网
	BOOTPROTO=none			# 获取IP地址
							  三种配置方式
							  1.none   静态
							  2.DHCP	动态获取
							  3.static  静态
							  家用路由器都开启了DHCP
							  电脑 笔记本 电视 手机 平板电脑 电饭锅 电水壶
							  物联网--基础互联网--网络
							  树濑
					

	NAME=eth0				 # 配置文件的名字 网卡名称
	DEVICE=eth0				 # 硬件网卡名称
	UUID=e96acd48-0d3e-4e51-bb05-68df3913fd0d		# 唯一标识 系统为每一个硬件设备分配的唯一标识 身份证号码 干掉他
	
	ONBOOT=yes			     # 开启自动启动
	IPADDR=10.0.1.200		 # IP地址 局域网内唯一 公网上唯一
	PREFIX=24			     # 子网掩码 决定了我们网络中可使用的IP地址数量
						      1.PREFIX=24
							  2.NETMASK=255.255.255.0
	GATEWAY=10.0.1.254		 # 网关 大门口 家路由器 192.168.1.1 0.1
							  公司网络一般默认网关会更改
							  192.168.1.254
							  192.168.1.253
							  192.168.1.252
							  
	DNS1=223.6.6.6			 # 域名解析服务器 可快速方便的访问服务器
					          负责把域名解析为IP地址
							  www.baidu.com 14.215.177.38

    公用DNS: 流量			  13个顶级域名
	阿里云 223.5.5.5 223.6.6.6
	电信   114.114.114.114
	谷歌   8.8.8.8
	联通202.106.0.20
	默认的DNS 运营商下发给我们的

目录作用

etc/hosts  本地解析配置文件  DNS解析域名 解析主机名称
	    在解析域名的时候先查看/etc/hosts文件 如果有则直接解析 没有才使用我们配置的DNS进行解析域名
		jd.com 对用户提供访问的服务地址
		183.60.141.1
		jd.com
		10.0.0.29
		10.0.0.29   jd.com
/etc/hostname 主机名称的配置文件
	   第一个里程碑 如何查看当前主机名
	   centos6 centos7相同
	   hostname 
	   第二个里程碑 如何修改主机名
	   centos6 centos7相同
	   hostname alexlnb		# 临时修改主机名称 重启失效
	   第三个里程碑 如何永久修改主机名
	   vim /etc/hostname    # 永久修改主机名 centos7  必须重启后生效
	   vim /etc/sysconfig/network # 永久修改主机名配置文件 Centos6
	   第四个里程碑 如何临时+永久修改主机名
	   hostnamectl set-hostname alexlnb #centos7 永久加临时修改主机名
	   hostname 先临时修改 在更改配置文件/etc/sysconfig/network # centos6 临时+永久修改主机名称
	   
/etc/resolv.conf   配置DNS服务器的配置文件
	   配置方法不同
	   网卡配置 DNS1=223.6.6.6
	   resolv.conf nameserver 223.6.6.6
	   如果网卡中配置了DNS 如果不重启则不会覆盖 /etc/resolv.conf
	   如果重启网络服务则网卡中的dns配置会覆盖 /etc/resolv.conf
	   在工作中尽量使用resolv.conf
	   DNS服务器不稳定 223.5.5.5 223.6.6.6
	   resolv.conf中配置方法
	   nameserver 10.0.0.28
	   nameserver 114.114.114.114  


nslookup 解析服务地址

nslookup  解析服务地址 查看通过哪个DNS进行解析的 需要安装yum -y install bind-utils
/etc/rc.local  					# 开机后自动执行文件中的命令  开机自启动
chmod +x /etc/rc.d/rc.local		给源文件一个执行权限

/etc/fstab file system table 磁盘挂载的配置文件  开机自动挂载


/etc/issue 		登录服务器前显示的内容
/etc/issue.net  登录服务器前显示的内容
		echo > /etc/issue.net
		echo > /etc/issue

/etc/motd  		连接服务器后显示的内容


/etc/inittab  服务器开机后的运行级别 runlevel
centos6.X 操作系统 运行级别表示方法
面试题 请写出系统的运行级别
0	关机		init 0
1	单用户模式 救援模式 忘记密码
2   多用户模式 没有NFS存储图片
3	完全多用户模式 默认使用的
4   待开发
5	桌面模式 需要安装桌面的软件
6   重启		init 6

centos7.X 操作系统 运行级别表示方法 中文翻译成英文 target
0	关机					poweroff.target	
1	单用户模式 				rescue.target		救援模式
2   多用户模式				multi-user.target
3	完全多用户模式 			multi-user.target
4   待开发					multi-user.target
5	桌面模式				graphical.target
6   重启					reboot.target
第一个里程碑 如何查看当前的运行级别
centos6的查看方法
cat /etc/inittab
id:3:initdefault:
centos7的查看方法
[root@alexlnb ~]# systemctl get-default 
multi-user.target
第二个里程碑 如何临时修改启动级别 centos6和7相同
init 6	重启
init 0	关机
init 5	桌面
第三个里程碑 如何永久修改运行级别 开机后自动运行哪个功能 哪个级别
centos6的配置方法
直接修改/etc/inittab
id:3:initdefault:
centos7的配置方法
systemctl set-default runlevel5.target  # 开机后运行桌面模式

/etc/profile 环境变量   别名(小名)  开机后自动运行 每一次使用xshell连接都会加载一次
		     针对系统层面 所有用户生效
		  	什么是环境变量
			环境变量支撑我们正常使用Linux操作系统
			x=1 y=x+1 y=2
			名称(自定义)=变量的值
			右面一堆内容 使用一个名字来代替 称为环境变量 等号两端不允许有空格
			例: test="I am lizhenya teacher"
			系统环境变量
			PATH 路径
			USER 用户名
			
/etc/bashrc	环境变量   别名	
			针对系统层面 所有用户生效
.bashrc		环境变量	针对当前登录用户生效/
.bash_profile 环境变量  针对当前登录用户生效
			
			
			
/etc/profile	国家的法律
/etc/bashrc		国家的法律

.bashrc			家里的规矩
.bash_profile   家里的规矩

小结/etc
/etc/hostname                 
/etc/resolv.conf          
/etc/hosts         
/etc/issue        
/etc/issue.net     
/etc/motd      
/etc/fstab   
/etc/inittab
/etc/profile
/etc/bashrc
/etc/rc.local 

2. /usr/local 二进制安装 第三方安装 程序默认的目录
安装软件的三种方式
1.yum安装  公司常用
	    yum -y install package.name
		-y  安装过程中会遇到很多确定  -y 自动确认
	    install 安装
		yum安装的特点?
		吃饭:
		去饭店吃饭  点外卖  饭店和外卖都给我们把需要的打包好了 只管用 只管吃
		yum 安装能够自动解决依赖问题
		依赖:在安装某个服务前 必须要安装必要的包  缺什么补什么
		yum安装软件的方式
			yum -y install package.name
		yum卸载方式
			yum -y remove package.name
		查找包的名字的方法
			1)百度查找 搜索 安装
			2) yum provides rz    	# 查看命令属于的安装包
		
2.rpm安装 常用
		 rpm的特点:
		 吃饭:
		 去超市买包泡面-
				自己准备
				要自己泡
				热水
				壶
				碗
				筷子
		 缺的依赖我们要自己手动下载 手动安装所需要的依赖  无法自动解决依赖问题
		 安装的包的名字的后缀 全部是以.rpm结尾的
		 1)rpm的安软件的方式
		 rpm -ivh package.name
			 -i  install
			 -v  verbose 显示安装过程
			 -h  人类可读的方式查看
		 rpm -i package.name 其他参数可忽略
		 2)如何查看当前系统是否安装了想要的软件
		 rpm -qa  查看软件是否安装
			 -q   query  查看
		     -a   all    所有
			 -l   list   列表
			 rpm -qa wget 查看是否安装过wget
			 rpm -qa  	 查看系统中已经安装了哪些软件
			 rpm -qa|grep wget	通过搜索的方式查看软件是否安装
			 rpm -ql      查看当前软件包里的内容 安装了哪些内容
			
		 3) 如何使用rpm进行卸载软件 不建议使用  建议使用yum remove 进行卸载
		 注意:
			  1)无法解决依赖问题
			  2) 卸载有的包的名字需要复制全部包括版本号
			
		    rpm -e package.name
			[root@alexlnb ~]# rpm -qa wget
			wget-1.14-18.el7_6.1.x86_64
			[root@alexlnb ~]# rpm -e wget
			[root@alexlnb ~]# rpm -qa wget
			[root@alexlnb ~]# 
	 
3.编译安装
			编译安装特点:
			吃饭
				自己做饭
				买菜
				洗菜
				刀 菜板 锅碗瓢盆 油盐酱醋
		    自定选择 自己需要的模块进行编译安装 自己定制所需
		.configure  make  makeinstall

目录二

目录:
/var variable  变化的 日志文件
/var/log/messages 日志信息 记录了系统运行的记录
/var/log/secure   系统的安全日志
		如果安全日志出现Failed 上百次或上千次 暴力破解
日志切割
		为了防止系统或者服务的日志量过大
		如果文件被剪切走 日志文件不会重新生成 必须重启服务 或者重新加载服务
		rsyslog	 系统日志的服务

/proc 内存的映射 运行的进程
/proc/cpuinfo
			[root@alexlnb ~]# grep 'physical id' /proc/cpuinfo
			physical id	: 0
			physical id	: 0
			physical id	: 1
			physical id	: 1
			[root@alexlnb ~]# grep 'processor' /proc/cpuinfo
			processor	: 0
			processor	: 1
			processor	: 2
			processor	: 3
			使用命令查看cpu信息
			lscpu
			CPU(s):                4
			On-line CPU(s) list:   0-3
			Thread(s) per core:    1
			Core(s) per socket:    2
			Socket(s):             2


/proc/meminfo 查看内存信息
			MemTotal:         997980 kB		总共的内存
			MemFree:          731164 kB		剩余的内存
			MemAvailable:     708344 kB		可用的内存
			Buffers:            2076 kB		缓冲
			Cached:            83916 kB	    缓存
			SwapCached:            0 kB	    swap 硬盘临时充当内存的大小
			使用命令查看内存信息
			free -h
			如何算百分比: 使用的除以总数乘以100

/proc/loadavg  平均负载  load average
			什么是负载
				负载是衡量系统的繁忙程度
			什么时候才算繁忙
				当负载的值接近CPU核心的总数
			什么硬件能让我们的负载高
				cpu 硬盘  cpu负责运算 负责处理  硬盘负责 读写
			0.00 	0.01 	0.02 	1/125 1484
			1分钟   5分钟 	15分钟	
			1分钟5分钟15分钟的系统平均负载值
			使用命令查看负载信息
			09:42:01 up 26 min,  1 user,  load average: 0.00, 0.01, 0.02
			当前时间   
			top 查看负载和系统的详细信息

			w   命令 包含了多个命令	 1人做多份工作 不可替代
			你会的别人都会  危险
			别人会的你会 别人不会的你会 你就是 w		
							
			
/proc/mounts 了解 系统挂载的详细信息
			df -h 查看磁盘或者挂载的信息
			/etc/fstab
总结:重要的配置文件
/etc
	/etc/hosts			*
	/etc/hostname		*
	/etc/rc.local	    *
	/etc/inittab		*
	/etc/fstab			*
	/etc/issue		
	/etc/issue.net
	/etc/motd
	/etc/resolv.conf	*
	/etc/profile		*
	/etc/bashrc
	/etc/sysconfig/network-scripts/ifcfg-eth0    *
/usr
	/usr/local
/var/
	/var/log/messages	*
	/var/log/secure		*
/proc
	/proc/cpuinfo
	/proc/meminfo
	/proc/loadavg
	/proc/mouts
	
lscpu
free -h
w
uptime
top

yum源

1.yum源 如何安装软件 yum -y install package.name
	默认的yum仓库
windows安装软件的方法?
	1)下载.exe安装程序
	2)用360软件仓库安装
centos的安装软件的方法
	1)yum  直接通过软件仓库进行查找并下载安装
	2)rpm  先下载.rpm结尾的软件包后 使用rpm -ivh进行安装

如何查看当前默认的软件仓库?
	centos默认的仓库是系统随机生成的
	仓库有很多 阿里云 清华云 百度云 163 jd云 腾讯云 每所大学都有自己的仓库 等
	yum repolist 	# 查看当前使用的软件仓库
	
	* base: mirrors.cn99.com		# 网易
	* extras: mirror.jdcloud.com
	* updates: mirrors.cn99.com
	repolist: 11,399			   # 当前仓库中有多少个可用的软件包
	rpm -qa 		# 查看所有已安装过的软件
	yum list		# 查看这个仓库里有什么软件可安装

	更改默认的yum源为阿里云
	第一个步骤
	阿里云仓库的地址如何获取?
	opsx.alibaba.com -> 点centos系统
	备份原有的默认的仓库 默认的仓库目录 /etc/yum/repos.d/
	mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
	第二个步骤
	下载新的仓库到我们本地
	wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
	curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
	下载后别忘记检查
	
	当把默认的仓库移动走了 现在要使用wget下载新的仓库 发现没有wget软件 怎么办?
	把移动走的仓库在移回来
	或者使用curl命令进行下载新的仓库
	
	第三个步骤
	yum makecache  可忽略不使用
	yum源问题解决
		是否能联网
		yum clean all	清空缓存
		网络慢导致无法安装软件
	
	扩展的额外的yum仓库
	yum -y install sl cowsay
	epel		EPEL (Extra Packages for Enterprise Linux) 企业额外的安装包
	1)先备份原有epel源 默认系统不会存在的 直接执行第二个步骤
	2)wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
	
	centos6 大部分都自动补全 不需要安装命令
	centos7 自动补全的命令 安装tab
	自动补全命令 bash-completion		 # 基本的一些命令可自动补全
	高级补全命令 bash-completion-extras	 # 第三方安装的命令可自动补全 大部分
	
	注意中英文问题 "" “” ·· `` '' ‘’
	
2. selinux 防火墙  公司和测试环境必须关闭 centos6配置相同
   美国国家安全局  NSA
   1.如何查看当前selinux是否开启
	 getenforce
   2.如何临时关闭selinux
	 setenforce Permissive
	 setenforce 0
   3.永久关闭selinux 需要重启
    /etc/selinux/conf
	enforcing 			# 开启状态 运行中
	permissive		    # 关闭状态但是会提示警告信息
	disabled		    # 完全关闭状态
	SELINUX=disabled
	
	Linux更改配置文件的习惯
	1)更改前先备份配置文件
	  cp name.conf name.conf.bak
	2)更改配置文件不要在原有的内容上更改 不好恢复
	  把之前的内容注释掉 复制一行进行更改新的内容
	3)所有测试环境需要关闭

3. firewalld 关闭防火墙
   centos6.x  iptables
   centos7.x  firewalld
	1)如何查看当前防火墙是否运行
	 systemctl status firewalld
	 中间的常用命令
				start   开启
				stop    停止
				restart 重启
				reload  加载
				status  状态
	systemctl is-active firewalld		# 查看防火墙运行状态

	2)如何临时关闭防火墙
	  systemctl stop firewalld
	3)永久关闭防火墙
	  如何查看是否开机禁止启动防火墙
	  systemctl status firewalld.service 第二行显示 enabled 开机自动启动
	  [root@alexlnb ~]#systemctl is-enabled firewalld.service 
	  enabled
	  禁止启动
	  systemctl disable firewalld.service
	  
	在什么情况下开启防火墙 Iptables firewalld
	1)在工作中服务器有公网的IP地址的 需要开启
	2)内网环境 测试环境 没有公网IP 不能直接访问的服务器 不需要开启
	3)公司网站流量大 高并发 不需要开防火墙 需要使用硬件防火墙
	  
	在公司中常用iptables
	iptables-save 查看centos6 centos7 防火墙是否开启 如果列出规则说明开启 没有则是关闭状态
	如果centos7使用iptables
	1.把firewalld 永久+临时关闭
	2.安装iptables-services
	
	centos6 iptables的关闭和禁止启动
		centos7							centos6
	sytemctl stop firewalld		   /etc/init.d/iptables stop | service iptables stop
	systemctl disable firewalld    chkconfig iptable off
	systemctl status firewalld     /etc/init.d/iptables status  # 查看状态
	

字符集

什么是字符集
	 各种语言在计算机中表达方式
	 UTF-8   万国码
	 GBK	 国标扩展
	1)如何查看系统默认的字符集 centos7
	 PS1
	 LANG
	  [root@alexlnb ~]#echo $LANG
	  en_US.UTF-8
	  [root@alexlnb ~]##语言.编码
	2)临时修改默认的字符集
	  LANG='zh_CN.UTF-8'
	3)永久修改字符集
	 /etc/locale.conf
	 LANG="en_US.UTF-8"
	 source /etc/locale.conf 相当于帮我们执行了export LANG="zh_CN.UTF-8"
	 source 或者 . 都是让配置文件即时生效 对环境变量相关的配置文件生效
	4)修改配置文件 必须source 或者. 临时生效
	localectl set-locale LANG='zh_CN.UTF-8'  # 直接覆盖配置文件
	source /etc/locale.conf				     # 永久生效

	centos6修改字符集
	1)临时修改
	echo $LANG
	LANG='zh_CN.UTF-8'
	2)永久修改字符集
	 /etc/sysconfig/i18n
	 source /etc/sysconfig/i18n
	
	
	解决乱码方式 xshell和系统默认的UTF-8
	系统中的字符集必须和连接工具的字符集相同

vim2

vim
	撤销 u
	底行模式
		   :set nu  显示行号
		   :set nonu 取消显示行号
		   ZZ  保存并退出
		   搜索
			   / 搜索的内容
			   n 查找下一个内容 往下查找
			   N 查找上一个内容 往上查找
			
			1copy10		# 把第一行的内容复制到第10行的下面	  简写co
			1,3copy10   # 把第一行到第三行的内容复制到第10行的下面
			1move10		# 把第一行的内容移动到第10行的下面	  简写mo
			1,3move10   # 把第一行到第三行的内容移动到第10行的下面
		    1d		    # 删除第一行的内容
			1,5d 		# 删除第一行到第五行的内容
			
			vim的高亮显示
			:noh   	# 取消高亮显示
			查看帮助
			:h 
	vim的替换功能
		s###g			# s替换标志  g 全局替换  
		s@@@g
		s///g
		
		s#需要替换内容#替换后的内容#g
		sg  vim中只替换光标所在行的所有内容   sed 中的sg 全局替换

查看命令

cat	  查看文件内容  合并多个文件的内容	
	 -n 显示行号
	 -A 在行尾加上$ 表示行结束
	cat file
	cat file > 重定向文件
			>> 追加到文件中
	
less 一页一页的显示文件的内容  特别大的文件使用less  常用
		-N     显示行号
		空格 f 显示下一页内容
		b      显示上一页内容
		gg  快速移动到首页
		100G 快速到100行
		g      快速移动到第一页
		G	   快速移动到文件的底部
		/	   搜索
		n      查找下一个内容
		N	   查找上一个内容
		q	   退出

more   一页一页的显示文件的内容  不常用
	   f  往下翻页
	   b  往上翻页
	   空格 往下翻页
head   默认显示文件的前10行
	   -n  显示文件的行数 可简写 -2  -n2
	   -c  显示文件的前n个字符 不常用
tail   默认显示文件的后10行
	   -n  显示文件的行数 简写-2 -n2
	   -f follow 实时显示文件的内容变化
	   -F  实时显示文件内容的变化 监控文件 文件不存在会时时等待文件的出现
	   tailf === tail -f
	   tailf 不读磁盘 速度快
	   tail -f 读磁盘 速度慢
seq	   生成数字序列
grep   过滤字符串
	   -v  取反
	   -n 显示行号
		[root@alexlnb ~]#grep '1' test.txt 
		1
		10
	
	   [root@alexlnb ~]#grep -n '1' test.txt
		1:1
		10:10

		[root@alexlnb ~]#grep -v '1' test.txt
		2
		3
		4
		5
		6
		7
		8
		9
		-w 过滤只有一个内容  完全匹配
		[root@alexlnb ~]#grep  '1' test.txt
		1
		10
		011
		221
		110
		102
		[root@alexlnb ~]#grep  -w '1' test.txt
		1
		[root@alexlnb ~]#grep -w 'oldboy' test.txt
		oldboy oldboy
		[root@alexlnb ~]#cat test.txt 
		oldboytest
		alexoldboy
		testtest
		oldboy oldboy
		test

echo   输出内容到屏幕
	   >  重定向
	   >> 追加重定向
	  {} 生成序列
	   [root@alexlnb ~]#echo {1..10}
		1 2 3 4 5 6 7 8 9 10
		mkdir {1..10}			   # 创建10个文件
		
		在/oldboy目录里 创建stu01 stu02 stu03.. stu10 在10个目录里面分别创建stu01/01..3  stu02/01..3  stu10/01..3
		/oldboy/stu01 ..stu10/01..3
		mkdir /tmp/test /tmp/test1 /tmp/test2
		mkdir -p /oldboy/stu{01..10}/{01..3}
		[root@alexlnb ~]#touch {1..3}.txt
		[root@alexlnb ~]#ll
		总用量 606572
		-rw-r--r--. 1 root root       368 12月 17 17:12 1.txt
		-rw-r--r--  1 root root         0 12月 17 17:12 2.txt
		-rw-r--r--  1 root root         0 12月 17 17:12 3.txt
		[root@alexlnb ~]#echo {oldboy,stu}{01..2}
		oldboy01 oldboy02 stu01 stu02
		[root@alexlnb ~]#echo 1 8 9
		1 8 9
		[root@alexlnb ~]#echo stu{1,8}
		stu1 stu8
		[root@alexlnb ~]#echo {a..z}
		a b c d e f g h i j k l m n o p q r s t u v w x y z
		[root@alexlnb ~]#echo {A..Z}
		A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
		在/oldboy/stu01 /oldboy/stu02 /oldboy/stu03
		  /oldboy/stu01/www /oldboy/stu01/bbs /oldboy/stu01/blog
		/oldboy/stu02/www /oldboy/stu02/bbs /oldboy/stu02/blog
		

tr	替换	不能直接对文件进行操作  替换符号  1对1的进行替换
		-d  删除内容
		-c  取反
		[root@alexlnb ~]#tr -d "test" < test.txt
		oldboy

		alx
		[root@alexlnb ~]#tr -cd "test" < test.txt
		teste[root@alexlnb ~]#

特殊符号
	   . 代表当前的目录
	   .. 代表上一级目录
	   #  注释 不生效的内容  shell编程的第一行有用   root用户提示符
	   ~  代表家目录
	   $  代表普通用户提示符
	   > 重定向
	   >> 追加重定向
	   <  输入重定向
	   -  上一次所在的目录
	   |  前面命令的输出 作为后面命令的使用
	   \   转义字符 
	 
alias  别名
系统默认的为重要的命令添加了一个小名(昵称)
cp ====== cp -i
rm ====== rm -i

作用:
系统安全
方便
如何定义别名 临时定义
当我们执行 rm命令 让系统给我们提示 command not available
alias rm='echo command not available'
如何查看当前已经定义过的别名
alias		# 查看别名
alias vieth0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
永久定义别名
把配置写入/etc/profile中
环境变量的生效顺序 /etc/profile-> /etc/bashrc
[root@alexlnb ~]#alias cdeth0='cd /etc/sysconfig/network-scripts/'
[root@alexlnb ~]#cdeth0
[root@alexlnb /etc/sysconfig/network-scripts]#
删除文件 临时取消别名
	unalias rm
	\rm passwd 


文件类型

1.ls 
	-l  详细信息
	-i  inode
	-h  以人类可读的方式显示
33575001  -           rw-r--r--    .        1          root root   18      12月 12 20:37 bash.sh
inode	 文件的类型	  文件的权限  selinux 硬链接个数  属主 属组 文件的大小 时间        文件名

inode  index node # 存放着文件的属性和文件具体的位置的指针 不包含文件名
block  快 文件的具体存放位置

硬链接 文件的多个入口   # 超市有多个门 堵死一个门 少一个门  文件正常使用
软链接

文件的类型  如何知道文件的类型?
windows中文件的类型:  以后缀名来区分文件的类型
					.exe    安装程序 或者 可运行的程序
					.txt     文本文件
					.mp4  .avi 
					.jpg
					.bat
					.rar
Linux中的文件类型 让我们能够识别是什么文件
					.txt
					.sh .bash		  shell脚本
					.conf .cfg .config 配置文件
					.rpm			   安装包 数据包
					.log			   日志文件
					.py				   python
1) linux下的普通文件类型
	-rw-r--r--
			    - 普通文件
				1) 普通文件  手动创建的或系统存在的
				-rw-r--r-- 1 root root 7 12月 18 09:41 test.txt
				2) 系统的命令 二进制的文件
				-rwxr-xr-x. 1 root root 117672 4月  11 2018 /usr/bin/ls
				3) 压缩包 数据文件
				-rw-rw-r-- 1 root root    83176 7月   4 2014 zziplib-0.13.62-5.el7.x86_64.rpm
	drwxr-xr-x  d 目录 directory
	lrwxr-xr-x	l 软链接 soft link  符号链接  symbolic link  类似windwos快捷方式	
	brw-rw----	b 快设备 硬盘 光驱 U盘 /dev
				c 字符设备
				crw-rw-rw- 1 root root 1, 9 12月 18 08:36 /dev/urandom  吐字符
				tr -cd 'a-zA-Z0-9' < /dev/urandom
				crw-rw-rw- 1 root root 1, 3 12月 18 08:36 /dev/null     黑洞 吃字符
				crw-rw-rw- 1 root root 1, 5 12月 18 08:36 /dev/zero		生成字符
			    s socket
				p 管道设备
				
2)文件相关的几个命令
	1. which 查看命令的全路径     $PATH
	2. file  查看文件的类型
		[root@alexlnb ~]#file test.txt
		test.txt: ASCII text
		[root@alexlnb ~]#file test
		test: directory
		[root@alexlnb ~]#file /etc/rc.local 
		/etc/rc.local: symbolic link to `rc.d/rc.local'
		[root@alexlnb ~]#file /dev/sda
		/dev/sda: block special
		[root@alexlnb ~]#file /dev/urandom 
		/dev/urandom: character special
	3. whereis 查看文件的具体位置和文件的帮助
	4. locate 命令 mlocate 需要安装命令 快速定位文件位置  不用  扩展
	   updatedb
		
	5. find  查找文件
		find的格式
			find 在哪里找 -类型 f  -名字 "国产"
			find /tmp  -type f	-name "test.txt"
				
				
			-类型 -type
				 f  普通文件
				 d  目录
				 l  软链接
				 c
				 s
				 p
		find 查找方式 默认并集 默认 -and
		find /tmp/ -type f   	# 查找/tmp下所有的普通文件
		find /tmp/ -type d   	# 查找/tmp下所有的目录文件
		1)按名称查找
		find /tmp/ -type f -name "test.txt"
		2)按文件的后缀查找  所有.txt结尾的文件
		find /tmp/ -type f -name "*.txt"
		3)不区分大小写搜索
		find /tmp/ -type f -iname "*.txt"  
				
		4)按照大小查找 -size   
		  c b  k M G
		find ./ -type f -size +100k		# 查找当前目录 大小100k的文件
		find ./ -type f -size -2M		# 查找当前目录 小于2M的文件
		find  -type f  -size 2M			# 查找1.xM - 2M  不包含1M
		find  -type f  -size 5M			# 查找4.xM - 2M  不包含4M
		find ./ -type f -size +1M -size -3M	# 查找 大于1M 并且小于3M的文件 默认就是并集
		find ./ -type f -size +1M -size -15M # 
		find / -type f -size +50M -size -100M
		
		
		5)按时间查找
		
		注意(find命令中不支持别名)
		xargs 把前面的命令输出 甩到命令的最后面
			   格式化输出 -n 显示多少列
			   [root@alexlnb ~]#cat 2.txt|xargs -n2
				1 2
				3 4
				5 6
				7 8

		如何对批量查找到的文件进行操作
		如何批量查看文件
		find ./ -type f -size +1M|xargs ls -lh
		1.如何移动
		方法1
		find ./ -type f -size +1M|xargs -i mv {} /tmp
		方法2
		mv `find /tmp/ -type f -name "7.txt"` .
		方法3
		find /tmp/ -type f -name 8.txt -exec mv {} /opt \;
		2.如何删除
		find /tmp/ -type f -name "5.txt"|xargs rm
		[root@alexlnb ~]#rm `find ./ -type f -name 7.txt`
		command not available ./7.txt
		[root@alexlnb ~]#\rm `find ./ -type f -name 7.txt`
		find ./ -type f -name "3.txt" -exec rm {} \;
		3.如何复制
		find /tmp/ -type f -name "6.txt"|xargs -i cp {} .
		cp `find /tmp/ -type f -name 8.txt` .		
		find ./ -type f -name "4.txt" -exec cp {} /tmp \;
		4.序列匹配
		find /tmp -type f -name '[1-8].txt'	   # 匹配1-8以.txt结尾的文件 不能使用{}

find

find 
	-name    # 按名称查找 test.txt *.txt test.*
	-iname   # 查找到的内容不区分大小写  *.TXT *.txt  "test.txt" "TEST.TXT"
	-size    # 按照大小查找 -b -k -M -G  +1M 大于1M  -1G 小于1G的文件  并且关系 默认and
	-maxdepth # 按最大的深度等级查找  find ./ -maxdepth 1 -type f
	-mtime   # 按照文件的修改时间查找modify
			 -mtime +n			n是整数
	面试题
	find ./ -type f -mtime +7		# 查找修改时间为7天前的文件
	find ./ -type f -mtime -7		# 查找修改时间为7天内的文件
	find ./ -type f -mtime 0		# 查找修改时间为1天内的文件 当前时间算 24小时内
	find ./ -type f -mtime 1		# 查找修改时间为2天内的文件 48小时内
	find ./ -type f -mtime +7 -mtime -30 # 查找 7天前 30天内修改过的文件

df -i

df -i 查看inode使用情况
	df -h 查看block使用情况
	-rw-r--r--		文件的权限
	-文件类型
	9位权限位(12位权限位)
	前三位 对应了属主
	中三位 对应了数组
	后三位 对应了其他用户
	rwx
	r   read   读 # cat oldboy.txt less oldboy.txt  重要的文件不允许其他用户看到
	w   write  写 # vim oldboy.txt echo 111 >oldboy.txt sed  会把木马写入服务器
	x   excute 可执行 # shell脚本 bash 
	
3. 	-rw-r--r-- 1 root root 2681172 12月 18 10:51 all.txt
	1  硬链接的个数
	面试题
	ln 源文件 目标文件    # 创建硬链接
	硬链接的特点:
	1)在相同文件系统中具有相同inode号的文件 互为硬链接  ll -i
	2)相当于文件的多个入口   类似于超市的多个入口
	3)文件默认的硬链接为1  目录默认的硬链接为2  且 目录无法做硬链接(会出现循环)
	4)删除源文件和目标文件任意一个文件 文件不会真正的删除
	5)只有同时删除源文件和目标文件 文件才会被删除  (普通文件)
	6)删除源文件和目标文件 并且没有被系统或程序调用 则被真正删除  进程调用
	7)如果删除文件的空间在存放其他文件 则被删除文件无法恢复 或者使用fsck命令进程磁盘检查 空间也会被系统回收
	8)硬链接文件是普通文件 使用rm删除即可
	9)硬链接为防止文件的误删做的备份
	10)不能跨文件系统
	
	2. 软链接
	ln -s  源文件 目标文件
	 软链接的特点:
	 1)Inode号不同
	 2)类似于windows的快捷方式 里面存放了源文件的指针指向
	 3)删除软链接文件不影响源文件
	 4)删除源文件则文件被真正的删除  软链接不会删除 但是不可用
	 5)做软链接尽量使用全路径
	 6)删除一定要注意不能删除源文件(>后面的为源文件)
	
4.   33666248 - rw-  r--  r-- 1        oldboy  oldgirl   2.6M 12月 18 10:51 all.txt
				主人 组  其他人       主人     家庭					   笔记本电脑
	 root  root
	 属主  属组
	 root 管理员用户  UID 唯一标识 0
	 晓东 身份证唯一
	 用户类型 三种
	 cat /etc/passwd
	 1. root用户 UID 0	/bin/bash
	 2. 虚拟用户  		# 存在 不能登录的用户  服务启动需要一个用户	/sbin/nologin
	 3. 普通用户  		# 自己创建的用户 useradd 可登录 可正常使用    /bin/bash
	 在工作中禁止root登录 都是使用自己的用户名登录
	 
	直接查看目录是显示目录本身的大小 目录存放的是下级的文件名
	
5.  文件详细信息的时间
	Access: 2019-12-19 12:05:23.928187905 +0800		
	Modify: 2019-12-18 10:51:54.960652005 +0800
	Change: 2019-12-18 10:51:54.960652005 +0800
	Access: 访问时间  cat查看  当文件无修改 则时间不会变
	Modify: 修改时间 vim echo 修改
	Change: 属性的修改时间	属性信息 -rw-r--r-- 1 root root 1.3M Dec 18 10:53
	
	
	为什么目录的硬链接数为2
	[root@alexlnb ~/oldboy]#ll -adi .
	17446568 drwxr-xr-x 2 root root 34 12月 19 10:13 .
	[root@alexlnb ~/oldboy]#ll -adi ../oldboy/
	17446568 drwxr-xr-x 2 root root 34 12月 19 10:13 ../oldboy/
	[root@alexlnb ~]#ll -aid ../root/ . /oldboy/..
	33574977 dr-xr-x---.  5 root root 245 12月 19 10:12 .
		  64 dr-xr-xr-x. 19 root root 268 12月 11 11:38 /oldboy/..
	33574977 dr-xr-x---.  5 root root 245 12月 19 10:12 ../root/
	[root@alexlnb ~]#cd oldboy/
	[root@alexlnb ~/oldboy]#ll -aid ../
	33574977 dr-xr-x---. 5 root root 245 12月 19 10:12 ../
	
6. 打包压缩
   tar   		筐子      香蕉 苹果 梨
   tar -zcvf all.tar.gz   all.txt 1.txt test.txt
   z   使用gzip压缩
   c   create 创建
   v   显示过程 verbose
   f   指定压缩文件
   简写 -zcf

通配符

&& 		# 前面的命令执行成功 则执行后面的命令  不成功则不执行后面的命令
	   cd /backup && ls  如果backup存在则执行ls  如果backup不存在 则不行ls 
|| 		# 前面的命令执行失败 则执行后面的命令 不失败则不执行
	    cd /backup || mkdir backup 如果cd执行失败 则创建目录backup
								   如果cd成功   则不会执行后面的创建命令
;		# 前面的命令成功和失败 都会继续执行后面的命令
        cd /backup;ls /opt 不管cd是否成功 都会继续执行分号后面的命令
""      # 大部分都是字符串 能解析变量 不能解析通配符
错误重定向 正确重定向	&>/dev/null  定向到空
ls > test.txt		# 命令执行的结果为正确的才可重定向到test.txt
					1> 只接收正确的结果 重定向 前清空在写入
					1>> 只接收正确的结果 追加
					
					2> 只接收错误的结果
					2>> 只接收错误的结果 追加
					
					正确和错误的都追加到test.txt
					ls stu01111.txt >>test.txt 2>>test.txt
					简写:
					stu0111.txt >>test.txt 2>&1
					简写:
					ls stu0111.txt &>>test.txt
					[root@alexlnb ~/oldboy]#ls stu0111.txt &>test.txt
					[root@alexlnb ~/oldboy]#cat test.txt 
					ls: cannot access stu0111.txt: No such file or directory
					[root@alexlnb ~/oldboy]#ls stu01.txt &>>test.txt
					[root@alexlnb ~/oldboy]#cat test.txt 
					ls: cannot access stu0111.txt: No such file or directory
					stu01.txt

					[root@alexlnb ~/oldboy]#ls stu01.txt >>test.txt 2>>test.txt
					[root@alexlnb ~/oldboy]#ls stu01111.txt >>test.txt 2>>test.txt
					[root@alexlnb ~/oldboy]#cat test.txt 
					stu01.txt
					ls: cannot access stu01111.txt: No such file or directory
					
''	输出不解析变量 所见即所得
""  解析变量		不能解析通配符		
不加引号和加双引号类似 能解析变量 但是能解析通配符
``  执行命令  把命令的结果留在原地 其他命令调用  和$()相同

正则表达式

grep

^ 以什么什么开头
		[root@alexlnb ~]#grep '^m' oldboy.txt 
		my blog is http: blog.51cto.com 
		my qq num is 593528156
$ 以什么什么结尾的行
		[root@alexlnb ~]#grep 'm $' oldboy.txt 
		my blog is http: blog.51cto.com 
		our site is http:www.lizhenya.com 
' ' 过滤空格 不显示空行
		[root@alexlnb ~]#grep ' ' oldboy.txt
		I am lizhenya teacher!
		I teach linux.
		I like badminton ball ,billiard ball and chinese chess!
		my blog is http: blog.51cto.com 
		our site is http:www.lizhenya.com 
		my qq num is 593528156
		not 572891888887.
^$  表示空行
		[root@alexlnb ~]#grep -v '^$' /etc/selinux/config|grep -v '#'
		SELINUX=disabled
		SELINUXTYPE=targeted 

.	过滤任意一个字符 不会匹配空行
	grep '.' oldboy.txt
		
	[root@alexlnb ~]#grep '\.$' oldboy.txt
	I teach linux.
	not 572891888887.
*	 前面的字符串出现0次或0次以上
	 第一种 0次 没有则显示文件所有内容
	 第二种多次 显示内容 高亮


echo "oldboy\talex\noldgirl"  -e参数 支持\n \t
	[root@alexlnb ~]#echo "oldboy\talex\noldgirl"
	oldboy\talex\noldgirl
	[root@alexlnb ~]#echo -e "oldboy\talex\noldgirl"
	oldboy	alex
	oldgirl

.* 所有	  包含空行

[]  匹配中括号中的任意一个字符
	[abcd]  不是匹配abcd的单词 而是匹配 a 或者b 或者c 或者d
	grep '[abcd]' oldboy.txt -o
	[root@alexlnb ~]#grep '[a-zA-Z0-9]' oldboy.txt
	[root@alexlnb ~]#grep '[0-Z]' oldboy.txt	
	
	[root@alexlnb ~]#grep '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9X]' id.txt 
	孔 150000123874591242
	夏 222113859123487192
	赵 37142518322922103X

	神奇的坑 [] 取消字符特殊的含义
	[root@alexlnb ~]#grep '[$LANG]' oldboy.txt 
	^^^^^^^^66$$$$$$$^^^$$
	$LANG
	[root@alexlnb ~]#grep '[.!]$' oldboy.txt 
	I am lizhenya teacher!
	I teach linux.
	I like badminton ball ,billiard ball and chinese chess!
	not 572891888887.
	
基础正则小结
	^
	$
	^$
	.
	*
	[]  或者 取消特殊字符含义
	
扩展正则
	使用扩展正则
	egrep 'a+' oldboy.txt
	grep -E 'a+' oldboy.txt
	
	[^]  取反  中括号和默认语句''  都不会匹配空行
	grep '[^.!$]' oldboy.txt   # 排除.!$
	[root@alexlnb ~]#grep '^^' oldboy.txt 
	^^^^^^^^66$$$$$$$^^^$$
	+ 前面的字符出现1次或1次以上
	[root@alexlnb ~]#egrep '8+' oldboy.txt -o
	8
	8
	88888
	8
	egrep '[a-Z]+' oldboy.txt -o
	|	或者
	[root@alexlnb ~]#egrep -v '^$|#' /etc/selinux/config 
	SELINUX=disabled
	SELINUXTYPE=targeted 
	{} 
	第一种方法 {n,m}前一个字符至少连续出现n次 最多出现m次
		[root@alexlnb ~]#egrep '8{1,2}' oldboy.txt -o
		8
		8
		88
		88
		8
		8
		[root@alexlnb ~]#egrep '8{2,4}' oldboy.txt -o
		8888
		[root@alexlnb ~]#egrep '8{2,3}' oldboy.txt -o
		888
		88

	第二种方法8{3} 显示多少次

	[root@alexlnb ~]#cat id.txt 
	李 2113421234
	张 500224197
	王 1233423423432oldboy
	万 5oldboy
	吕 lzy235872451234814
	孔 X50000123874591242
	夏 2221138X9123487192
	夏 827313859123482885
	赵 37142518322922103X
	王 3142S183229221403X
	1. 取出正确的身份证号
	2. 取出以3714开头的
	
grep  过滤字符串
	-r 递归搜索
	-v 取反
	-o 显示匹配过程
	-n 显示过滤出内容的行号
	-w 统计单词
	-i 不区分大小写
	-c 过滤内容的总行数
	-E 支持扩展正则
	-A 匹配到内容的往下n行  -A1
	-B 匹配到内容的往上n行  -B1
	-C 配置到内容的上下n行  -C1
	[root@alexlnb ~]#grep -A1 111 1.txt 
	111111111111
	2222222222
	[root@alexlnb ~]#grep -B1 '222' 1.txt 
	111111111111
	2222222222
	[root@alexlnb ~]#grep -C1 '222' 1.txt 
	111111111111
	2222222222
	333333333333

sed 替换 查找内容

sed  替换 查找内容
	格式:
		 sed  '模式 动作' file
		 sed  '找谁 干啥' file
		 -n	  取消默认输出
		 -r   支持扩展正则
		 sed  ^ 代表以什么开头 或者是 代表了开头
				sed '1s/^/#/g' 在第一行开头处加上#
		 sed  1,5 ,序列  表示1到5行
		 动作
			p 打印
			d 删除  临时删除
		sed之查找:
		 1)如何查找第三行 明确 直接找3 
		 sed '3p' file
		 
		 [root@alexlnb ~]#sed -n '3p' 1.txt		#取消默认输出 只显示第三行
		333333333333
		 2)明确查找1到3行的内容显示出来 ,分隔
			[root@alexlnb ~]#sed -n '1,3p' 1.txt
			111111111111
			2222222222
			333333333333
		3)明确匹配最后一行
			[root@alexlnb ~]#sed -n '$p' 1.txt
			55555555555555
		  明确匹配2到最后一行
		    [root@alexlnb ~]#sed -n '2,$p' 1.txt
			2222222222
			333333333333
			4444444444444
			55555555555555
		4)显示包含lizhenya的行 模糊匹配// 字符串匹配
		
		  sed '/字符串/p' file
		    [root@alexlnb ~]#sed -n '/lizhenya/p' oldboy.txt 
			I am lizhenya teacher!
			our site is http:www.lizhenya.com 
			lizhenya
			lizhenyalizhenyalizhenya
			lizhenyalizhenyalizhenya
		5)匹配显示lizhenya的行到test之间的行
			从第几行都第几行
			sed -n '1,5p'  file
			sed -n '//,//p' file
			sed -n '/lizhenya/,/test/p' 1.txt 
			vim 1.txt 
			sed -n '/lizhenya/,/test/p' 1.txt 
			vim 1.txt 
			cat 1.txt
			sed -n '/lizhenya/,/test/p' 1.txt 
			---------------
			[root@alexlnb ~]#cat 1.txt 
			lizhenya
			111111111111
			2222222222
			333333333333
			test
			4444444444444
			lizhenya
			55555555555555
			jijfqfjeiqwjfiwe
			test
			fwqefqwfewq
			lizhenya
			qfeqfqef
			fwqfweqfwqfe
			fqwfwqefqwf
			qwfewqfqwf
			14234234234
			----------------
		小结:
			 sed -n '3p' file
			 sed -n '1,3p' file
			 sed -n '3,$p' file
			 sed -n '/字符串/p' file
			 sed -n '/字符串/,/字符串/p' file    贪婪匹配
		
		sed之增加
		
			a  追加 在当前行的下一行插入内容
			i  插入 在当前行插入新的内容
			
			sed '3a aaaa' 1.txt
			sed '3i aaaa' 1.txt
			sed '3c aaaa' 1.txt
			sed -in '/^SELINUX\b/c SELINUX=disabled' /etc/selinux/config
		
		sed之删除
			d  删除
			[root@alexlnb ~]#sed -i '2d' 1.txt
			[root@alexlnb ~]#cat 1.txt 
			1111
			333
			4444
			5555
		sed之替换
		    /// ### @@@
			g 全局替换 如果不加 替换每行的第一个内容
			sed 's/内容/替换的内容/g' file
			[root@alexlnb ~]#sed 's#alex#oldboy#g' 1.txt
			1111
			oldboy xxoldboy aaaa
			333
			4444
			5555
			oldboy
			oldboy
		    删除文件1到5行中的所有的字母
			第一种方式
			[root@alexlnb ~]#sed -n '1,5p' test.txt |sed 's#[a-Z]##g'
			::0:0::/://
			::1:1::/://
			::2:2::/://
			::3:4:://://
			::4:7::///://
			第二种方式
			[root@alexlnb ~]#sed -n '1,5s#[a-Z]##gp' test.txt
			::0:0::/://
			::1:1::/://
			::2:2::/://
			::3:4:://://
			::4:7::///://
			先查找以root开头的行 并把行里的bin替换为root
			[root@alexlnb ~]#sed -n '/^root/s#bin#root#gp' test.txt
			root:x:0:0:root:/root:/root/bash
			[root@alexlnb ~]#sed -i '1,5s/^/#/g' test.txt
			[root@alexlnb ~]#cat test.txt
			#root:x:0:0:root:/root:/bin/bash
			#bin:x:1:1:bin:/bin:/sbin/nologin
			#daemon:x:2:2:daemon:/sbin:/sbin/nologin
			#adm:x:3:4:adm:/var/adm:/sbin/nologin
			#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
			sync:x:5:0:sync:/sbin:/bin/sync
			shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
			halt:x:7:0:halt:/sbin:/sbin/halt
			mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
			operator:x:11:0:operator:/root:/sbin/nologin
			1.复制/etc/passwd 到家目录
			2.注释/etc/passwd中以root开头的行
			按照查找行注释
			按照查找字符注释
			
		sed 后向引用 \1 开始
			支持 输出空格 字符串 \t \n
		[root@alexlnb ~]#ifconfig eth0|sed -n '2p'|sed -r 's#^.*inet (.*)  n.*$#当前服务器的IP地址: \1#g'
		当前服务器的IP地址: 10.0.1.200
			第一题
			如何匹配出 10.0.1.200 255.255.255.0
			inet 10.0.1.200  netmask 255.255.255.0  broadcast 10.0.1.255
			[root@alexlnb ~]#echo 123456 45678|sed -r 's#(.*) (.*)#\1\t\2#g'
			123456	45678
			[root@alexlnb ~]#echo 123456 45678|sed -r 's#(.*) (.*)#\1\n\2#g'
			123456
			45678
			第二题
			使用ip add方式取出eth0网卡的IP地址和lo 127.0.0.1/8

awk

awk
   awk文件的来源
   awk的格式
			awk '找谁{干啥}' passwd.bak
			awk '匹配{print }' file
	AWK变量  awk把所有的字符当做变量  加上双引号视为字符串
		NR   行号
	1)文件的标准输入
	  awk '{print }' file
	2)其他命令的标准输出
	  cat passwd.bak |awk '{}'
	3)awk取行
		==  等于
		>   大于
		<   小于
		>=  大于等于
		<=  小于等于
		!=  不等于
		&&  并且
		||  或者
	
		[root@alexlnb ~]#awk 'NR==1' /etc/passwd
		root:x:0:0:root:/root:/bin/bash
	    取第一行到第五行
	    [root@alexlnb ~]#awk 'NR<6' /etc/passwd
		root:x:0:0:root:/root:/bin/bash
		bin:x:1:1:bin:/bin:/sbin/nologin
		daemon:x:2:2:daemon:/sbin:/sbin/nologin
		adm:x:3:4:adm:/var/adm:/sbin/nologin
		lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
		大于16的行
		[root@alexlnb ~]#awk 'NR>16' /etc/passwd
		大于等于1的行
		awk 'NR>=1' test.txt
		小于等于1的行
		awk 'NR<=1' test.txt
		取反
		awk 'NR!=1' test.txt
		查找行数大于1并且行数小于4
		[root@alexlnb ~]#awk 'NR>1&&NR<4' test.txt
		bin:x:1:1:bin:/bin:/sbin/nologin
		daemon:x:2:2:daemon:/sbin:/sbin/nologin
		查找行数等于1或者等于10的
		[root@alexlnb ~]#awk 'NR==1||NR==10' test.txt
		root:x:0:0:root:/root:/bin/bash
		operator:x:11:0:operator:/root:/sbin/nologin
	3)awk取列
		awk分隔符 默认空格和tab键分隔
		[root@alexlnb ~]#cat 1.txt
		oldboy 	 123456  test   324324
		lizhenya 345435  oldboy 213423
		1 	2	3	4
		5	6	7	8
		[root@alexlnb ~]#awk '{print $1}' 1.txt
		oldboy
		lizhenya
		1
		5
		同时取出第一列和第三列 中间以空格分开 或者tab键
		awk '{print $1" "$3}' 1.txt
		awk '{print $1,$3}' 1.txt
		awk '{print $1"\t"$3}' 1.txt
		awk '{print $1"\n"$3}' 1.txt
		[root@alexlnb ~]#awk '{print "第一列 "$1"\t第三列 "$3}' 1.txt
		第一列 oldboy	第三列 test
		第一列 lizhenya	第三列 oldboy
		第一列 1	第三列 3
		第一列 5	第三列 7
		NF
		[root@alexlnb ~]#cat 1.txt
		oldboy 	 123456  test   324324
		lizhenya 345435  oldboy 213423
		1 	2	3	4	6
		5	6	7	8	10 	20
		[root@alexlnb ~]##awk会把每一列的总列数赋值给NF
		[root@alexlnb ~]##NF awk的总列数
		[root@alexlnb ~]#
		[root@alexlnb ~]#awk '{print NF}' 1.txt
		4
		4
		5
		6
		使用$NF取最后一列
		[root@alexlnb ~]#awk '{print $NF}' 1.txt
		324324
		213423
		6
		20
		-F 指定分隔符  可以是任意的
		awk -F ":" '{print $NF}' test.txt
		awk -F: '{print $NF}' test.txt
		[root@alexlnb ~]#cat 2.txt
		oldboy
		[root@alexlnb ~]#awk -F "d" '{print $1}' 2.txt
		ol
		[root@alexlnb ~]#awk -F "d" '{print $2}' 2.txt
		boy
		AWK BEGIN和END模块
		awk 'BEGIN{动作}'
		BEGIN 在读取文件前做的动作
		END   在执行完文件后做的动作
		动作 print 字符串
		     print 计算
		[root@alexlnb ~]#awk 'BEGIN{print "准备开始上课"}'
		准备开始上课
		awk 'BEGIN{print "以下是passwd的内容"}{print}' test.txt
		END模块
		[root@alexlnb ~]#awk 'BEGIN{print "以下是passwd的内容"}{print}END{print "内容打印完成"}' test.txt
		以下是passwd的内容
		root:x:0:0:root:/root:/bin/bash
		mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
		operator:x:11:0:operator:/root:/sbin/nologin
		内容打印完成
		[root@alexlnb ~]##i++ ++i
		[root@alexlnb ~]##i++ =i=i+1
		[root@alexlnb ~]#
		[root@alexlnb ~]#let i++
		[root@alexlnb ~]#echo $i
		1
		[root@alexlnb ~]#let i++
		[root@alexlnb ~]#echo $i
		2
		[root@alexlnb ~]#awk '{print "OK"}' /etc/hosts
		OK
		OK
		[root@alexlnb ~]#cat /etc/hosts
		127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
		::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

		[root@alexlnb ~]#awk 'BEGIN{print 10+10}'
		20
		[root@alexlnb ~]#awk 'BEGIN{print 10+10/2}'
		15
		使用awk的内置变量FS指定分隔符  了解
		awk 'BEGIN{FS=":"}{print $1}' test.txt
		OFS 空格的变量
		[root@alexlnb ~]# awk 'BEGIN{print 1+1} {print "ok"} END {print "Game Over"}' /etc/hosts
		2
		ok
		ok
		Game Over

		awk匹配
		[root@alexlnb ~]#awk '/root/' test.txt
		root:x:0:0:root:/root:/bin/bash
		operator:x:11:0:operator:/root:/sbin/nologin
		查找以root开头的行
		[root@alexlnb ~]#awk '/^root/' test.txt
		root:x:0:0:root:/root:/bin/bash
		[root@alexlnb ~]#awk '/^root/{print $0}' test.txt
		root:x:0:0:root:/root:/bin/bash
		查找以root开头的行 并打印第一列和最后一列
		[root@alexlnb ~]#awk -F: '/^root/{print $1,$NF}' test.txt
		root /bin/bash

		awk 数字比较
		[root@alexlnb ~]#cat 2.txt
		1 2 3
		1 2 3
		4 5 6
		3 1 2
		[root@alexlnb ~]#awk '$1>2' 2.txt
		4 5 6
		3 1 2
		[root@alexlnb ~]#awk '$1>2{print $1}' 2.txt
		4
		3
		[root@alexlnb ~]#awk '{if($1>3)print}' 2.txt
		4 5 6
		[root@alexlnb ~]#awk '$1>3' 2.txt
		4 5 6
		awk查看行号
		awk '{print NR,$0}' test.txt
		NF-1
		[root@alexlnb ~]#awk '{print NF-1,$NF}' 2.txt
		3 alex
		3 zs
		3 oldboy
		3 oldgirl
		[root@alexlnb ~]#awk '{print $(NF-1)}' 2.txt
		3
		3
		6
		2
		[root@alexlnb ~]#cat 2.txt 
		1 2 3 alex
		1 2 3 zs
		4 5 6 oldboy
		3 1 2 oldgirl
		
		[root@alexlnb ~]#cat passwd.bak
		root:x:0:0:root:/root:/bin/bash
		[root@alexlnb ~]#awk -F ":/" '{print $1}' passwd.bak 
		root:x:0:0:root
		[root@alexlnb ~]#awk -F ":/" '{print $1,$2}' passwd.bak 
		root:x:0:0:root root
		[root@alexlnb ~]#awk -F ":/" '{print $1,$2,$3}' passwd.bak 
		root:x:0:0:root root bin/bash
		| 或者
		[root@alexlnb ~]#awk -F ":|/" '{print $1,$2,$3}' passwd.bak 
		root x 0
		[root@alexlnb ~]#awk -F ":|/" '{print $1,$2,$3,$7}' passwd.bak 
		root x 0 root
		[root@alexlnb ~]#awk -F "[:/]+" '{print $1,$2,$3,$6}' passwd.bak 
		root x 0 root
		[root@alexlnb ~]#echo ----:::+++,,,,oldboy--:::++alex----:::oldgirl---+++|awk -F "[-:+,]+" '{print $2,$3,$4}'
		oldboy alex oldgirl
		awk 正则匹配
		以^开头的行
		awk '/^r/' /etc/passwd
		按照列数匹配
		[root@alexlnb ~]#awk -F: '$1 ~ /^r/' /etc/passwd
		root:x:0:0:root:/root:/bin/bash
		[root@alexlnb ~]#awk -F: '$NF ~ /^\/b/' /etc/passwd
		root:x:0:0:root:/root:/bin/bash
		sync:x:5:0:sync:/sbin:/bin/sync
		www:x:1000:1000::/home/www:/bin/bash
		lyz:x:1001:1001::/home/lyz:/bin/bash
		[root@alexlnb ~]#awk -F "[:/]+" '$NF ~ /^b/' /etc/passwd
		root:x:0:0:root:/root:/bin/bash
		www:x:1000:1000::/home/www:/bin/bash
		lyz:x:1001:1001::/home/lyz:/bin/bash
		匹配以in结尾的行
		awk -F "[:/]+" '$NF ~ /in$/' /etc/passwd
		取反 !~
		[root@alexlnb ~]#awk -F "[:/]+" '$NF !~ /in$/' /etc/passwd
		root:x:0:0:root:/root:/bin/bash
		sync:x:5:0:sync:/sbin:/bin/sync
		shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
		halt:x:7:0:halt:/sbin:/sbin/halt
		www:x:1000:1000::/home/www:/bin/bash
		lyz:x:1001:1001::/home/lyz:/bin/bash
		按照日志的时间匹配
		awk '/Dec 25 00:01:01/,/Dec 25 07:01:01/' /var/log/messages

		[root@alexlnb ~]#awk -F: '$3>0&&$3<1000' test.txt|wc -l
		9
		awk -F: '$7=="/sbin/nologin"' test.txt
		取反
		awk -F: '$7!="/bin/bash"' test.txt
		
		df|sed -n '2p'|awk '$3>1000000{print $5}'

		
		grep sed awk find

回顾

 grep 过滤字符串
	     -r  递归查询  grep -r '内容' /etc/*
		 -v  取反 egrep -v  '^$|#' file
		 -w  单词 以空格分隔
		 -i  不区分大小写
		 -n  显示过滤到内容的行号
		 -E  扩展
		 
	 sed 字符串替换 免交互
		sed -n '3p' file
		sed -n '1,3p' file
		sed -n '/root/p' file
		sed -n '/root/,/alex/p' file
		sed -i '2s#root#oldboy#g' file
		sed -i '1,10s/^/#/g' file		
	 awk 取行 取列 数据统计 if for while 数组
		awk 'NR==2' file
		awk 'NR==1 || NR==10' file
		awk '$3>1&& $3<50' file
		[root@alexlnb ~]#sed -i 's/^/http:\/\//g' 2.txt 
		[root@alexlnb ~]#cat 2.txt 
		http://www.baidu.com.cn/1.html
		http://www.sina.com.cn/2.qqqq
		http://www.youku.com/4.wwww
		http://www.youku.com/4.wwww
		http://www.job.com/1.html
		http://www.job.com
		http://www.baidu.com.cn/1.html
		http://www.job.com/1.html
		http://www.sina.com.cn
		sort 排序 uniq -c 去重统计  sort -r 逆序排序 -n以数字排序
		cat 3.txt|sort |uniq -c|sort -rn
	 
		[root@alexlnb ~]#cat 2.txt|sort -rn
		39
		33
		30
		22
		20
		12
		10
		9
		8
		5
		2

		[root@alexlnb ~]#cat 2.txt|sort -rnk3
		周扬	1	56
		肖博	1	55
		肖博	1	52
		伍建明	1	51
		施华青	1	49
		李树昆	1	47
		郑亨凭	1	46
		周扬	1	43
		伍建明	1	39
		刘晓东	1	38
		刘晓东	1	28.5
		施华青	1	15
		

开机启动流程

1.第一个进程  老祖宗
	  Centos6.X  init
	  串行启动  如果某一项服务挂掉 无法启动  则后面的全部无法正常启动
	 centos7.X   systemd
	  并行启动  如果某一项服务挂掉 不影响系统正常启动

用户管理


1) 让一个命令或者一个服务开机自启动有什么方法?
		/etc/rc.local 需要给源文件x权限 可执行命令 服务启动 脚本
		chkconfig iptables on      开机启动
	    systemctl enable firewalld 开机启动
		/etc/profile  开机加载 或者重新打开窗口连接 重新加载

2) 用户分类

2) 用户分类
   系统默认
   1. 管理员    root UID 0
   2. 虚拟用户      UID   CentOS6  1-499  # 每个服务启动都需要一个用户 用户不需要登录
					 UID  CentOS7 1-999
   3. 普通用户   CentOS6 500+   # 自己创建的用户
			     CentOS7 1000+
	/etc/passwd
	centos中默认的shell是bash
	/bin/bash      解释器
	/sbin/nologin  不允许登录
	如何统计passwd中有几个管理员 几个虚拟用户 几个普通用户
	awk -F: '$3==0{a++}' /etc/passwd
	awk -F: '$3==0{a++}END{print a}
	' /etc/passwd
	awk -F: '$3>0&&$3<1000{a++}END{print a}' /etc/passwd
	awk -F: '$3>999{a++}END{print a}' /etc/passwd
	--------------
	awk -F: '$3==0' /etc/passwd|wc -l
	awk -F: '$3>0 && $3<1000 ' /etc/passwd|wc -l
	awk -F: '$3>999' /etc/passwd|wc -l
	--------------
	用户可属于多个组
	一个组内可有多个用户
	xd用户
			oldboy	组
			alex
			lw
	oldboy组
		    alex	用户
			zs
			ls
			em
	/etc/passwd
	/etc/group
	/etc/gshadow	
	/etc/shadow

	每列的含义 以:分隔
	lyz:	x:	1001:	1001 : :   /home/lyz:	/bin/bash
	root:	x:	0:	   0:	root:	/root:	   /bin/bash
	用户名 密码 UID	   GID  描述	家目录		解释器
	
   root用户的家目录 /root  皇宫
   [root@alexlnb ~]#pwd
	/root
   普通用户的家目录 /home/用户名  贫民窟 
   [www@alexlnb ~]$pwd
	/home/www

 3)与用户相关的目录
  /etc/skel 家目录的模板
  useradd 创建用户
  1.创建家目录/home/name
  2.把/etc/skel下的隐藏文件 复制到家目录中
  3.更改隐藏文件的默认权限
    .bash_logout		# 使用ctrl+d 退出的时候执行此文件
	.bash_profile	    # 环境变量 别名  针对当前用户生效   局部 家里的规矩
	.bashrc			    # 别名								 局部 家里的规矩

  第一步 vim /etc/profile   笔试题
  把PS1 注释掉
  第二部 su - oldboy
  第三步 rm -rf /*
  第四步 exit
  第五步 su - oldboy
  如何恢复:
  把三个文件拷贝到家目录中
  cp /etc/skel/.bash* .
  退出重新连接 或者使用 source .bash_profile
  
  .. 上一级
  .  当前目录
  .file  隐藏文件
  . file 执行 相当于source 文件
  
 用户相关的命令
  useradd
	    -s 指定解释器 
		-u 指定用户的uid 
		-M 不创建家目录
		-g 指定属于组
		-c 描述信心
  
  添加一个用户alex999指定uid为888 禁止用户登录系统 不创建家目录 
  useradd -u 888 -s /sbin/nologin -M alex999
  id  查看用户信息
  userdel 删除用户 默认不删除家目录 在公司中用户尽量不删 使用注释的方式
		-r 删除家目录
  
  usermod 修改用的信息
	    -s 修改解释器
		-u 修改用户uid
		-g 修改属于组
		-G 属于多个组
		[root@alexlnb ~]# grep lzy /etc/passwd
		lzy:x:1003:1004::/home/lzy:/bin/bash
		[root@alexlnb ~]# usermod -s /sbin/nologin lzy
		[root@alexlnb ~]# grep lzy /etc/passwd
		lzy:x:1003:1004::/home/lzy:/sbin/nologin
		usermod -G alex999,oldboy lzy
		指定lzy属于多个组 alex999 oldboy 中间使用逗号分隔
		[root@alexlnb ~]# usermod -G alex999,oldboy lzy
		[root@alexlnb ~]# id lzy
		uid=1003(lzy) gid=1004(lzy) groups=1004(lzy),1003(alex999),1002(oldboy)
		清空附属组
		[root@alexlnb ~]# usermod -G '' lzy
		[root@alexlnb ~]# id lzy
		uid=1003(lzy) gid=1004(lzy) groups=1004(lzy)
		修改用户的uid
		[root@alexlnb ~]# usermod -u 899 lzy
		[root@alexlnb ~]# id lzy
		uid=899(lzy) gid=1004(lzy) groups=1004(lzy)
	useradd -u -s -M
	passwd 设置密码
	1)交互式
		passwd 回车默认修改当前登录用户  后面跟用户 指定修改某个用户的密码
		passwd oldboy
	2)非交互式
		echo 123456|passwd --stdin oldboy
		[www@alexlnb ~]$ exit
		logout
		[root@alexlnb ~]# grep lzy /etc/passwd
		lzy:x:899:1004:handsome:/home/lzy:/sbin/nologin
		[root@alexlnb ~]# usermod -s /bin/bash lzy
		[root@alexlnb ~]# grep lzy /etc/passwd
		lzy:x:899:1004:handsome:/home/lzy:/bin/bash
		[root@alexlnb ~]# su - www
		Last login: Fri Dec 27 09:15:51 CST 2019 on pts/0
		[www@alexlnb ~]$ su - lzy
		Password: 
		Last login: Fri Dec 27 09:15:55 CST 2019 on pts/0
	如何管理密码?
	笔记本文档中 手机里 设置为相同
	生日 特殊日子
	密码要复杂12位以上字母数字特殊字符 
	如何设置密码
	I.a,m@l!i_z9834*& henya teacheR
	echo 'I.a,m@l!i_z9834*& henya teacheR'|passwd --stdin lzy
	[root@alexlnb ~]# mkpasswd 
	PvaU49sa#
	[root@alexlnb ~]# mkpasswd 
	c8Cc$A9gl
	[root@alexlnb ~]# mkpasswd 
	Lhe21m[Uh
	[root@alexlnb ~]# mkpasswd 
	DLvd3y@9l
	[root@alexlnb ~]# mkpasswd 
	hTsr_w07L
	[root@alexlnb ~]# mkpasswd 
	x1.I1qamZ
	[root@alexlnb ~]# mkpasswd 
	dY6f_kL5d
	§¦Ç¡Ç<Ð_µèôRߤZ¯H(ÉÏ
	lzy
如何让系统更加安全
用户可访问到的服务器
	1.最小化原则  安装操作系统 需要什么安装什么
	2.保护root  禁止root登录 更改默认SSH端口 22端口
	3.给重要的命令+i  给重要的文件加a
	4.给重要的文件或命令做一个指纹
	
	1.给文件创造一个指纹  数字的指纹大家都相同
	 md5sum file
	2.检查指纹库是否有文件被修改过
	[root@alexlnb ~]# md5sum -c police.txt 
	1.txt: OK
	3.修改一个文件在检测
	[root@alexlnb ~]# echo 111 >1.txt
	[root@alexlnb ~]# 
	[root@alexlnb ~]# cat 1.txt
	111
	[root@alexlnb ~]# md5sum -c police.txt 
	1.txt: FAILED
	通过以上的方式检测网站的站点目录下所有的代码文件 如果有更改发送邮件通知运维
	如果是开发人员修改了代码
	重新生成指纹
	md5sum 1.txt >police.txt
	[root@alexlnb ~]# cat 1.txt 
	111
	[root@alexlnb ~]# md5sum -c police.txt 
	1.txt: FAILED
	md5sum: WARNING: 1 computed checksum did NOT match
	[root@alexlnb ~]# md5sum 1.txt >police.txt 
	[root@alexlnb ~]# md5sum -c police.txt 
	1.txt: OK
	作业:如何批量获取文件的MD5值 find
	     把家目录中所有的文件的指纹取出存放在/tmp/police.txt中
		 
	作业2:批量添加10个用户stu01..stu10 并设置统一密码为123456 禁止for while
	批量添加10个用户stu01,stu02....stu10,并设置8位随机密码(禁止使用for,while等循环) 

chown 修改用户的属主属组
	chown lzy police.txt  	  # 修改文件的属主
	chown lzy.lzy police.txt  # 修改文件的属主属组
	chown -R lzy.lzy oldboy/  # 修改目录和目录下的所有文件属主和属组
groupadd 添加用户组 先创建组或者GID 创建用户添加到组
	坑: 创建一个用户 UID888 指定用户组为test 不创建家目录 /sbin/nologin oldboy
	groupadd test
	useradd -u 888 -g test -s /sbin/nologin -M oldboy
	[root@alexlnb ~]# useradd -u 1111 -g test -s /sbin/nologin -M oldboy
	useradd: group 'test' does not exist

	[root@alexlnb ~]# useradd -s /sbin/nologin test01
	[root@alexlnb ~]# grep test01 /etc/passwd
	test01:x:1113:1113::/home/test01:/sbin/nologin

last    查看系统最近用户最近一次登录的时间
lastlog 查看系统所有用户 最近登录的时间
	
需求 如何使用普通用户www查看/root家目录下的内容
尚方宝剑
visudo	 让普通用户临时以root的身份运行命令
1)如何查看我当前有没有尚方宝剑 有没有以root身份可运行的命令
 [www@alexlnb ~]$ sudo -l
 # 只提示一次 后面直接输入密码
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

	#1) Respect the privacy of others.
	#2) Think before you type.
	#3) With great power comes great responsibility.

[sudo] password for www: 			 
以上输入www的密码  默认没有尚方宝剑

visudo === /etc/sudoers
visudo 可以检查语法的错误

授权1个命令 开发人员最小化
www     ALL=(ALL)       /usr/bin/ls
授权多个命令
www     ALL=(ALL)       /usr/bin/ls,/usr/bin/cat
授权所有命令
www     ALL=(ALL)       /usr/bin/*
对某个命令取反
www     ALL=(ALL)       /usr/bin/*,!/usr/bin/vim
使用sudo方式运行命令
运维人员拥有最高权限
www     ALL=(ALL)       NOPASSWD: ALL

[www@alexlnb ~]$ sudo ls /root
1.txt  oldboy  police.txt

[www@alexlnb ~]$ su - root
Password: 
[www@alexlnb ~]$ head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[www@alexlnb ~]$ sudo sed -i '1s#root:x#root:#g' /etc/passwd
[www@alexlnb ~]$ head -1 /etc/passwd
root::0:0:root:/root:/bin/bash
[www@alexlnb ~]$ su - root
Last login: Fri Dec 27 12:18:42 CST 2019 on pts/2

批量创建用户

批量创建10个用户 test01..test10 密码统一设置123456

useradd oldboy;echo 123456|passwd --stdin oldboy

useradd oldboy oldboy01 oldboy02
useradd test01
useradd test02
useradd test10

[root@alexlnb ~]# echo test{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g'|bash
useradd test01
useradd test02
useradd test03
useradd test04
useradd test05
useradd test06
useradd test07
useradd test08
useradd test09
useradd test10

useradd oldboy;echo 123456|passwd --stdin oldboy



[root@alexlnb ~]# echo test{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1;echo 123456|passwd --stdin \1#g'
useradd test01;echo 123456|passwd --stdin test01
useradd test02;echo 123456|passwd --stdin test02
useradd test03;echo 123456|passwd --stdin test03
useradd test04;echo 123456|passwd --stdin test04
useradd test05;echo 123456|passwd --stdin test05
useradd test06;echo 123456|passwd --stdin test06
useradd test07;echo 123456|passwd --stdin test07
useradd test08;echo 123456|passwd --stdin test08
useradd test09;echo 123456|passwd --stdin test09
useradd test10;echo 123456|passwd --stdin test10

如何批量删除用户
echo oldboy{1..10}|xargs -n1|sed -r 's#(.*)#userdel -r \1#g'|bash


awk 批量创建用户 oldboy1 oldboy10
[root@alexlnb ~]# echo oldboy{1..10}|xargs -n1|awk  '{print "useradd " $1}'
useradd oldboy1
useradd oldboy2
useradd oldboy3
useradd oldboy4
useradd oldboy5
useradd oldboy6
useradd oldboy7
useradd oldboy8
useradd oldboy9
useradd oldboy10
设置密码统一123456
[root@alexlnb ~]# echo oldboy{1..10}|xargs -n1|awk  '{print "useradd " $1";echo 123456|passwd --stdin " $1}'
useradd oldboy1;echo 123456|passwd --stdin oldboy1
useradd oldboy2;echo 123456|passwd --stdin oldboy2
useradd oldboy3;echo 123456|passwd --stdin oldboy3
useradd oldboy4;echo 123456|passwd --stdin oldboy4
useradd oldboy5;echo 123456|passwd --stdin oldboy5
useradd oldboy6;echo 123456|passwd --stdin oldboy6
useradd oldboy7;echo 123456|passwd --stdin oldboy7
useradd oldboy8;echo 123456|passwd --stdin oldboy8
useradd oldboy9;echo 123456|passwd --stdin oldboy9
useradd oldboy10;echo 123456|passwd --stdin oldboy10

awk批量删除

[root@alexlnb ~]# echo oldboy{1..10}|xargs -n1|awk '{print "userdel -r " $1}'
userdel -r oldboy1
userdel -r oldboy2
userdel -r oldboy3
userdel -r oldboy4
userdel -r oldboy5
userdel -r oldboy6
userdel -r oldboy7
userdel -r oldboy8
userdel -r oldboy9
userdel -r oldboy10
[root@alexlnb ~]# echo oldboy{1..10}|xargs -n1|awk '{print "userdel -r " $1}'|bash



随机数
0-32767
[root@alexlnb ~]# echo $RANDOM|md5sum|cut -c1-8
a4616bef
[root@alexlnb ~]# echo $RANDOM|md5sum|cut -c1-8
318556cb
[root@alexlnb ~]# echo $RANDOM|md5sum|cut -c1-8

date +%N|md5sum|cut -c1-8

[root@alexlnb ~]# useradd oldboy;echo `echo $RANDOM|md5sum|cut -c1-8|tee  passwd.txt`|passwd --stdin oldboy
echo test{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1;echo `echo $RANDOM|md5sum|cut -c1-8|tee -a passwd.txt`|passwd --stdin \1#g'|bash


[root@alexlnb ~]# awk -F: '$3>999' /etc/passwd|sed -i 's/#//g'|awk -F: '{print "userdel -r " $1}'|bash

[root@alexlnb ~]# echo test{1..10}|xargs -n1|sed -r 's#(.*)#echo \1 >>passwd.txt;useradd \1;echo `echo $RANDOM|md5sum|cut -c1-8|tee -a passwd.txt`|passwd --stdin \1 #g'|bash


echo test1 >>passwd.txt;useradd test1;echo `echo $RANDOM|md5sum|cut -c1-8|tee -a passwd.txt`|passwd --stdin test1 

[root@alexlnb ~]# useradd oldboy;pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin oldboy

				  创建用户	     设置随机数密码取8位赋值给变量pass   免交互配置密码给用户
[root@alexlnb ~]# useradd oldboy;pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin oldboy;echo oldboy $pass >>passwd.txt
		输出用户名和密码 追加到passwd.txt
	
	
Changing password for user oldboy.
passwd: all authentication tokens updated successfully.

[root@alexlnb ~]# cat passwd.txt 
oldboy bcedf792

echo test{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1;pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin \1;echo \1 $pass >>passwd.txt#g'|bash

echo test{1..10}|awk '{for(i=1;i<=NF;i++)print "useradd " $i";pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin "$i";echo "$i" $pass >>passwd.txt"}'

echo test{1..10}|xargs -n1|awk '{print "useradd "$1";pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin "$1";echo "$1" $pass >>passwd.txt"}'|bash


for i in {1..10};do userdel -r test$i;done

RXW

RWX是什么
R	read    读	 可以看文件 cat less more head tail
W   write   写	 可以写入   vim echo sed -i 
X   execute 执行 可执行文件 .sh 脚本文件可执行
普通文件是否需要可执行权限? 普通文件的最高权限 RW

如何知道我对当前的文件有什么权限?
1.首先要知道你的当前登录的用户  whoami 查看当前登录的用户
2.确定当前用户和文件有什么关系  属主 属组 陌生人(other)
	[oldboy@alexlnb ~]$ll /etc/hosts
	-rw-r--r-- 1 root root 158 Dec 25 10:12 /etc/hosts
3.根据当前用户和文件的对应关系找出对应的权限

rw-r--r--
前三位 属主的权限
中三位 属组的权限
后三位 其他用户的权限 陌生人

rwx    可读可写可执行
R	==   4
W   ==   2
x   ==   1
-   ==   0
rw-r--r--		数字表示  644

属主的权限: 6
属组的权限:4
其他的权限:4

属主   属组  其他用户
user   group  other
u	    g     o

ugo   =   a

644	  rw-r--r--
600	  rw-------
755	  rwxr-xr-x
777	  rwxrwxrwx
000   ---------
555	  r-xr-xr-x

[root@alexlnb ~/oldboy]## 修改test.sh 属主 可写 可读 属组 可读 其他用户 可读
[root@alexlnb ~/oldboy]##属主 420 属组 400 其他 400 
[root@alexlnb ~/oldboy]##相加结果 6 4 4
[root@alexlnb ~/oldboy]#chmod 644 test.sh
[root@alexlnb ~/oldboy]#ll test.sh
-rw-r--r-- 1 root root 13 Dec 31 09:30 test.sh

rwx对于文件的作用

r 可读 不可写 不可执行
w 不可写 不可执行 可追加 如果想要写入 必须和r配合使用
x 啥都不能干 想要执行 必须和r进行配合

rwx对于目录的作用
r  不能进入目录 只显示文件名 不显示详细信息 配合x使用
w   啥都不能干 控制是否在目录下创建 删除 重命名 必须和x配合
x   可进入到目录 可以查看文件内容


为了系统的安装 所有的创建的目录都是755权限

小结:
1.当前登录用户
2.登录用户对应文件的关系
3.通过关系找到对应权限
可查看某个目录下的内容
目录必须有rx权限
如果祥在某个目录下进行修改创建删除移动
目录必须有wx权限
文件的删除和文件本身没有关系 看上级目录的w权限
rwx 对于文件
r   可读
w   可写+r
x   可执行+r
rwx 对于目录
r   只能查看文件名 +x
w   下级目录的增删改+x
x   只能进入目录  查看+r

umask 控制系统默认创建目录和文件的权限
文件最大的权限 666 rw-rw-rw-
目录最大的权限 777 rwxrwxrwx

默认权限:
	 使用文件最大的权限和目录最大的权限减去默认的umask值得到创建后的权限


如何查看umask
umask
	 文件 666
		 -022
		  644
	 目录 777
		 -022
		  755
如何修改umask 临时的
umask 032
		文件 666
			-032
			 634
			+010
			 644
		目录 777
			-032
			 745
			 
对于文件减去后如果有奇数 则在奇数位+1  目录不需要加			 
			 
umask 035 文件和目录的默认权限
		文件
			666
		-   035
			631
		   +011
		    642
		目录 777
			 035
			 742
			 
创建一个文件权限为000 目录为111 则umask默认是多少?666
网站对外提供访问 公网 必须对站点目录的权限严格空格
目录755
文件644
必须对所有的站点目录下的文件做MD5指纹认证
重要的数据做备份
先把中毒的文件 拷贝到 /tmp  留证据
先恢复数据			 
		    
suid  setuid  特殊权限位 数字 4  使用stat查看 在属主权限位设置
sgid  		  特殊权限位 数字 2  在组权限位设置		
t			  粘滞位     数字 1  在陌生人权限位设置

小结:
	rwx 文件 目录
	421
	如何修改
	chmod     修改属主 属组 chown
	ugo
	u
	+x
	a+x
	u-x,o+w
	g=r-x
	chmod 644
	umask
	隐藏属性
	a 
	i
	特殊权限位
	s
	t
	sgid
	
	
---------------

定时任务

某个时间做某件事情
	闹钟起床
Linux中定时任务
	备份
	tar    打包-发送到备份服务器
	统计数据
	什么时间使用定时任务打包
	业务低谷期
	游戏低谷时间 小游戏-12点  端游-4点5点
    电影      3点-4点
	商城      4点-5点
	外卖      4点-5点
    官网      12点后
	小视频    4点-5点
	滴滴      4点-5点
	
	
系统定时任务 针对所有用户
    /etc/crontab  		# 公司常用
用户定时任务
    crontab -l      列出定时任务
	crontab -e      编辑定时任务
	crontab -e  /var/spool/cron/用户名  用户名:当前登录系统的用户
	crontab 类似visudo 语法检测的功能
	
公司常用的定时任务配置文件
/etc/crontab
crontab -e = /var/spool/cron/用户名
日志文件
/var/log/cron
查看服务
centos6.x
/etc/init.d/crond status
/etc/init.d/crond stop 或者 start restart
centos7.x
systemctl status crond


* * * * *
分钟0-59
小时0-23
天  1-31
月  1-12
周  0-6 or  1-7

口诀:什么时间做什么,然后再想下一次什么时候执行 什么时间,做什么事情 

每天的上午8点30分,来学校上车(go to school)
*  *   *  * *
分 时 日 月 周
* * * * * 执行的命令
30 8 * * * go to school
或者
30 08 * * * go to school

每天晚上12点准时,回家自己开车(go to bed) * 中间必须有空格 * 和命令中间必须有空格
0 0 * * * 		go to bed
00 00  * * * 	go to bed

* 代表 每

注意:星期几和日期不要同时加上  2020年2月29日 星期六 

* 12 * * *    # 12点的每分钟执行任务  12.01 12.02 12.03 12.03 12.59

/n 每隔n分钟执行定时任务

每5分钟执行时间同步任务 须安装ntpdate
*/5 * * * ntpdate ntp1.aliyun.com
13分钟 5分钟执行  15分钟执行定时任务






	
[root@alexlnb ~]#echo hostname >>`date +%F`.log
[root@alexlnb ~]#ll
-rw-r--r-- 1 root root   9 Jan  2 11:58 2020-01-02.log

定时任务2

定时任务:
每5分钟执行一次时间同步  重要   搭建时间服务器
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com

每天的上午7点到上午11点 每一个小时运行CMD命令
- 区间 从几点到几点

00 7-11  *  *  * cmd
分  时  日 月 周

定时任务 
备份
shell脚本

7点半-8点25执行

25 7-8 * * *
--------------
30 7 * * *
25 8 * * *

7点 10点-12点的每小时执行

00 7,10-12 * * * cmd

每分钟把自己的名字 追加到 /oldboy/oldboy.txt 

第一个里程碑-如何显示自己的名字 并放入文件中 用什么命令 
第二个里程碑-定时任务如何写 
第三个里程碑-测试-看看结果
第四个里程碑-排错-遇到错误了
tailf /oldboy/oldboy.txt

[root@alexlnb ~]#echo liuxiaodong
liuxiaodong
echo liuxiaodong >>/oldboy/oldboy.txt

每分钟 晚上11点,凌晨12点到早上7点  
*     23,00-07/1 * * * /application/nginx/sbin/nginx -s reload 
00
每小时
0 0 * * *
00 00 * * *

什么是脚本
   把可执行命令放入普通文本中就是脚本  使用 bash或sh执行运行此文本

	[root@alexlnb ~]#sh 1.sh
	/root
	[root@alexlnb ~]#bash 1.sh
	/root
课下了解  宝塔面板


[root@alexlnb ~]#echo `date +%F-%H-%M-%S`.txt
2020-01-03-10-34-52.txt

每天凌晨12点把1.sh的行注释

00 00 * * * sed -i '/1.sh/s/^/#/g'

[root@alexlnb ~]#crontab -l
#时间同步
#* * * * * /usr/sbin/ntpdate ntp1.aliyun.com
#print name
* * * * * bash /root/1.sh
* * * * * sed -i '4s/^/#/g' /var/spool/cron/root
00 08 * * * sed -i '4s/#//g' /var/spool/cron/root

定时任务中的命令 使用全路径执行

echo `which ntpdate` ntp1.aliyun.com

05.定时任务中-命令或脚本结果(正确及错误)定向到黑洞(>/dev/null 2>&1)或追加到文件中 >>/tmp/oldboy.txt 2>&1 

如果定时任务没有定向到文件中或者空 会发送邮件给root
可发送邮件 必须保证系统邮件服务开启状态
/var/spool/mail/root

公司中邮件大部分服务器是关闭状态
发不出邮件憋得上 会产生临时小文件 每执行一次定时任务就会产生一个新的小文件

每个新的文件 都会占用系统的inode号 如果inode满 则硬盘无法存储新的内容
inode df -i


如何解决定时任务的产生的小文件 (postfix没有开启)
1.开启邮件服务 (工作中很多服务器都是关闭状态)
2.把所有的定时任务的结果定向到空 或者定向到文件中
3.定时任务清空小文件


1.邮件的服务
   systemctl stop postfix
2.root邮件的地址
   /var/spool/mail/root
3.小文件的目录
   /var/spool/postfix/maildrop/

每天凌晨1点把/etc/目录 打包备份/tmp下目录并且要求每天的备份名字不同。
1.如何打包/etc目录
2.如何放在/tmp下
3.文件的名字要求不同  每天日期不同
4.在命令行测试 
5.写入脚本 并执行脚本测试 目录/server/scripts
6.把脚本写入定时任务 每分钟执行一次进行测试
7.OK后然后时间改为凌晨1点

管理-技术-一起走==发展

定时任务默认不指定文件的目录 在家目录中创建

执行命令的过程
1.执行命令
2.查找命令的全路径 ls pwd
3.PATH 存放命令的路径 只有PATH变量中有的 才可在任意的路径执行命令

临时生效  永久 写入 /etc/profile
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/oldboy:'

普通用户定时任务运行脚本的时候可以识别的PATH只有 /usr/bin和/bin
[root@alexlnb ~]#which ntpdate
/usr/sbin/ntpdate

[root@alexlnb ~]#which ifconfig
/usr/sbin/ifconfig

作业:解决上面全路径问题
1)全路径
2)
3)

1.定时任务的注意事项
	1)定时任务规则前面加注释 是给我们自己看
	2)使用脚本替代命令 (超过两条以上)  ntpdate ntp1.aliyun.com &>/dev/null 
	3)定时任务配置文件中不要出现% 比如时间 date +%F 写入脚本或转义
	4)运行脚本的时候使用/bin/sh /bin/bash (如果没有全路径直接写脚本 脚本必须有执行权限)
	5)定时任务的结果必须输出到文件或者黑洞
		a. 邮件开启  发邮件
		b. 邮件关闭  生成小文件
	6)避免不必要的程序命令输出 tar 相对路径
	7)定时任务中输出的文件必须是全路径 默认是在家目录
	8)定时任务只识别的变量是/usr/bin和/bin 使用全路径执行
		a. PATH 放了命令路径 
		b. 可执行命令如何放入PATH
			PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
		:/usr/local/test/bin'
		所有的命令都是放在了程序目录的bin或者sbin目录下
		c. java的服务全部使用全路径或者写入PATH
		
	案例:
	创建一个以IP地址命名的目录 把IP目录放在/tmp下
	mkdir `如何取IP`
	ifconfig
	打包/etc目录放入IP目录下 
	并且以每天的名字不同
	1)如何取IP地址
	ifconfig eth0  
		如何取第二行	
		ifconfig eth0|awk 'NR==2'
		ifconfig eth0|sed -n '2p'
		取IP地址
		ifconfig eth0|sed -n '2p'|awk '{print $2}'
		ifconfig eth0|sed -n '2p'|sed -r 's#^.*inet (.*)  net.*$#\1#g'
	2)如何创建以IP命名的目录
		a. mkdir /tmp/`ifconfig eth0|sed -n '2p'|awk '{print $2}'`
		b. 变量
		   IP=`ifconfig eth0|sed -n '2p'|awk '{print $2}'`
		   mkdir /tmp/$IP
	3) 打包etc放入IP目录下
	    a. tar zcf /tmp/$IP/etc.tar.gz etc
		b. tar zcf /tmp/`ifconfig eth0|sed -n '2p'|awk '{print $2}'`/etc.tar.gz etc
	4) 每天的名称不同
	   按照每天的时间格式
	   a.tar zcf /tmp/$IP/`date +%F`-etc.tar.gz etc
	   b.TIME=`date +%F`
		 tar zcf /tmp/$IP/$TIME-etc.tar.gz etc
	5) 写入脚本 并测试脚本
		[root@alexlnb /server/scripts]#cat etc.sh 
		IP=`ifconfig eth0|sed -n '2p'|awk '{print $2}'`
		TIME=`date +%F`
		mkdir -p /tmp/$IP
		cd /
		tar zcf /tmp/$IP/$TIME-etc.tar.gz etc
	6) 写入定时任务
		* * * * * sh /server/scripts/etc.sh &>/dev/null  按照每分钟测试
		00 00 * * * sh /server/scripts/etc.sh &>/dev/null
	
	7) 如何解决路径问题
		a. 命令写全路径 /usr/sbin/ifconfig
		b. PATH变量写入脚本
			PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
			IP=`ifconfig eth0|sed -n '2p'|awk '{print $2}'`
		c. . /etc/profile

	8)定时任务书写规范
		a. 先在命令行测试
		b. 把正确的命令写入脚本
		   脚本中命令使用全路径 或者使用环境变量 PATH
		   脚本固定一个目录
		   不要输出不必要的信息 输入到文件或者空
		   tar打包到相对路径
		c. 测试脚本
		   sh test.sh
		   -x 脚本的执行过程
		d. 写入定时任务
		    crontab -e 编辑定时任务 语法检测功能
			不要求结果的定向到空
			命令使用绝对路径 脚本中可以使用PATH变量
			
		e. 工作中定时任务使用的配置文件
			crontab -e   /var/spool/cron/root
			/etc/crontab

磁盘管理

磁盘管理
	磁盘的体系结构
	1.磁盘的外部结构
	2.磁盘的内部结构
	3.磁盘的工作原理读写原理
	4.磁盘阵列RAID LVM
	5.磁盘分区 分区表 命令 fdisk parted
	6.格式化-挂载
	
	1.磁盘的外部结构
		a. 外观
			固态硬盘
			机械硬盘
		b. 接口 连接服务器的RAID卡
		   SAS SATA SCSI
		   SAS  企业级
		   SATA 家用
		   SAS+SATA结合
	2.磁盘的内部结构
		a. 磁盘的主轴 决定了磁盘的转速
		   家用笔记本   5400RPM
		   高配置笔记本 7200RPM
		   企业服务器   10K RPM
					    15K RPM  最大的存储 900G SAS盘
		b. 传动手臂 控制磁头
		c. 盘片
		d. 磁头 读写数据 磁力感应 径向运动  盘面的数量=磁头的数量
		e. 磁道 存储数据 由上到下 由外到里
		f. 扇区 磁道上最小的存储单位 512字节 inode block
		g. 柱面 不同盘面上相同的磁道组合在一起
	
	3. 磁盘阵列RAID	
		a. 提高存储空间
		b. 提高数据安全
		c. 提高性能
		RAID 0   最少1快硬盘 容量 所有磁盘的总和  安全:没有冗余 速度 最快
			     企业场景: 从节点 小弟 不重要的服务器
				 数据库从库  挂掉不影响正常使用的服务器
		RAID 1   最少两块硬盘 容量 所有磁盘的一半 安全: 百分百冗余 速度 慢
				 企业场景: 系统盘 监控服务器
		RAID 5   最少使用3快盘 容量 损失1快盘  安全:只能坏一块盘  较快
			     企业场景:数据库主库 数据量不高 测试服务器
				 
		RAID 01  只能损坏一边的盘  容量 所有磁盘的一半 安全:百分百冗余  写入一般 读快
		RAID 10  两边都可损失一块盘 容量 所有磁盘的一半 安全:百分百冗余 写入快 读快
				 企业场景 高并发 高访问量 数据库主库 重要的存储
		
	4. 磁盘分区
	   引导记录
			   MBR格式  小于2T的磁盘  fdisk
			   GPT格式  大于2T的磁盘  parted
			   
		MBR格式分区
			4个主分区
			3个主分区+1个扩展分区
			1个主分区+1个扩展分区
	
		磁盘在Linux中显示的名称
			SAS SATA SCSI
			sd?
			第一块磁盘 sda
						  sda1		主分区
						  sda2		主分区
						  sda3		主分区
						  sda4		扩展分区
						  sda5		逻辑分区
			第二块磁盘 sdb
			第三块磁盘 sdc
		磁盘格式化 磁盘挂载
		第一个里程碑: 
		准备一块磁盘插入到系统中  虚拟机需要重启 物理机不需要重启 磁盘支持热插拔
		
		第二个里程碑:
		检查系统是否识别到了磁盘
		Disk /dev/sdb: 106 MB, 106954752 bytes, 208896 sectors

		第三个里程碑:
		使用fdisk分区
		Command (m for help): m
		Command action

		   d   delete a partition		*****
		       删除分区
		   g   create a new empty GPT partition table
			   创建一个可用的GTP分区表
		   l   list known partition types   LVM
			   列出分区类型
		   m   print this menu			*****
			   打印帮助
		   n   add a new partition		*****
			   添加新的分区
		   p   print the partition table	*****
			   打印分区表
		   q   quit without saving changes	*****
			   退出不保存
		   t   change a partition's system id
			   改变分区系统id
		   w   write table to disk and exit		*****
			   保存并退出

		Command (m for help): n		# 创建新的分区
		Partition type:
		   p   primary (0 primary, 0 extended, 4 free)		#p 主分区
		   e   extended										#e 扩展分区
		Select (default p): p            # 默认主分区
		Partition number (1-4, default 1): 1	# 编号1-4
		First sector (2048-208895, default 2048): 		# 开始的扇区
		Using default value 2048		
		Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +20M   # 格式单位不能小写
		Partition 1 of type Linux and of size 20 MiB is set

		Command (m for help): p			# 打印分区表
		
		显示分区表类型和id
		Command (m for help): l  # 小写的L
		 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
		 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
		更改分区表类型id
		Command (m for help): t
		Hex code (type L to list all codes): 83
		Command (m for help): p
		   Device Boot      Start         End      Blocks   Id  System
		/dev/sdb1            2048       43007       20480   83  Linux

		
		第四个里程碑:
		格式化 文件系统选择xfs
			  centos ext3 ext4
			  centos xfs  格式化效率高  存储效率高 数据库(动态数据)
		partprobe /dev/sdb1	  # 通知系统内核识别新的分区  企业环境
		mkfs.xfs /dev/sdb1    # 在虚拟环境中直接挂载可使用
			
		第五个里程碑:
		挂载并使用磁盘
		mount /dev/sdb1 /mnt	# 挂载点在工作中 自己创建的 /data1
		
		第六个里程碑:
		如何开机自动挂载
		1) 写入/etc/rc.local	# 开机自动运行 自动执行 脚本  需要执行权限
		2) 写入/etc/fstab   	# 硬件开机自动挂载
		  blkid 				# 查看系统所有设备的唯一标识
		/dev/sdb1                                 /mnt                    xfs     defaults        0 0

		UUID=f100aa92-19a0-483d-9e6a-72cb154c2de9 /mnt                    xfs     defaults        0              0
		唯一标识  设备名称						 挂载点				   文件类型	  挂载参数        是否备份  开机是否检查
		mount
			 -o  指定挂载的参数
			 
			 
		第二个方案 磁盘大于2T	 GPT格式 支持最大128个主分区  parted 直接写入磁盘 直接生效
		
		fdisk分大于2T磁盘
		Command (m for help): g		# 类型更改为GPT格式
		Building a new GPT disklabel (GUID: BBB5949E-E369-4C58-AD73-F56AA2C9353B)

		Partition number (1-128, default 1):	 
		  help [COMMAND]                           print general help, or help on COMMAND
													帮助
		  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
												   创建分区类型表
		  mkpart PART-TYPE [FS-TYPE] START END     make a partition   mkpart primary 10G 20G
												   创建分区
		  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space,
				all found partitions, or a particular partition
													显示分区表
		  quit                                     exit program
											       quit
		  rm NUMBER                                delete partition NUMBER
												   删除分区
		第一步 
		(parted) mktable GPT     # 更改分区表类型为GPT格式
		Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost.
		Do you want to continue?
		Yes/No? yes 
		第二步
		(parted) mkpart primary 0 1T   # 创建主分区 从0开始 到1T结束	(可以用百分比表示,比如Start? 0% , End? 50%)
		Warning: The resulting partition is not properly aligned for best performance.
		Ignore/Cancel? Ignore 
	
		(parted) mkpart primary 1T 2T  # 创建1个T的主分区

		第三步
		格式化
		mkfs.xfs /dev/sdb1
			   -f  强制格式化
		
		第四步
		挂载
		mount /dev/sdb1 /data
		
		
		企业场景:
		直接格式化挂载使用
		mkfs.xfs /dev/sdb
		mount /dev/sdb /data
		
		系统分区 两个300G 做RAID 1
		300G的磁盘进行分区    # 安装操作系统
		
		非交互式parted
		[root@alexlnb ~]#parted /dev/sdb mktable gpt
		Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost.
		Do you want to continue?
		Yes/No? yes                                                               
		Information: You may need to update /etc/fstab.

		[root@alexlnb ~]#parted /dev/sdb print                              
		Model: VMware, VMware Virtual S (scsi)
		Disk /dev/sdb: 3329GB
		Sector size (logical/physical): 512B/512B
		Partition Table: gpt
		Disk Flags: 

		Number  Start  End  Size  File system  Name  Flags

		[root@alexlnb ~]#parted /dev/sdb mkpart test 0 1T
		Warning: The resulting partition is not properly aligned for best performance.
		Ignore/Cancel? i                                                          
		Information: You may need to update /etc/fstab.

		[root@alexlnb ~]#parted /dev/sdb print
		Model: VMware, VMware Virtual S (scsi)
		Disk /dev/sdb: 3329GB
		Sector size (logical/physical): 512B/512B
		Partition Table: gpt
		Disk Flags: 

		Number  Start   End     Size    File system  Name  Flags
		 1      17.4kB  1000GB  1000GB               test

		[root@alexlnb ~]#parted /dev/sdb mkpart primary 1 2T
		Warning: You requested a partition from 1000kB to 2000GB (sectors 1953..3906250000).
		The closest location we can manage is 1000GB to 2000GB (sectors 1953125001..3906250000).
		Is this still acceptable to you?
		Yes/No? yes                                                               
		Warning: The resulting partition is not properly aligned for best performance.
		Ignore/Cancel? i                                                          
		Information: You may need to update /etc/fstab.

		[root@alexlnb ~]#parted /dev/sdb print
		Model: VMware, VMware Virtual S (scsi)
		Disk /dev/sdb: 3329GB
		Sector size (logical/physical): 512B/512B
		Partition Table: gpt
		Disk Flags: 

		Number  Start   End     Size    File system  Name     Flags
		 1      17.4kB  1000GB  1000GB               test
		 2      1000GB  2000GB  1000GB               primary

		[root@alexlnb ~]#parted /dev/sdb mkpart primary 2T 3T
		Information: You may need to update /etc/fstab.

		[root@alexlnb ~]#parted /dev/sdb print
		Model: VMware, VMware Virtual S (scsi)
		Disk /dev/sdb: 3329GB
		Sector size (logical/physical): 512B/512B
		Partition Table: gpt
		Disk Flags: 

		Number  Start   End     Size    File system  Name     Flags
		 1      17.4kB  1000GB  1000GB               test
		 2      1000GB  2000GB  1000GB               primary
		 3      2000GB  3329GB  1329GB               primary

		[root@alexlnb ~]#parted /dev/sdb rm 3
		Information: You may need to update /etc/fstab.

		[root@alexlnb ~]#parted /dev/sdb print                                    
		Model: VMware, VMware Virtual S (scsi)
		Disk /dev/sdb: 3329GB
		Sector size (logical/physical): 512B/512B
		Partition Table: gpt
		Disk Flags: 

		Number  Start   End     Size    File system  Name     Flags
		 1      17.4kB  1000GB  1000GB               test
		 2      1000GB  2000GB  1000GB               primary

问题

企业案例:
	java 程序内存不够用 占用大量swap分区  用户正常访问中
	1) 加内存 可以关机的情况下
	临时扩充swap分区
	第一个里程碑
	如何生成20M的文件  放入/dev下
	dd  if=/dev/zero   of=/tmp/20m bs=1M      count=20		*****
	    input file    output file  block size  次数
	第二个里程碑
	格式化
	mkswap /tmp/20m
	第三个里程碑
	挂载使用swap
	swapon /tmp/20m
企业案例: inode满如何查找小文件
	显示 no space left on device 
	df –h查看磁盘有剩余
	如何查看系统中哪个目录小文件多  目录本身越大 则目录下的小文件越多
	查看目录本身的大小
	ll -d  
	使用find查找大于1M的目录 在工作中尽量使用相对路径查找内容
	find / -type d -size +1M
	find / -type d -size +1M|xargs ls -lhd
	find / -type d -size +1M -exec ls -lhd {} \;
	ll -hd `find / -type d -size +1M`
	使用du命令查看目录的大小 -h
	查看根下的第一列G结尾的目录
	du -h /|awk '$1~ /G$/'
	查看目录下所有文件的大小
	du -h /var/log/*
	查找到目录下包含G的行
	du -h /var/log/*|grep G
	
企业案例
	文件被彻底删除
	1.硬链接为0
	2.进程调用为0
	[root@alexlnb ~]#lsof |grep messages
	abrt-watc   717         root    4r      REG                8,3   2759937    1095001 /var/log/messages (deleted)
	
	列出谁在使用某个端口
	lsof -i :3306
	
	ps axuf stat状态信息栏
	R	 运行状态
	S	 可中断睡眠  当进程优先级高的抢占资源时 可中断此进程
	T	 进程被暂停
	D	 不可中断进程 当进程优先级高的抢占资源时 不可中断此进程
 	Z	 僵尸进程
	
	Ss	 代表父进程
	S<	 进程优先级高  Ss<
	SN	 进程优先级低
	R+   进程在前台运行
	
	S<sl
	
	
	ctrl+z  暂停进程
	
	
	top命令 和 w 命令相同?
	top - 11:58:35 up 1 day, 40 min,  3 users,  load average: 0.23, 0.16, 0.10
	

问题2

问题? 为什么备份的时候 需要打包  IO高 负载高

1.如何批量kill进程
	a.pkill nginx		# pkill   服务名字
	b.killall nginx	    # killall 服务名字
	c.

第一个里程
	  1.需要安装nginx
	     yum -y install nginx
	  2.启动服务
	     systemctl start nginx
		 浏览器访问页面 虚拟机IP地址
	  3.强制杀死nginxmaster进程
	    kill -9 pid
	  4. 如何批量杀死子进程 awk	  
		ps axu|grep nginx|grep -v grep|awk '{print $2}'|xargs kill -9
		kill `ps axu|grep nginx|grep -v grep|awk '{print $2}'`
	  5. 发送信号
	    a. 对于系统中没有指定信号的进程 使用kill方式
		b. 对于系统中的服务 使用服务的信号 /usr/sbin/nginx -s  stop reload 
	  
	  
	把程序放入后台运行  当前终端测试使用
	 nohup sleep 60 &
	 
	python程序如何启动和停止
	python2.X
	python3.7

	nohup python3.7 test.py &		# py正确启动方式
	nohup python3.7 test.py --redis 10.0.0.202 --port 6379 --file /tmp/test.txt &
	如何查看py程序的帮助
	python3.7 test.py -h
	使用帮助:
			 --redis   IP
			 --port    6379
			 --file    /tmp/test.txt
	ps axu|grep test.py|grep - v grep|awk '{print $2}'|xargs kill

	如何py程序较长 写入脚本中  test.sh
	#!/bin/bash
	nohup python3.7 test.py --redis 10.0.0.202 --port 6379 --file /tmp/test.txt &
	
	如何运行?
	sh test_start.sh
	
	如何停止?
	#!/bin/sh
	ps axu|grep test.py|grep - v grep|awk '{print $2}'|xargs kill
	sh test_stop.sh
	
	jobs    显示后台的作业
	bg %id  让后台的作业继续运行
	fg %id  让后台的作业在前台运行
	kill %id 杀死后台运行的作业

	让后台的程序把日志信息 输出定向到文件或者空
	for i in {1..10};do echo $i;done &>test.txt &
    for i in {1..10};do echo $i;done &>/dev/null &

网络

tcpdump 
	  tcpdump -nni 					不解析主机名称 指定网卡
	  tcpdump -nni eth0  			抓取eth0的所有信息
	  tcpdump -nni eth0 port 12345  抓取eth0的12345端口的信息
	  tcpdump -nni eth0 src 10.0.1.204 and dst 10.0.1.201  # 源IP 10.0.1.204 目标 10.0.1.201
	  tcpdump -nni eth0 udp			抓取UDP协议的数据包
		

	$? 上一条命令的返回结果 0为成功 非0失败


iftop  查看当前的主机和其他主机通信的流量 先安装 yum -y install iftop

	ip address add 10.0.1.201/24 dev eth0 	# 给eth0网卡添加一个IP地址
	ip address del 10.0.1.201/24 dev eth0   # 删除IP
	route -n								# 查看当前默认网关
	route add default gw 10.0.1.254			# 配置默认网关			笔试题
	route del default gw 10.0.1.254			# 删除默认网关
	ip route add 0/0 via 10.0.1.254			# 指定默认网关
	ip route del 0/0 via 10.0.1.254			# 删除默认路由
	ip route replace 0/0 via 10.0.1.253		# 修改默认路由
	-----------------------------------
	ip route add 114.114.114.114 via 10.0.1.254 # 去往114的走1.254网关 电信  笔试题
	ip route replace 114.114.114.114 via 10.0.1.253 # 去往114的走1.253网关 联通
	
	如何批量删除网卡上的临时IP 10.0.1.210-250
	echo {210..250}|xargs -n1|awk '{print "ip addr del 10.0.0."$1" dev eth0"}'
	echo {210..250}|xargs -n1|sed -r 's#(.*)#ip addr del 10.0.0.\1 dev eth0#g'
	ip add|grep '10.0.1'|grep -v 200|awk '{print $2}'|xargs -i ip addr del {} dev eth0
	
    tcpdump
	nmap
	netstat
	ss
	iftop
	dstat
   
   
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值