admin 管理员组

文章数量: 887016

Liunx

学习视频课程来自B站“云计算磊哥”&“老男孩教育”

学习书籍书名“linux就该这么学”

学习总结也有同事培训笔记

学习部分总结来自百度用户博客摘取

本次算是简单总结!

总结:白嫖不易(其实更浪费时间&新手更容易走弯路),不如花钱买课或买书!

笔记格式“python缩进”


文件和用户管理

/ 根目录 #一级目录

​ bin 二进制目录(命令目录)

​ boot 启动目录

​ dev 驱动目录(设备目录)#设备文件/dev/sda,/dev/sda1

​ etc 配置文件目录

​ home 用户目录(家目录)

​ root root目录

​ run 运行目录

​ sbin 与bin类似 #sbin管理员使用的命令 /sbin/service

​ tmp 临时目录

​ usr 应用程序目录

​ var 日志邮件目录


文件类型

¾-:普通文件。
d:目录文件。
l:链接文件。
b:块设备文件。
c:字符设备文件。
p:管道文件。
linux命令格式
命令	选项	参数
ls	 -l		/

基础命令

查看所有文件:ls 、 ll
​查看隐藏文件:ls -a 、 ll -a
​显示文件详细信息:ll 、ll -h
​按文件生成日期进行排序:ll -t 反向排序ll -tr (-r倒序)

change directorty = cd 切换目录命令
cd /文件名/ 绝对 切换
cd 文件名 相对 切换
cd … 上一级
cd …/m / 返回上一级并进去/目录/
cd - 返回上一次所在路径
cd 默认返回到用户家目录
pwd 查看绝对路径信息
touch /目录名/file #创建空文件
示例:touch /home/file1 file2 #在当前目录创建了file2 在/home/目录创建了file1
make directory = mkdir 创建目录 目录A 目录B(连续创建两个目录)mkdir A B
mkdir -m 666 创建文件并附加666权限
mkdir -p 多级目录 创建多级目录/忽略错误提示

序列符号应用{}
[root@localhost home]# mkdir -pv /home/{1/{3,4},2}
mkdir: 已创建目录 "/home/1"
mkdir: 已创建目录 "/home/1/3"
mkdir: 已创建目录 "/home/1/4"
mkdir: 已创建目录 "/home/2"

#-v选项为通用选项,为显示过程

wget
​ -b 后台下载模式
​ -P 下载到指定目录 -p 下载页面内所有资源,包括图片、视频等

who 显示登录系统中的用户的信息/查看当前主机有几个登录
Whoami:显示当前用户
stat 文件 查看数据详情信息(查看文件的三个时间信息)
lscpu 查看cpu信息
w 显示目前登入系统的用户信息
uptime 查看服务器已待机天数,和当前几个用户,和负载
nl 显示文件内容并加上行号。
!加刚输入命令的一半,可以显示刚输入最近的同样命令的补全
manual = man 查看命令手册信息 ,如man ls
man -k who 查看关键字who相关的手册
–help -help --h -h获取命令帮助,(只显示命令的参数帮助信息) 如ls --help

开机启动服务查询 chkconfig --list
删除服务chkconfig --del 服务名 都是6个级别
添加开机启动服务 chkconfig – add 服务名
(它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务)
设置服务在某个级别下开机启动/不启动
chkconfig --level 连续级别数字 服务名 on/off
runlevel 查看系统运行级别
init 切换运行级别

hostname 查看修改主机名称
hostname 直接修改主机名称(centOS7 )
用法:hostnamectl set-hostname 主机名称
彻底修改IP地址的本地名字 /etc/hosts (ip后边英文localhost

cat /etc/redhat-release 获得系统发行版本和具体系统版本信息
uname -a (二个命令)

/etc/locale.conf --centos7 字符集配置文件

cp -f a a1 备份了a并把名字改为a1 -f覆盖已经存在的目标文件而不给出提示
cp可以复制不同目录下多个文件到某个目录
示例:cp /root/kj5.txt /home/kj1.txt /home/ll
cp /home/* /test/ 将home目录下全部文件复制到test目录
cp -R/-r /home/* /test/ 递归复制
\cp 强行覆盖
cp -p 可以复制后的文件权限一致
cp -s 复制成为‘快捷方式’(只能在当前目录创建链接)
cp -u 只在源文件比目标文件新,或目标文件不存在时才进行复制
cp -a 保留原始属组权限

删除数据命令(慎用最好别用)
delete(删除)=remove(移除)=rm
rm -r :递归删除(含目录),(有提示)
rm -rf 强制删除文件及目录 (无提示)
示例 rm ./.gz -rf 删除本目录以.gz结尾的文件 -rf可以写到后边,以免删根
rm -rf y{1…6}.txt 删除部分.txt文件
rm -rf /root/
并不会删除隐藏文件,除非是.*(隐藏文件是.开头)
​ rm -rf file file1

rm -rf ./* 无法删除本目录隐藏文件
rm -rf ./.*可以

mv 剪切文件或目录数据 ,还可以重命名
\mv 强制覆盖取消提示

cat /proc/meminfo 检查内存大小、空闲情况
cat 查看文件内容信息(可以一次看多个文件如:cat file file)
cat -n 查看文件时显示行号
less 文件可按空格翻页,按b上一页 (-n 也可以看行号 n是number的意思)(可以用光标上下移动来查看文件内容)
more 文件一页一页显示 (按空格键显示下一页,按b上一页)
file查看文件类型
head -5 查看前面第5行信息 (默认10)
tail -6 查看倒数6行信息(默认10)
tail -f 一直追踪查看文件内容的变化(文件被删除或者移动走,需要进行重新追踪)
tail -F (适合追踪需要不断删除的日志)追踪文件信息时(文件被删除或者移动走,不需要重新追踪,只要文件恢复会继续追踪)

#dd了解 #能够让用户按照指定大小和个数的数据块来复制文件的内容
	#也可以用来压制出光盘镜像文件
dd if=/dev/zero of=ybb count=50 bs=100M
	/dev/zero #为这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据
	if 输入的文件名称
	of 输出的文件名称
	bs 设置每个“块”的大小
	count 设置要复制“块”的个数
	

file查看文件类型

type 命令名称”来判断用户输入的命令是内部命令还是外部命令。

[root@ybt ~]# type ls
ls 是 `ls --color=auto' 的别名
变量
#常用变量
	HOME 用户的主目录(即家目录)
	SHELL 用户在使用的 Shell 解释器名称
	LANG 系统语言、语系名称
	RANDOM 生成一个随机数字
	PS1 Bash 解释器的提示符
	PATH 定义解释器搜索用户执行命令的路径
#设置局部变量 	#只能自己使用
	[root@ybt ~]# a=/home/ 
#设置全局变量 	#其他用户也可以使用
	export a=/home/
#设置环境变量		
	source  立即加载文件配置信息(下边的都可以立即加载)
	配置环境变量 
	root下
			/etc/profile 
			/etc/bashrc
			#前两个是国法
	用户下
			~/.bashrc
			~/.bash_profile
			#这两个是家规
			export  定义环境变量

文件编辑
>重定向也比较方便
#示例
cat 1.txt > 2.txt
ls / > 2.txt
#shell 理论
shell(壳) = cmd 都是命令解释器(都是程序);区别在于shell是linux的命令解释器,cmd是windows的解释器
#shell有ashell、bshell、cshell、但是linux一般使用升级版bash(bashell)

vim未正常关闭,产生的临时文件,解决方法
vim 1.txt
	.1.txt.swap  这是服务器自动产生的备份
	删除系统备份就可以了

vim(编辑文件时从上次退出位置查看)其他作用
有颜色区分不同信息
1、搜索取消高亮显示
/搜索一个文件中没有的信息或:noh
2、快速移动复制数据信息
:2,4move8 将2到4行剪切到第八行
:2,4copy$ 将2到4行复制到最后一行
3、文件内容信息进行修改替换
:%s#old#young#g 将文中指定信息old全部做替换成young
%全部做替换
s substitute 替换
g global 将整行符合要求的字符都做替换
#要替换的信息#替换后的信息#

替换修改文件部分内容
:2,4s#old#young#g 或写为:2,4s/old/young/g 将2到4行old换成young
:12,$s#old#young#g 将第12行到结尾内容进行替换

4、批量修改文件内容
01批量修改注释,批量添加信息
进入批量编辑状态(视图模式)ctrl+v可是块模式矩阵, 或v全选可视模式
esc退出选择
方向键选择
插入 shift+i 替换c 删除d或者x
按esc

vi/vim 文件打开 编辑文档命令
命令模式-插入模式
i 光标所在位置进入编辑状态
I /0/^ 光标移动到一行的首行进行,在进入编辑状态
o 下起一行进行编辑
O 上起一行进行编辑
a 光标的下一个字符进行编辑
A 光标移动到行尾进行编辑 也 可 以 C 将 光 标 到 尾 部 内 容 删 除 , 并 进 入 编 辑 状 态 c c 将 整 行 内 容 删 除 并 进 入 编 辑 状 态 x 删 除 某 一 行 的 某 个 字 ( 上 边 都 是 移 动 光 标 位 置 , 进 入 编 辑 命 令 行 的 方 法 ) , 也可以 C 将光标到尾部内容删除,并进入编辑状态 cc 将整行内容删除并进入编辑状态 x 删除某一行的某个字 (上边都是移动光标位置,进入编辑命令行的方法) , Cccx,d 光标后所有数据删除(文件命令行下执行)也可以加上行号 如:2,$d(从第二行到行尾进行删除)
dG 将光标所在位置内容,到段尾信息全部删除
dgg 将光标所在位置内容,到段首信息全部删除
将光标快速切换文件结尾G
首部gg
指定行 ngg (n第几行行数) 或nG
. 在输入模式下输入了啥,在命令行模式按.就重复输入了
:set nu 编辑文件时显示每一行的序号
:set nonu 取消编辑文件时显示的序号
:set ai或noai 启用/关闭自动缩进
命令行模式也可以上反(插入后在返回也可以)

插入到命令——ESC按键 退出编辑状态
命令模式——低行模式
: 输入命令
/ 进入搜索状态(向下搜索 n依次向下)
/内容加\c 不区分大小写搜索
?进入搜索状态(向上搜索 n依次向上)
wq = x = ZZ(ZZ可以直接按) 保存并退出
q不保存直接退出
!强制
w保存不退出
wq!强制保存退出
q!强制退出
shift+zz直接保存退出 (大写ZZ)
vi 快捷操作方式
将一行内容删除 dd (剪切)
将多行内容删除 行数+dd (剪切)
操作错误撤销 小写u
ctrl+r 是把撤销在恢复
:w /root/newfile 另存为其它文件
:r /etc/filesystems 从光标处读入其他文件内容 保存后追加
将内容进行粘贴 p
粘贴多次 次数 +p
复制一行 yy 复制多行 行数+yy
r 非插入模式修改当前字母

查找同时包含a和b的行,且无先后顺序
?.*a&.*b
查找包含a或者b的行
?a|b

-o 水平分屏:vim -o[n] file1[file2….]
-O 垂直分屏:vim -O[n] file1[file2….]
在命令模式:
垂直分屏:vs[file]
光标分屏间的移动
Ctrl +ww 上下移动光标
:hide 关闭当前窗口
:only 只保留当前窗口


用户管理

用户基本信息文件 
/etc/passwd (冒号分割7列)
root:x:0:0:root:/root:/bin/bash
用户名:x:uid:gid:描述:HOME:shell  #对应含义
#x为密码占位符,具体内容不在这里
#uid:用户的身份证号  0是root;1——499系统用户;1000+为普通用户
#gid:group 组号
#root描述
#/root:家目录
#/bin/bash命令行解释器


用户密码信息文件(冒号分割9列) #了解
/etc/shadow
ybt:$6$dQB:18983:0:99999:7:::
1.用户名
2.密码加密值
3.最后一次修改时间,过了多少天
4.最小间隔(0代表当天可以改密码)
5.最大时间间隔,9999为无限期
6.警告时间(默认天警告)
7.不活动时间(设置时间30天,超过30天就禁用)
8.失效时间(设置30天,30天后账号就自动回收了)
9.保留

组信息文件 #了解
/etc/group
root:x:0:
组名:组密码:组ID:组成员
id 查看用户是否存在
[root@ybt ~]# id root
		uid=0(root) gid=0(root)=0(root)
			01			02		03
			01:显示用户名和uid对应关系
			02:显示属于的用户组,以及组名和gid对应关系
			03:用户可能属于哪些组
			
useradd 用户名	#创建用户 
	-d 指定用户的家目录(默认为/home/username)
	-e 账户的到期时间,格式为 YYYY-MM-DD.
    -g 指定一个初始的用户基本组(必须已存在)
	-G 指定一个或多个扩展用户组
    
userdel -r 用户名 #删除用户 
	-r 同时删除用户及用户家目录
	-f 强制删除用户
    
passwd 用户名 #修改密码 
	-l 锁定用户,禁止其登录
	-u 解除锁定,允许用户登录
    -d 使该用户可用空密码登录系统
	-e 强制用户在下次登录时修改密码
    
groupadd 组名	#创建组 #创建的组既不是基本组也不是附加组,只有用户加入后才是附加组

 
 usermod	#修改组ID
        -d -m 参数-m 与参数-d 连用,可重新指定用户的家目录并自动把旧的数据转移过去
        -L 锁定用户禁止其登录系统
        -U 解锁用户,允许其登录系统
        -u 修改用户的 UID
    更改用户的shell使用户无法登录  usermod -s 
	usermod -s /sbin/nologin kk
	cat /etc/passwd
	kk:x:1007:1007::/home/kk:/sbin/nologin
	yy:x:1008:1008::/home/yy:/bin/bash
                            
	usermod s2 -G s1  #修改用户所属的附加组
	usermod s2 -g s3  #修改用户所属的基本组

    [root@localhost ~]# id s2
	uid=1009(s2) gid=1503(s3)=1503(s3),1502(s1)
	#组的类型:
		1.基本组:随用户创建而创建,组名同用户名 (基本组只有一个)
        	#所以基本组去 /etc/password 查最清楚 或者 id 用户名
    	2.附加组:(附加组可以有多个)
删除组 groupdel  组名
将用户“s2”从“s1”组中删除	gpasswd -d s2 s1
修改组s1组的组ID为1555 	groupmod -g 1555 s1
永久提权 su 或su - root 或su -#普通切换为超级用户

sudo 命令  #临时提权 
vim /etc/sudoers
    %root  ALL=(ALL)       ALL  #这一行的意思是:允许root用户组中的用户在不输入该用户的密码的情况下使用所有命令
	-l 列出当前用户可执行的命令
	-u 用户名或 UID 值 以指定的用户身份执行命令
	-b 在后台执行指定的命令
   	
    设置ybt的sudo权限
   		echo -e 'ybt  ALL=(ALL)       AL' > /etc/sudoers
    	[ybt@ybt ~]$ sudo -l #查看ybt的sudo 权限
		[sudo] password for ybt: 
		匹配此主机上 ybt 的默认条目:
    	requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS
    	DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL
    	PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    	env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    	env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    	env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    	secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
		用户 ybt 可以在该主机上运行以下命令:
    	(ALL) ALL
        
	[ybt@ybt ~]$ ls /root
	ls: 无法打开目录/root: 权限不够
	[ybt@ybt ~]$ sudo ls /root  #sudo提权后输入ybt用户密码查看
	[sudo] password for ybt: 

	vim /etc/sudoers
    	#添加以下内容,不用用户提权都需要输入自己的密码
    	linuxprobe ALL=NOPASSWD: /usr/sbin/poweroff



chage
查看和修改用户密码时间
	[root@localhost ~]# chage -l test      #查看用户密码设定情况
	最近一次密码修改时间                                    :  4月 27, 2018
	最近一次密码修改时间                                    :  4月 27, 2018
	密码过期时间                                    : 从不
	密码失效时间                                    : 从不
	帐户过期时间                                            : 从不
	两次改变密码之间相距的最小天数          :-1
	两次改变密码之间相距的最大天数          :-1
	在密码过期之前警告的天数        :-1

用户权限

`老男孩课程部分笔记`

文件属性信息详解
[root@ybt ~]# ll -i 查看文件属性详情信息包括inode
	总用量 32
    {  						文件属性部分					  }   {文件名称}
	52251033 	- 	rwxr-xr-x.  1  root root    47  3月15 14:09 	kk.sh
	7540147  	d 	rwxr-xr-x.  3  root root    15  4月 6 15:29 	ll
	52251037 	- 	rw-r--r--.  1  root root    30  4月 7 19:04 	ybt
	01		   02		03	  04  05   06	   07	08
		01:文件数据的inode信息:index node == 索引节点
			作用:指明数据的文件类型
		02:文件的数据类型
									 属主u 属组g 其他o
		03:权限 r4读 w2写 x1执行  #示例:rwx  -w-   --r   721
		04:文件目录的硬链接数:(就类似于超市的多个门)
			作用:可以多个路径查看数据信息
		05:属主(创建者或拥有者)
		06:属组(文件或数据的所属用户组)
		07:文件大小
		08:文件创建或修改日期
chomd -R 755 /home/	#chmod -R 权限   r=4=读,w=2=写,x=1=执行 ; -R是递归授权 -f 取消错误提示
	-rwxr-xr-x (755)    有读、写、执行权限;属组用户和其他用户只有读、执行权限。
	理解rwxr-xr-x 前三位是主r+w+x=7  中间三个是主的组r+-+x=5  其他用户r+-+x=5 (-是没有的意思 )
chmod u/g/o/a  file/d #符号授权:u用户;g组;o其他用户=other;a全部;赋值符+/-/=;
	[root@localhost ~]# ll file 
	-rw-r--r--. 1 root root 0 2月  13 11:29 file
	[root@localhost ~]# chmod u=r file  #修改属主权限
	[root@localhost ~]# ll file 
	-r--r--r--. 1 root root 0 2月  13 11:29 file
	[root@localhost ~]# chmod g=rwx file #修改属组权限
	[root@localhost ~]# ll file 
	-r--rwxr--. 1 root root 0 2月  13 11:29 file
	[root@localhost ~]# chmod o=rwx file #修改其他用户权限
	[root@localhost ~]# ll file 
	-r--rwxrwx. 1 root root 0 2月  13 11:29 file
	
	[root@localhost ~]# chmod a= file   #取消全部权限;a=或a-rwx 或a=---或 = 或 =-
	[root@localhost ~]# ll file 
	----------. 1 root root 0 2月  13 11:29 file
	[root@localhost ~]# chmod +x file	#全部给予执行权限
	
	[root@localhost ~]# ll file 
	---x--x--x. 1 root root 0 2月  13 11:29 file
	[root@localhost ~]# chmod ug=rx,o= file #分别给与权限
	[root@localhost ~]# ll file 
	-r-xr-x---. 1 root root 13 2月  13 11:40 file
	
	[root@localhost ~]# ll file 
	----------. 1 root root 13 2月  13 11:40 file
	[root@localhost ~]# chmod ug+rx,o+x file ##分别给与权限
	[root@localhost ~]# ll file 
	-r-xr-x--x. 1 root root 13 2月  13 11:40 file
	
	[root@localhost ~]# ll file 
	----------. 1 root root 13 2月  13 11:40 file
	[root@localhost ~]# chmod 755 file #数字授权
	[root@localhost ~]# ll file 
	-rwxr-xr-x. 1 root root 13 2月  13 11:40 file


chown 拥有者 文件或目录 #改变拥有者
chown 拥有者.组名 文件或目录 -R 递归处理 #改变拥有者和组拥有者
chown .组名 文件目录 #改变组拥有者
	[root@localhost ~]# chown root.root file 
	[root@localhost ~]# ll file 
	-rwxr-xr-x. 1 root root 13 2月  13 11:40 file
	[root@localhost ~]# chown ybt.ke file 
	[root@localhost ~]# ll file 	
	-rwxr-xr-x. 1 ybt ke 13 2月  13 11:40 file
	[root@localhost ~]# chown root file 
	[root@localhost ~]# ll file 
	-rwxr-xr-x. 1 root ke 13 2月  13 11:40 file
	[root@localhost ~]# chown .ybt file 
	[root@localhost ~]# ll file 
	-rwxr-xr-x. 1 root ybt 13 2月  13 11:40 file

chgrp -R 组名 修改目录/f所属的组  #-R递归 chown 已经具备了它的功能;

以下命令了解
	[root@localhost ~]# ll file 
	----------. 1 root root 13 2月  13 11:40 file
setfacl -m u:ybt:rw file #设置文件访问控制 -m是对acl权限设置 u对象:ybt组名:组名权限  文件或目录
	#增加多个组的权限
	#-b 删除所有扩展权限,只剩下基础权限 setfacl -b file
	#-x 清除用户对file 文件的acl权限
	[root@localhost ~]# ll file 
	----rw----+ 1 root root 13 2月  13 11:40 file #+号为附加权限,直接用getfacl查看具体权限
	
getfacl 查看文件或目录的acl权限
	[root@localhost ~]# setfacl -m u:ybt:- file  #设置file文件权限全部-
	[root@localhost ~]# getfacl file  查看file的acl权限
	# file: file
	# owner: root
	# group: root
	user::---
	user:ybt:---
	group::---
	mask::---
	other::---
	
	[root@localhost ~]# setfacl -m u::rwx file 修改用户权限为rwx
	[root@localhost ~]# getfacl file 
	# file: file
	# owner: root
	# group: root
	user::rwx
	user:ybt:---
	group::---	
	mask::---
	other::---
	
	[root@localhost ~]# setfacl -m u:ybt:rwx file 修改ybt用户权限为rwx
	[root@localhost ~]# getfacl file 
	# file: file
	# owner: root
	# group: root
	user::rwx
	user:ybt:rwx
	group::---
	mask::rwx
	other::---

	[root@localhost ~]# setfacl -m  g::rwx file 修改所有组权限为rwx
	[root@localhost ~]# getfacl file 
	# file: file
	# owner: root
	# group: root
	user::---
	user:ybt:---
	group::rwx
	group:root:rw-
	mask::rwx
	other::---

	[root@localhost ~]# setfacl -b file	#-b 删除所有扩展访问控制列表条目
	[root@localhost ~]# getfacl file 
	# file: file
	# owner: root
	# group: root
	user::---
	group::rwx
	other::rwx
	

	[root@localhost ~]# setfacl -m u:ybt:rw file #设置ybt组为file的权限为rw
	[root@localhost ~]# getfacl file
	# file: file
	# owner: root
	# group: root
	user::---
	user:ybt:rw-
	group::rwx
	mask::rwx
	other::rwx
	[root@localhost ~]# setfacl -x u:ybt file #清除ybt组acl权限
	[root@localhost ~]# getfacl file
	# file: file
	# owner: root
	# group: root
	user::---
	group::rwx
	mask::rwx	#mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理
	other::rwx

特殊权限
 
suid,(sgid)针对文件/程序时,具备临时获得属主的权限	#了解
	[root@localhost ~]# chmod u+s /bin/cat
	[root@localhost ~]# ll /bin/cat
	-rwsr-xr-x. 1 root root 54048 11月 20 2015 /bin/cat  #拥有了属主权限,所有权限后用户都可以使用此命令; u-s关闭权限  还有g+s
	[root@localhost ~]# ll file1 
	-rwxrwxrwx. 2 root ybt 21 2月  16 10:46 file1
	[root@localhost ~]# chmod 4777 file1  #4=user
	[root@localhost ~]# ll file1 
	-rwsrwxrwx. 2 root ybt 21 2月  16 10:46 file1
	[root@localhost ~]# chmod 6777 file1  6=group
	[root@localhost ~]# ll file1 
	-rwsrwsrwx. 2 root ybt 21 2月  16 10:46 file1
	[root@localhost ~]# chmod 7777 file1  7=other
	[root@localhost ~]# ll file1 	#其他用户是t
	-rwsrwsrwt. 2 root ybt 21 2月  16 10:46 file1
	
	[root@localhost ~]# ll file1 
	-rw-r-xr-x. 2 root ybt 21 2月  16 10:46 file1
	[root@localhost ~]# chmod u+s file1 #没有执行位会变成大S
	[root@localhost ~]# ll file1 
	-rwSr-xr-x. 2 root ybt 21 2月  16 10:46 file1
	
	[root@ybt ~]# chmod 1000 file1 
	[root@ybt ~]# ll file1 			#其他用户是T
	---------T. 1 root root 0 2月  20 21:52 file1




lsattr  显示文件扩展属性
	[root@localhost ~]# lsattr file1
	---------------- file1
chattr 设置文件特殊权限	 +a #+a 是可以对文件进行追加,其他的无法操作 -a/i去掉权限
	[root@localhost ~]# chattr +i file1  #+i为只可读
	[root@localhost ~]# lsattr +i file1  #root权限也无法更改,无法删除
	----i----------- file1

umask 查看文件权限掩码
	[root@localhost ~]# umask  #查看 ;也可以修改,如:umask 0000
	0022 		#系统默认
		目录创建后的权限是755 计算方式是 0777-0022 ==0755
		文件创建后的权限是644 计算方式是 0777-0022-0111 ==0644
			#系统这么做的原因是:保护自己


进程管理

PS

process status #进程状态管理 ps

进程(了解)
	进程是已经启动的可执行程序的运行实例,进程有以下组成部分
	1.一个文件或多个
	2.被配内存的地址空间
	3.有权限限制
	4.程序代码的一个或多个副本(也叫执行线程)
	5.像人一样有状态

ps aux #使用BSD语法查看系统中的每个进程: 
	ps a 显示现行终端机下的所有程序
	ps u 以用户为主的格式来显示程序状态
	ps x 不以终端机来区分
ps -ef 查看进程的父子关系  #-e 选择所有进程 -f查看完整列表
	UUID #父进程ID号  #子进程杀不死杀它爹
	ps o 自定义格式以,号区分隔列表
		[root@localhost ~]# ps axo user,pid,ppid |head -2
		USER        PID   PPID
		root          1      0
	
	[root@ybt ~]# ps -ef
	UID         PID   PPID  C STIME TTY          TIME CMD
	root          1      0  0 2月19 ?       00:00:03 /usr/lib/systemd/systemd --switched-ro
		#C是cpu使用率
	
	[root@localhost ~]# ps aux | head -2
	USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
	root          1  0.0  0.3  44276  6852 ?        Ss   2月15   0:02 /usr/lib/systemd/systemd --system --deserialize 15
		#user 用户名
		#PID PID编号,进程号
		#%cpu 程序CPU占用率  1以下都不大
		#%MEN 程序内存占用率  1以下都不大
		#VSZ 虚拟内存占用
		#RSS 占用实际内存
		#TTY 进程运行的终端 ,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
		#STAT 进程运行状态
		#START 进程的启动时间
		#TIME 进程实际使用CPU运行的时间
		#COMMAND 命令的名称和参数
	进程状态STAT	 
		T==stopped  停止		#程序停止
		R = running      运行	#程序运行
		S = sleep        睡眠	#父进程但是子进程后父进程一般会睡眠
		Z = zombie	   丧尸	#程序已经没用,但是还在占用内存 #无响应	
		s 进程的领导者(在它之下有子进程);
		+ 位于后台的进程组;
		< 优先级高的进程
		N 优先级较低的进程
		D 无法中断的休眠状态(通常 IO 的进程);
		l 多线程,克隆线程
		X 死掉的进程 (基本很少见);

	[root@localhost ~]#  ps aux | grep httpd  #使用了grep过滤 
	root      23650  0.0  0.0 112824   968 pts/1    S+   18:23   0:00 grep --color=auto httpd  #并没有hpptd的进程,这个是grep的搜索进程

TOP

实时查看系统进程信息

top - 14:54:48 up 1 day,  5:48,  3 users,  load average: 0.00, 0.01, 0.05
#程序名-系统时间 up 运行时间, 登录用户数 ,CPU负载:5分钟,10分钟,15分钟
Tasks: 351 total,   1 running, 350 sleeping,   0 stopped,   0 zombie
#总进程数, 运行数, 睡眠睡, 停止数, 僵尸数
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
#CPU使用占比%:us用户打开程序,sy系统,ni优先级程序,id空闲CPU占比,wa等待,hi处理硬件中断的CPU时间,si 处理软件中断的CPU时间,st这个虚拟机被hypervisor偷去的CPU时间
KiB Mem :  1868688 total,   260476 free,   312484 used,  1295728 buff/cache
#物理内存:总量(单位)K, free空闲k, userd已使用k, buff/cache缓存磁盘内容k,
KiB Swap:  2097148 total,  2097148 free,        0 used.  1347904 avail Mem 
#交换内存/虚拟内存: 总量K, 空闲k, 已使用K, 缓冲交换区总量K
   PID USER   PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND      
   S进程状态
   %CPU 占比
   %MEN 内存占比
   TIME+ 进程使用的CPU时间总计,单位1/100秒
   COMMAND 进程命令
  	 以下了解
   		#PR 进程优先级,
   		#NI nice值,-值高优先级,+值低优先级 
   		#VIRT 进程使用的虚拟内存总量,单位K
   		#RES  进程使用的内存大小,单位k
   		#SHR  共享内存大小
 

top命令
top 界面操作
	h 帮助
	M 内存排行   #大M
	P CPU排行   #大P
	N PID大小排行 #大N
	K 输入PID编号,回车后杀死进程
	q退出
	
	<	进程页面向前翻页
	>    向后
	z 调整整体色彩
	
	
top -d n 控制top界面刷新时间 #top -b 3 为top界面每3秒刷新一次
top -p PID,PID 查看一个或多个进程号的动态信息 #top -p 233,334
	top -d 3 -p 233,334 #top界面每3秒刷新一次并查看233和334进程号的进程信息
kill PID 删除进程
kill -9 PID 强制删除进程 #直接关闭
kill -15 PID 强制终止 #文件正常关闭

nice
优先级
	
	nice值范围20到-20
		值越大:表示优先级越低,例如+20
		值越小:表示优先级越高,例如-20
		#PR:系统进程优先级都在0以上,我们的进程优先值都要加默认加20,所以我们最高进程优先级在系统中也是0
ps axo command,nice --sort=nice/-nice #查看进程command和nice值
renice 优先级大小 PID #设置进程的优先级大小
	[root@localhost ~]# ps axo pid,command,nice --sort=-nice | grep sleep
	 23653 sleep 600                     0
	 23660 grep --color=auto sleep       0
	[root@localhost ~]# renice  -20 23653
	23653 (进程 ID) 旧优先级为 0,新优先级为 -20
	[root@localhost ~]# ps axo pid,command,nice --sort=-nice | grep sleep
	23664 grep --color=auto sleep       0
 	23653 sleep 600                   -20


jobs
jobs 查看后台执行的挂起作业任务
	#用Ctrz+Z 把任务挂在后台 ,或使用&把命令挂在后台
fg 把命令调回前台  #前台进程
bg 让后台命令继续执行  #后台进程
kill %作业号 #结束后台作业任务,必须加上%
	
	[root@localhost ~]# sleep 6000 &  #命令后跟&使一个命令在后台运行
	[2] 23672
	[root@localhost ~]# ps -ef | grep sleep
	root      23670  23360  0 18:48 pts/1    00:00:00 sleep 5000
	root      23672  23360  0 18:51 pts/1    00:00:00 sleep 6000
	root      23676  23360  0 18:51 pts/1    00:00:00 grep --color=auto sleep
	[root@localhost ~]# jobs   #jobs查看后台执行的挂起任务
	[1]-  运行中               sleep 5000 &
	[2]+  运行中               sleep 6000 &
	[root@localhost ~]# fg 2	#fg将后台任务调回前台
	sleep 6000
	^Z					#ctrl+z 停止并挂起任务到后台
	[2]+  已停止               sleep 6000
	[root@localhost ~]# jobs
	[1]-  运行中               sleep 5000 &
	[2]+  已停止               sleep 6000
	[root@localhost ~]# bg 2	#bg 让后台挂起停止任务继续执行
	[2]+ sleep 6000 &
	[root@localhost ~]# jobs
	[1]-  运行中               sleep 5000 &
	[2]+  运行中               sleep 6000 &
	[root@localhost ~]# kill %2		#终止后台作业必须加上 %号
	[root@localhost ~]# jobs
	[1]-  运行中               sleep 5000 &
	[2]+  已终止               sleep 6000

cat /proc/cmdline #查看Linux内核版本
防火墙&selinux

查看selinux的模式 (必须让他是关闭状态) 
	#简介:selinux的目的是为了让各个服务进程都受到约束
		#很可惜没人用
	getenforce 查看命令
	开启模式显示结果:Enforcing
	关闭模式显示结果:Permissive
		临时性关闭	# setenforce 0 #设置selinux为permissive模式(即关闭)1开启
		永久关闭:vim /etc/sysconfig/selinux 里边的SELINUX=disable必须是这样 #重启生效

systemctl stop firewalld
	centos7关闭防火墙命令
systemctl disable firewalld
	这个是永久关闭

重定向管道符

输出
FD是访问文件的连接,省去冗长的绝对路径
	0 是键盘只读
	1,2 是终端  #1是正确输出 2是错误输出
	3+ 是普通文件

>或1>      标准输出重定向符号(执行原理直接覆盖)#专门重定向正确的信息,错误的无法写入
>>或1>>    标准输出追加定向符号(直接追加编辑)
2>		错误输出重定向符号  #专门重定向错误的信息,正确的无法写入
2>>		错误输出追加定向符号
			
			[root@ybt ~]# echo 100 > 00	#正确信息写入
			[root@ybt ~]# cat 00
			100
			[root@ybt ~]# error kkkkk >> 00 #错误信息无法写入
			bash: error: 未找到命令
			[root@ybt ~]# cat 00
			100
			[root@ybt ~]# error kkkkk 2>> 00  #将错误信息追加 
			[root@ybt ~]# cat 00
			100
			bash: error: 未找到命令

			&可以不用变化命  #错误正确的都可以输入 使用&
			[root@ybt ~]# echo {1..23} &>00
			[root@ybt ~]# error {1..23} &>>00
			[root@ybt ~]# cat 00
			1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
			-bash: error: 未找到命令
		
输入

mail

mail示例:
[root@ybt bin]# mail -s "mailtest" ybt  #像ybt用户发送mail 主题为mailtest
this is a mail		#内容
EOT  #按ctrl +d 结束输入

	[ybt@ybt ~]$ mail	#ybt用户输入mail查看是否有邮件
	Heirloom mailx version 12.5 7/5/10.  Type ? for help.
	"/var/spool/mail/ybt": 1 message 1 new
	>N  1 root@ybt.localdoma Mon Feb 14 06:10   22/577   mailtest
	? 1			#输入1接收擦看mail信息
	Message  1:
	From root@ybt.localdomain  Mon Feb 14 06:10:41 2022
	Return-Path: <root@ybt.localdomain>
	X-Original-To: ybt
	Delivered-To: ybt@ybt.localdomain
	Received: by ybt.localdomain (Postfix, from userid 0)
		id 4189B478BA76; Mon, 14 Feb 2022 06:10:41 +0800 (CST)
	Date: Mon, 14 Feb 2022 06:10:41 +0800
	To: ybt@ybt.localdomain
	Subject: mailtest
	User-Agent: Heirloom mailx 12.5 7/5/10
	MIME-Version: 1.0
	Content-Type: text/plain; charset=us-ascii
	Content-Transfer-Encoding: 7bit
	Message-Id: <20220213221041.4189B478BA76@ybt.localdomain>
	From: root@ybt.localdomain (root)
	Status: R
	
	this is a mail	#mail内容

#输入
	#利用输入重定向,把文件内容代替人为的输入
<       标准输入重定向符号(执行原理直接覆盖)
<<      标准输入追加重定向符号
	[root@ybt ~]# mail -s 'test' ybt < file #直接将fail内容<重定向输入给mail

	cat >> file <<EOP...EOP #多行输入

|,tee,Xargs
| 管道符号 (将管道前执行的结果,给管道符号后命令和参数执行);经常余xargs配合使用

tee 管道 #将管道前的内容保存一份
	#cat file|tail -1|tee 1.txt #将tail -1的处理结果保存到了1.txt

xargs分组命令(将信息进行分组显示)(配合|符使用)
	-n  #分为几组 seq 10 | xargs -n2 > 3.txt
	xargs -n10 < 88 将文件内容分成10组
	xargs < 文件 将文件内容变为一整行
	xargs < 文件 >1 将文件内容变成一组,内容重定向到1文件
	find ./ -name '*.txt'|xargs cp -t ybt
	find ./ -name '*.txt'|xargs rm -rf


磁盘管理

#了解
	硬盘分为:固态,机械
  	接口类型 SATA<SCSI<SAS机械硬盘  
  	磁盘的I/O消耗;大的数据储存每次要拆分成每一块储存单元,每1s input 消耗 I/O
  	
 #磁盘命名
 	SATA(串口)
 		/dev/sda #/dev设备文件目录:
 			#sda是一个文件
 			#s代表sata就是串口
 			#d代表磁盘
 			#a第一块
 		/dev/sdb #sdb就是第二块, c就是第三块...
 	IDE(并口) #已淘汰;了解
 		/dev/hda
 分区方式
 	MBR	#主引导记录是采用MBR分区表的硬盘的第一个扇区,即C/H/S地址的0柱面0磁头1扇区,也叫做MBR扇区
 		支持的最大的磁盘容量是<2TB,设计是分配四个分区,如果希望超过4个分区,需要放弃主分区,改为扩展分区和逻辑分区
 			扩展分区也是主要分区的一种,但它与主分区的不同在于理论上可以划分为无数个逻辑分区。
 	GPT	#全局唯一标识分区表
 		支持大于2TB的磁盘,支持128个分区
查看磁盘信息
	添加磁盘	 			#新房 #虚拟机新增 
管理磁盘流程三部曲
	分区					#分屋子
	格式化/创建文件系统		#放家具/打造格子柜子	indoe和block
	挂载					#安装门/目录

查看磁盘信息
	[root@ybt yy]# ll /dev/sd*
	brw-rw----. 1 root disk 8,  0 2月  19 21:06 /dev/sda	
	#sda是同一块盘 sda1只是它的另一个分区
	brw-rw----. 1 root disk 8,  1 2月  19 21:06 /dev/sda1
	brw-rw----. 1 root disk 8,  2 2月  19 21:06 /dev/sda2
	brw-rw----. 1 root disk 8, 16 2月  19 21:06 /dev/sdb
	brw-rw----. 1 root disk 8, 32 2月  19 21:06 /dev/sdc
	brw-rw----. 1 root disk 8, 48 2月  19 21:06 /dev/sdd
	brw-rw----. 1 root disk 8, 64 2月  19 21:06 /dev/sde
	brw-rw----. 1 root disk 8, 80 2月  19 21:06 /dev/sdf
	
	lsblk #列出所有可用块设备的信息(磁盘)
	[root@ybt yy]# lsblk
	NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
	sda               8:0    0   50G  0 disk 	#sda分为了sda1和sda2;sda2又分为/和SWAP
	├─sda1            8:1    0  500M  0 part /boot
	└─sda2            8:2    0 49.5G  0 part 
	  ├─centos-root 253:0    0 47.5G  0 lvm  /
	  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
	sdb               8:16   0    5G  0 disk 
	sdc               8:32   0    5G  0 disk 
	sdd               8:48   0    5G  0 disk 
	sde               8:64   0    5G  0 disk 
	sdf               8:80   0    5G  0 disk 
	sr0              11:0    1  7.2G  0 rom 
		#以下了解
		NAME :这是块设备名。
		MAJ:MIN :本栏显示主要和次要设备号。
		RM :本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
		SIZE :本栏列出设备的容量大小信息
		RO :该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。
		TYPE :本栏显示块设备是否是磁盘或磁盘上的一个分区。sr0是只读存储(rom)。
		MOUNTPOINT :本栏指出设备挂载的挂载点。
	
df&du
df -h 以人类可读方式查看磁盘使用情况/挂载情况
df -T 查看磁盘使用情况并显示磁盘类型

du  列出当前目录及子目录所占空间大小
du -h 以人类的方式列出当前目录及子目录所占空间大小
du   file显示指定文件所占空间
du -sh * 列出当前目录所有文件及目录所占空间大小  (- s  对于目录,不包括子目录的大小 )
du -sh d 目录 查看本目录总大小(不看其他目录及其子目录)
du -h --exclude='*xyz*' 列出当前目录及子目录的目录名不包括xyz字符串的目录的大小
xfs_quota
#quota 磁盘容量配额服务
vim /etc/fstab
	UUID=72a400f4-7164-4ce2-a171-bdadc7e0e960 /boot                   xfs     defaults,uquota #upuota需要先在这里设置       0 0

[root@ybt ~]#  xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 ybt' /boot     
			#-c 参数用于以参数的形式设置要执行的命令;-x参数是专家模式 ;用户配额(-u),组配额(-g),项目配额(- p)
			#硬盘使用量的软限制和硬限制分别为 3MB 和 6MB;创建文件数量的软限制和硬限制分别为 3 个和 6 个。
	[root@ybt ~]# xfs_quota -x -c report /boot  #查看
		User quota on /boot (/dev/sda1)
		                               Blocks                     
		User ID          Used       Soft       Hard    Warn/Grace     
		---------- -------------------------------------------------- 
		root           110564          0          0     00 [--------]
		ybt              6144       3072       6144     00  [6 days]

	[ybt@ybt ~]$  dd if=/dev/zero of=/boot/file bs=5M count=1 #5M没问题
	记录了1+0 的读入
	记录了1+0 的写出
	5242880字节(5.2 MB)已复制,0.00332397 秒,1.6 GB/秒 
	[ybt@ybt ~]$  dd if=/dev/zero of=/boot/file bs=8M count=1	#8M直接报超出限额
	dd: 写入"/boot/file" 出错: 超出磁盘限额
	记录了1+0 的读入
	记录了0+0 的写出
	6291456字节(6.3 MB)已复制,0.00864538 秒,728 MB/秒
	
		软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
		硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
		
		xfs_quota -x -c "disable -up" /boot
			disable :暂时取消quota的限制,但其实系统还是在计算quota中,只是没有管制而已。
		xfs_quota -x -c "enable -up" /boot
			enable :恢复到正常管制的状态,与disable相互取消、启用
		xfs_quota -x -c "off -up" /boot
			#off完全关闭quota的限制,使用了这个状态后,只有卸载再重新挂载才能再次启动quot
		xfs_quota -x -c remove -p /boot
			#remove必须要在off的状态下才能执行的指令~这个remove可以可以“移除”quota的限制设置。只要remove -p就可以了!


edquota #用于编辑用户的 quota 配额限制
	#-u参数表示要针对哪个用户进行设置;-g 参数表示要针对哪个用户组进行设置
创建分区
1.MBR:分区
2.启动分区工具
	fdisk /dev/sdb #回车进入会话模式 
3.会话模式
	提示1
		你的操作会清理了/dev/sdb的所有内容	
		按 n 继续,并进入提示2;按m获得帮助
	提示2
		命令(输入 m 获取帮助):n
		Partition type:
   		p   primary (0 primary, 0 extended, 4 free)
   		#p 主分区 (0个主分区,0扩展分区,4空闲分区)#选择主分区
   		e   extended
		#e 扩展分区
	提示3
		Select (default p): p
		分区号 (1-4,默认 1):1	#选择分区编号1 #1-4都可以选,因为都是空闲的
	提示4
		起始 扇区 (2048-10485759,默认为 2048)#直接回车,起始默认就行,因为每次分区它都会从上一个分区开始
		#从2048开始而不是从0开始的原因,是因为放了这个分区的index
	提示5
		将使用默认值 2048
		Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759)#直接选 +size{K,M,G} 如:这个区到2G,写:+2G #回车默认选到磁盘最大值
	提示6
		分区 1 已设置为 Linux 类型,大小设为 2 GiB	#设定本个分区的信息
		命令(输入 m 获取帮助):w #此信息出现后并未生效需要 w=write写
	提示7
		The partition table has been altered!
		Calling ioctl() to re-read partition table.
		正在同步磁盘。	  #成功

4.刷新分区表
	partprobe /dev/sdb  #刷新硬盘就可以了,不用刷分区

5.fdisk -l /dev/sdb #-l 列出分区表
	磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
	Units = 扇区 of 1 * 512 = 512 bytes
	扇区大小(逻辑/物理):512 字节 / 512 字节
	I/O 大小(最小/最佳):512 字节 / 512 字节
	磁盘标签类型:dos
	磁盘标识符:0x94bbcb05
	   设备 Boot      Start         End      Blocks   Id  System	#start开始 End结束 blocks块大小
	/dev/sdb1            2048     4196351     2097152   83  Linux

6.查看磁盘情况
	[root@ybt yy]# lsblk
	NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
	sda               8:0    0   50G  0 disk 
	├─sda1            8:1    0  500M  0 part /boot
	└─sda2            8:2    0 49.5G  0 part 
	  ├─centos-root 253:0    0 47.5G  0 lvm  /
	  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
	sdb               8:16   0    5G  0 disk 
	└─sdb1            8:17   0    2G  0 part #已经创建了sdb1分区
	sdc               8:32   0    5G  0 disk 
	sdd               8:48   0    5G  0 disk 
	sde               8:64   0    5G  0 disk 
	sdf               8:80   0    5G  0 disk 
	sr0              11:0    1  7.2G  0 rom  

创建文件系统
文件系统 #格式化
mkfs.ext4 /dev/sdb1 #make创造 file 文件 system系统 extend4扩展文件系统的第四代,是文件系统的类型; /dev/sdb1 第二块串口磁盘的分区准备格式化了
	[root@ybt yy]# mkfs.ext4 /dev/sdb1
	mke2fs 1.42.9 (28-Dec-2013)
	文件系统标签=
	OS type: Linux
	块大小=4096 (log=2)
	分块大小=4096 (log=2)
	Stride=0 blocks, Stripe width=0 blocks
	131072 inodes, 524288 blocks
	26214 blocks (5.00%) reserved for the super user
	第一个数据块=0
	Maximum filesystem blocks=536870912
	16 block groups
	32768 blocks per group, 32768 fragments per group
	8192 inodes per group
	Superblock backups stored on blocks: 
		32768, 98304, 163840, 229376, 294912
	
	Allocating group tables: 完成                            
	正在写入inode表: 完成                            
	Creating journal (16384 blocks): 完成
	Writing superblocks and filesystem accounting information: 完成 
#/dev/sdb1	分区创建完毕

挂载
创建挂载点,一个分区一个挂载点
	[root@ybt ~]# mkdir /mnt/disk1
mount   对存储设备进行挂载
        #挂载设备文件  挂载点(目录)
umount   对存储设备进行卸载“”
     	#umount 卸载点   或者umount 设备名  -f强制卸载
     	 umount /mnt/disk1 #卸载
mount -t ext4 /dev/sdb1 /mnt/disk1 
	# -t   指定文件系统类型集合  
	#mount -a 使开机启动配置文件挂载生效 
	#挂载到哪个目录都可以,比如:/home/,因为创建完文件系统后,进的是/mnt/disk1这个分区的磁盘里,而不是占用了/home
	#挂载后创建文件,在卸载,文件消失(找不到),只是被保存到设备磁盘里,在挂载后文件继续出现;#相当于U盘,拔出插入操作
	#挂载点有文件,如果其他磁盘设备强行挂载后,文件消失(找不到),卸载后文件出现 #相当于原有文件被遮挡
df -hT #以人类可读方式查看磁盘使用情况/挂载情况并显示磁盘类型
永久挂载
查看磁盘文件类型和uuid
	[root@ybt ~]# blkid /dev/sdb1 #查看磁盘类型和UUID ;blkid默认查看全部 #UUID为系统中的存储设备提供唯一的标识字符串
	/dev/sdb1: UUID="24f0092a-2104-47a5-b008-5f94d6ec8968" TYPE="ext4" 

vim /etc/fstab设备挂载策略文件  #此文件在编写完成后不会马上生效
	设备 		  挂载点 		  文件系统类型 	挂载参数 	  是否备份 	是否检测
 /dev/sR0或UUID 	/westos		 iso9660 		defaults         0            0
 
mount -a #重新读取/etc/fstab文件后就可以生效了;直接输入mount -a 

autofs
#动态挂载
安装
	yum -y install autofs
配置
	[root@ybt ~]# grep ybt /etc/auto.master 
	/autofstest	/etc/ybt.misc  #/autofstest挂载目录 /etc/ybt.misc是自定义子配置文件,必须以.misc结尾
	[root@ybt ~]# cat /etc/ybt.misc 子配置文件 #必须在/etc下创建
	ybt  192.168.32.136:/webdata #ybt是挂载目录里的动态挂载子目录 另一个是挂载文件
启动
	systemctl start/enable autofs
验证
	[root@ybt ~]# df|grep ybt		#没有
	[root@ybt ~]# cd /autofstest/ybt	#进入动态库后
	[root@ybt ybt]# df|grep ybt	#实现了动态挂载
	192.168.32.136:/webdata 49746432  5281024 44465408   11% /autofstest/ybt
	
#适合NFS服务器挂载
	

交换分区管理Swap

#就是一个普通分区
#作用:提升内存容量,防止OOM(内存溢出) #将磁盘的一部分充当内存用,热点事件都放到swap上——>内存——>CPU提升了整体的运行速度
#SWAP大小:一般设置为内存的两倍
	生产一般:4G-16G内存,最小4G交换
			16-64内存,最小8G交换
			64-256内存,最小16G交换

	
增加交换分区
free -h  内存使用情况 #查看内存使用情况
    Mem:    total        used        free      shared       buff/cache    							available
		全部内存	已用内存	剩余内存  共享链接使用	系统的page cache和buffer使用的内存		应用程序还可以申请到的内存
		#available 一般都是<=free+buff/cache;因为系统的一些page或cache是不能回收的
	Swap:  2.0G          0B        2.0G  #交换内存

#启动分区工具
	[root@ybt ~]# fdisk /dev/sde	
	欢迎使用 fdisk (util-linux 2.23.2)。
	
	更改将停留在内存中,直到您决定将更改写入磁盘。
	使用写入命令前请三思。
	
	Device does not contain a recognized partition table
	使用磁盘标识符 0xd6c5e40a 创建新的 DOS 磁盘标签。
#n下一步	
	命令(输入 m 获取帮助):n
	Partition type:
	   p   primary (0 primary, 0 extended, 4 free)
	   e   extended
#选择主分区 p
	Select (default p): p	
	分区号 (1-4,默认 1):
	起始 扇区 (2048-10485759,默认为 2048)#起始默认2048
	将使用默认值 2048	
#设置分区大小,回车默认最大值
	Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):+1G	
	分区 1 已设置为 Linux 类型,大小设为 1 GiB
	
#获得帮助	
	命令(输入 m 获取帮助):m
	命令操作
#其中t为修改一个分区的系统id
	   t   change a partition's system id	
	
		命令(输入 m 获取帮助):t
		已选择分区 1
#列出所有代码块 
		Hex 代码(输入 L 列出所有代码):l	
		82  Linux 交换 / So 
#其中82为 linux 交换分区 #这里是重要区别:选择类型
	Hex 代码(输入 L 列出所有代码):82		
	已将分区“Linux”的类型更改为“Linux swap / Solaris”
#write写入
	命令(输入 m 获取帮助):w	
	The partition table has been altered!
	
	Calling ioctl() to re-read partition table.
	正在同步磁盘。
#刷新磁盘 
	[root@ybt ~]# partprobe /dev/sdb
#查看
	[root@ybt ~]# ll /dev/sde*
	brw-rw----. 1 root disk 8, 64 2月  19 23:46 /dev/sde
	brw-rw----. 1 root disk 8, 65 2月  19 23:46 /dev/sde1 #已生成分区
#格式化交换分区	
	[root@ybt ~]# mkswap /dev/sde1
	正在设置交换空间版本 1,大小 = 1048572 KiB
	无标签,UUID=b2c609ec-71e4-4dd6-be0f-0b8f9fcae30f
#挂载 
	swapon /dev/sde1 
#验证 free -h
 	

逻辑卷LVM

目的:管理磁盘的一种方式,性质与基本磁盘无异
特点:随意扩张大小

术语

​ PV:物理卷(Physical volume)

​ VG:卷组(Volume Group)

​ LV:逻辑卷(Logical Volume)

创建LVM
1.准备物理磁盘
2.PV 
	#将物理磁盘,转换成物理卷-PV
	[root@ybt ~]# pvcreate /dev/sdd
 	 Physical volume "/dev/sdd" successfully created #successfully 成功

2.vg 
	#创建卷组-VG
	[root@ybt ~]# vgcreate vg1 /dev/sdd	#vg1是自定义的名字
  	Volume group "vg1" successfully created #成功
	
3.LV
	#创建逻辑卷
	方法一
	[root@ybt ~]# lvcreate -L 200M -n lv2 vg1 #-L大小M,G -n卷名 刚创建vg1卷组名
 	 Logical volume "lv2" created.	#创建逻辑卷“lv2” #大小为200M
4.创建文件系统 
	mkfs.ext4 /dev/vg1/lv2  #格式化 #vg1卷组名字 lv2逻辑卷名字
5.创建挂载点
	 mkdir /mnt/disk3
6.挂载
	mount /dev/vg1/lv2 /mnt/disk3/  
VG管理
扩大VG卷 #vgextend    #extend是扩展的意思
1.创建PV #将新的磁盘创建为PV 物理卷
	[root@ybt ~]# pvcreate /dev/sdf
 	 Physical volume "/dev/sdf" successfully created
2.扩展VG
	[root@ybt ~]# vgextend vg1  /dev/sdf #将PV加入到要扩展的VG卷组
  	Volume group "vg1" successfully extended
LV扩容
1.[root@ybt ~]# vgs	#查看VG详情
  	VG     #PV #LV #SN Attr   VSize  VFree 
  	centos   1   2   0 wz--n- 49.51g 44.00m
  	vg1      2   1   0 wz--n-  9.99g  9.80g #vg1剩余 9.8G

2.扩展LV
	[root@ybt ~]# lvextend -L +9G /dev/vg1/lv2  #LV扩展命令
  	Size of logical volume vg1/lv2 changed from 200.00 MiB (50 extents) to 9.20 GiB (2354 extents).
  	Logical volume lv2 successfully resized.
3.FS扩容
	[root@ybt ~]# resize2fs /dev/vg1/lv2  #resize2fs扩容命令,调整ext2\ext3\ext4文件系统的大小,它可以放大或者缩小没有挂载的文件系统的大小。
	resize2fs 1.42.9 (28-Dec-2013)
	Filesystem at /dev/vg1/lv2 is mounted on /mnt/disk3; on-line resizing required
	old_desc_blocks = 2, new_desc_blocks = 74
	The filesystem on /dev/vg1/lv2 is now 9641984 blocks long.

4.df-h #查看


LV缩容
1.卸载
2.检查完整性
	[root@ybt ~]# e2fsck -f /dev/vg1/lv2 #必做
3. resize2fs /dev/vg1/lv2 500M  #缩小到500M
4.挂载后查看状态
	df -h
逻辑卷快照
#快照卷的容量必须等同于逻辑卷的容量;
#快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。

1.现在要快照的目录写入文件
	echo kexiao  > /home/ybt/ybt.txt
2.创建快照
	[root@ybt ybt]# lvcreate -L 100M -s -n SNAP /dev/ybt/ke
  	Logical volume "SNAP" created.
3.写满空间
	[root@ybt ybt]# dd if=/dev/zero of=/home/ybt/file1 count=1 bs=100M
4.快照恢复
	[root@ybt ~]# lvconvert --merge /dev/ybt/SNAP 
  	Merging of volume SNAP started.
5.挂载后查看
	[root@ybt ~]# ls /home/ybt/
	lost+found  ybt.txt

逻辑卷删除
1.取消挂载
2.删除逻辑卷
	[root@ybt ~]# lvremove /dev/vg1/lv2     
	#pv/vg/lv/remove 加设备名和卷名都能移除
	Do you really want to remove active logical volume lv2? [y/n]: y
 	Logical volume "lv2" successfully removed  #成功移除
3.lvs查看
	

	

PV,VG,LV
查看命令
[root@ybt ~]# pvs  #PV查看
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/sda2  centos lvm2 a--  49.51g 44.00m
  /dev/sdd   vg1    lvm2 a--   5.00g  4.80g  #在vg1卷组中
  /dev/sdf   vg1    lvm2 a--   5.00g  5.00g  #在vg1卷组中

[root@ybt ~]# vgs	#VG查看
  VG     #PV #LV #SN Attr   VSize  VFree 
  centos   1   2   0 wz--n- 49.51g 44.00m
  vg1      2   1   0 wz--n-  9.99g  9.80g
  #vg1组中 有两个PV  VSize总空间  Vfree剩余

[root@ybt ~]# lvs  #LV查看
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao----  47.46g                                                    
  swap centos -wi-ao----   2.00g                                                    
  lv2  vg1    -wi-ao---- 200.00m   
  
  查看卷组信息 pv/vg/lv/display 

文件系统
EX4文件系统
	Ext3:文件系统最大16TB
	Ext4:文件系统最大16TB
	XFS:文件系统最大100TB
		#一个磁盘的分区就是一个文件系统
			
	#读取数据的原理
		1:找到指定数据
		2:读取数据内容,先获取文件数据inode信息
		3:根据inode信息在磁盘上找到对应block
		4:根据block信息获取文件真正内容
		
	#inode(相当于书的目录,用于储存文件属性信息)
		ll -i 查看文件inode信息
		df -i 查看磁盘inode使用情况
		索引节点(文件或数据在磁盘中保存位置)
		一个文件占用一个inode,同时记录此文件数据所在的block number
		inode大小为128bytes
		#当inode被用完就无法创建新的文件
			
	#block:索引节点指向的位置(文件或数据的具体内容)
		block默认大小为4k,可以进行调整
		比较大的文件,会占用多个block
		比较小的文件,剩余空间无法使用,浪费磁盘空间
		创建一个文件至少占用一个inode和一个block(非空文件) #如果block默认4K不会被用完,但是inode已经被占用
		磁盘读取数据按block为单位读取的
		读取一个block会消耗一次磁盘I/O(input和output 输入和输出)
		
	#superblock
		block与inode的总量
		未使用与已使用的inode/block数量
软硬连接
硬链接数
	#硬链接
	相当于文件有几个门,在一个分区中,inode号码相同的文件,互为硬链接(硬链接文件同步更新,因为inode指向了同一个block)
			ll -i
			52250321 -rw-r--r--. 3 root root 547 1月   4 09:54 ii
			用find查找另外2个相同硬链接(-inum 根据文件inode信息查找)
			[root@ybt kk]# find ./ -type f -inum 52250321
			./l
			./ii
		ln 链接的源文件 硬链接的文件信息 #示例:ln 88 kk/ii
		
	#软连接
		文件的快捷方式
		ln -s 链接的源文件 软链接的文件信息 #示例:ln -s 88 kk/ii

	#软硬链接的区别
		1链接后大小和权限不一致(创建过程不一致)
		2连接后的文件和源文件 innode信息有出入
			硬链接inode号码一致
			软连接inode号码不一致
		3源文件被删除后
			硬链接有效,软链接无效
			(软连接源文件在次创建后有效)
		4.硬连接只能针对文件做,不能对目录做
			硬链接只能在同分区做(因为同分区inode指向了同一个block)
raid

了解

raid0 储存类型: 双机热备型
raid5 储存类型: 经典类型:3块数据盘(其中两块数据和一块校验)1块备份盘,效率为n-1/n 其中n是一块磁盘的意思

查找和压缩

查找
#which    显示命令文件所在路径位置 which ls
#whereis 显示命令路径以及文件 #whereis ls

#alias  查看系统的别名
	设置命名的语法
	alias 别名名称= ‘命令’  	#alias l=ls
	#unalias 别名   取消别名  #unalias l
	
#locate 文件名称 --可以显示文件所在路径
#updatedb --建立文件和目录结构对应关系,便于索引(yum -y install mlocate)
	[root@ybt ~]# locate file222.ybt  #无法查找到
	[root@ybt ~]# updatedb	#建立关系后
	[root@ybt ~]# locate file222.ybt #可以查找到了
	/root/file222.ybt
	

#tree /目录  	显示指定目录中的所有数据和所有结构信息
		tree -L 2 /目录 查看目录结构层级信息
		tree -d /目录	显示目录中所有结构信息
	
#find	文件查找 总结(所有查找之后删除的,尽量先查找,看是否是自己需要删除的)
	find 目录 -type 文件类型 -name "文件名称"
		删除本1层目录大于十天的文件(+n天前 -最近n天 正好前面第n天)
		find ./ -maxdepth 1 -type f -mtime +10 -delete
		-delete    删除(只能放到结尾)
		-maxdepth  查找目录层级的深度
		-perm      根据权限查找数据信息
		-size      根据大小查找默认K(还有M;G)(-小于+大于,默认没有加减是=)
		-mmin 	   文件的数据最后一次修改是在n分钟前。 +n几分钟前 -n几分以内
				ll--block-size=c k M G 查看文件目录文件的单位大小(由于单位问题没有1G1M1k只有1024进阶最好用M代替1G到两G)
		-exec	   对查找的数据进行相应的处理 (配合find使用)
		-iname 	   忽略名称大小写
		-inum 	   根据文件inode信息查找
		-user 用户名
		-group    组
		-type  f 表示文件 d 表示目录 c 表示字符设备 b 表示块设备 s 表示套接字 l 表示链接

	find实例:(find移动和删除,习惯先查找,避免犯错)
		查找当前目录及其子目录下的1和2
		find . -name "*1" -o -name "*2"      (-o是或)
		
		在/home下查找不是以 .txt 结尾的文件: 
		find /home ! -name “.txt”             (!表示否定)
		-iname (-i是忽略大小写)
	一条命令删除本目录所有.txt文件
		方法一
		find ./ -maxdepth 1 -type f -name "*.txt" -delete  
		方法二
		[root@ybt ~]# find ./ -maxdepth 1 -type f -name "*.txt" -exec rm -rf {} \;
		[root@ybt ~]# ls
		88  kk
		(理解)
		[root@ybt ~]# ls
		88  kk  y.txt
		[root@ybt ~]# find ./ -maxdepth 1 -type f -name "*.txt"
		./y.txt
		将查找出的内容放入{}里-exec 后边跟命令并执行(是一条一条的执行) \撬棍方便系统识别;号结束
		方法三
		rm -rf `find . -maxdepth 1 -type f -name '*.txt'` 
		方法四
		find ./ -maxdepth 1 -type f -name "*.txt" |xargs rm -f
	一条命令批量复制文件
		find ./ -maxdepth 1 -type f -name "*.txt" |xargs -i cp {} kk
		cp *.txt kk
		cp `find . -maxdepth 1 -type f -name '*.txt'` kk
		find ./ -maxdepth 1 -type f -name "*.txt" -exec cp {} kk \;
		for y in *.txt; do  cp $y /root; done		
		find -maxdepth 1 -type f -name "*.txt" |xargs cp -t kk

#watch -b 监控当前页面 
	 -n 指定刷新时间间隔 #默认一秒
        (watch -b 'ls lv.*' 全屏监控当前目录下的lv.后缀所有文件)
		(watch -b -n 1 'df -h; ls -l') 监视服务器磁盘情况

#wc  该命令统计给定文件中的字节数、字数、行数,可配合 管道符使用 
	例:wc [参数] file
    - c 统计字节数
    - l 统计行数
    - w 统计多少单词
	配合管道符示例:watch -d 'ls *|wc -l' (监控当前页面行数) 或查看当前行数ll |wc -l
	

grep 参数 文件 对信息进行过滤
	grep -B n 显示指定信息前几行内容(包括本身)
	grep -A n 显示指定信息后几行内容(包括本身)
	grep -C n 显示指定信息前后几行内容(包括本身)
	grep -v 参数  取反,不看参数信息行,其他行全看
	grep -c   显示指定信息在文件中有多少行出现
	grep -n 输出的同时显示行号
	grep -o  只显示匹配到的内容
	grep -i  略大小写

压缩
#压缩命令tar #压缩的原理:去重法
		tar -xf  名字.tar.gz  *    压缩目录下全部文件
	压缩命令语法tar zcvf /mul/file.tar.gz  指定要压缩的数据文件
	 -z gzip方式进行压缩
	 -j bzip方式进行压缩 #通过bzip2过滤存档文件  
	 -J xzip  #通过xz过滤存档文件  
	 -c 创建包
     -x 解包
     -f  指定压缩包文件路径信息
     -v 显示压缩和解压过程
     -t 查看内容
     -P  保持绝对路径
     -p   保持原有权限
     -C路径 改变解压压缩的路径(只对解包有效)  示例:tar -xf 1.tar.gz -C /home/
	 压缩数据方法
	 [root@ybt ~]# ll -h 1.txt 
	-rw-r--r--. 1 root root 6.6M 2月  21 05:56 1.txt
	[root@ybt ~]# tar -cf 1.tar 1.txt  #直接打包,大小不变 
	[root@ybt ~]# tar -zcf 1.tar.gz 1.txt  #被压缩为2.1N #用时变长
    [root@ybt ~]# tar -cjf 1.tar.bz 1.txt 	#被压缩为1.2M #用时比gz时长 #yum -y install bzip2
	[root@ybt ~]# tar -cJf 1.tar.xz 1.txt 	#被压缩为191K #用时最长
	[root@ybt ~]# ll

	 -rw-r--r--. 1 root root 6.6M 2月  21 05:57 1.tar
	-rw-r--r--. 1 root root 2.1M 2月  21 05:58 1.tar.gz
	-rw-r--r--. 1 root root 1.2M 2月  21 15:47 1.tar.bz
	-rw-r--r--. 1 root root 191K 2月  21 05:59 1.tar.xz

	 
	 在不解压的情况下查看压缩包里边的数据
	 tar -tf 压缩包


	 检查压缩数据包
	 1.看文件的大小和源文件是否一致
	 2.利用vimdiff或者diff对比两个文件内容是否有区别
	 3.利用grep -vwf file1 file2  #或者使用for循环grep更精确
		(过滤出file2中不包含file1任意行的行,最终结果是file2的部分内容)( -v是反比,f是过滤行)



软件管理

rpm包 #也称二进制(binary cade)无需编译,可以直接使用
	 # zip - 3.0-11. el7. x86_64 .rpm
	 	#zip 软件包名;3.0-11版本号;#el7 发行版本(Release5/6/7) enterprise linux(企业版linux);系统平台(32/64) x86_64; 文件后缀 .rpm 
	 
源码包 #需要经过编译环境编译才能运行
	#可以设定个人设置,开关 #缺点配置复杂
RPM包管理
YUM工具
#yum基于RPM管理,能在指定服务器自动下载rpm和安装,自动处理依赖关系
YUM本地源:#本地yum源安装
		目的:从设置的本机yum地址获得安装包,并安装
	yum目录
		/etc/yum.repos.d/  
	1.编写本地yum配置文件	#先备份系统yum源信息
		[root@ybt yum.repos.d]# cat ybt.repo 
		[ybt] #库名称
		name=ybt	#ybt是库描述,name是必须的
		baseurl=file:///mnt/cdrom #下载库的具体地址 	#file:///mnt/cdrom 是本机文件夹
		gpgcheck=0 #0是关闭校验 1开启
		enabled=开关 #是否使用本仓库0关1开
	2.挂载安装光盘
	 	mkdir /mnt/cdrom 	#创建挂载目录
		mount /dev/cdrom /mnt/cdrom/ #将系统光盘挂载到配置指定的目录下 #挂载前要先通电和连接上光盘
		[root@ybt cdrom]# ls 
		CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
		EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7	#Packages目录里有大量的软件rpm安装包
		EULA             isolinux  repodata  TRANS.TBL
		#vim /root/.bashrc #将挂载命令写入系统变量 实现永久挂载 
	
安装软件 yum -y install 软件名 软件名.. #-y自动确认
重新安装 yum -y reinstall 软件名 软件名..
升级 yum -y update 软件名 软件名..	#不跟软件名,默认升级系统
卸载 yum -y remove 软件名 软件名.. 
查询软件包是否存在或已安装 yum list 软件名  #不跟软件名列出仓库中所有软件包
刷新缓存 yum makecache 
清空缓存 yum  clean   all
查看当前可用的yum源 yum repolist  
查看哪些软件包组可以安装 yum grouplist  
直接安装软件包组 yum groupinstall -y  包组名称  
yum groupremove 软件包组 移除指定的软件包组
yum groupinfo 软件包组 查询指定的软件包组信息
Yum运行被锁定
	/var/run/yum.pid 已被锁定 解决办法删除这个文件
网络YUM源
#百度搜索: 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区——>选择CENTOS #也把扩展yum: Epel 镜像下载一下,更全
1. wget http://mirrors.aliyun/repo/Centos-7.repo  #直接下载阿里yum源 下载之前先备份之前的yum源
	wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun/repo/epel-7.repo

2.将yum源放入/etc/yum.repos.d/目录
3.清除以前使用yum的缓存	 yum  clean   all #可以不用这一步
4.建立一个缓存,以后方便在缓存中搜索  yum makecache 
RPM工具
 #系统自带工具
 #RPM无法处理依赖
	安装软件 rpm -ivh filename.rpm  #-v:详细信息 -h:进度
	卸载软件 rpm -e filename.rpm 
	查询软件rpm -q filename.rpm 
			  -qc 查询配置文件	#-c查询配置文件
			  -qi  查看指定软件的详细信息
			  -ql:查看指定软件的文件安装清单
	升级软件rpm -U filename.rpm 
源码编译安装
腾讯nginx编译安装
1. yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel
	#准备编译环境安装以上软件
2. wget http://tengine.taobao/download/tengine-2.3.3.tar.gz #下载实验所需的腾讯ngine软件
3.解压软件并进入目录
4.创建用户www #目的编译安装所需的用户
5.在解压的目录下输入编译命令
	./configure --user=www --group=www --prefix=/usr/local/nginx  
		#Configure是配置,在待安装的源码路径下使用命令./configure–help输出详细的选项列表
		#user=用户  group=组  #--prefix是指定目录
		#有报错都是编译软件没有装好的结果,安装后再次执行即可
6.翻译 make #在解压目录下进行输入make 进行翻译
	sed -e "s|%%PREFIX%%|/usr/local/nginx|" \
	-e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \
	-e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \
	-e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \ #这个报错没有关系
	< man/nginx.8 > objs/nginx.8
	#编译成功
7.安装 make install #在解压目录下进行输入make install 进行安装
	#没有error报错
8.启动验证 /usr/local/nginx/sbin/nginx #在解压目录下输入
9.关闭httpd 启动程序,甚至可以卸载	#因为都是HTTP和反向代理web服务器,有冲突
10.在浏览器输入本机地址
		Welcome to tengine!
	If you see this page, the tengine web server is successfully installed and working. Further configuration is required.
	For online documentation and support please refer to tengine.taobao.
	Thank you for using tengine.
	#腾讯nginx编译安装成功!!

任务计划

了解
at 一次性调度 #windows也可以使用 远古命令了
	[root@ybt ~]# at now +1min  #at 现在 一分钟后执行命令
	at> echo helloworld   #要执行的命令
	at> <EOT> #结束CTRL+D
atq 查看将要执行的任务
cron
编写定时任务:crontab   -e				服务名为:crond
查看定时任务:crontab   -l

  *    *    *    *   *            # 分时日月周		#这样写每分钟一次
  30   8    *    *   *            #每天早上8:30执行
  30   23   *   *   *             #每天晚上11:30执行
  30   23   *    *   5            #每周的周五晚上11:30执行
  30   23   1   *   5             #每周的周五或每月1号晚上11:30执行
  30   23   *   *   1-5       	  #每周的周一至周五晚上11:30执行
  30   23   *   *   1,3,7    	  #每周的周一  周三 周日晚上11:30执行
  0   */2   *   *   *             #每隔两个小时
  0    *    *    *   * 			#整0分时执行一次
   *:匹配范围内任意时间
   ,:分隔多个不连续的时间点
   -:指定连续时间范围
   /n:指定时间频率,每n ..
   
#以下操作需要root权限
[root@ybt ~]# crontab -eu ybt  #-u 用户名 为用户设置 
[root@ybt ~]# crontab -lu ybt	#查看
  *    *    *    *   *  echo 1 >> file1
crontab -r  #删除当前用户所有计划任务
crontab -ru user #删除指定用户计划任务  

#可通过计划任务目录/var/spool/cron/查看用户计划任务
[root@ybt ~]# cat /var/spool/cron/root #查看root计划任务
*    *    *    *   *  echo 1 >> file1
[root@ybt ~]# > /var/spool/cron/root  #清空计划任务
[root@ybt ~]# crontab -l	#查看已经没有计划任务了
[root@ybt ~]# echo -e '*    *    *    *   *  echo 1 >> file1' > /var/spool/cron/root	#命令行写入计划任务
[root@ybt ~]# crontab -l  查看
*    *    *    *   *  echo 1 >> file1

date
date(时间相关参数)
		查看时间
		[root@ybt ~]# date
		2021年 04月 19日 星期一 09:11:16 CST
		调整时间显示格式
		[root@ybt ~]# date +%F
		2021-04-19
		[root@ybt ~]# date "+%F %T"
		2021-04-19 09:23:21
		[root@ybt ~]# date "+%y-%m-%d %H:%M:%S"
		21-04-19 09:26:04
		修改系统实际时间
		[root@ybt ~]# date -s "2020-04-15 14:53:22"
		2020年 04月 15日 星期三 14:53:22 CST
		显示历史时间
		[root@ybt ~]# date +%F -d "-2day"
		2020-04-13
		显示未来时间
		[root@ybt ~]# date +%F -d "2day"或"+2day"
		2020-04-17
		
		date 03010820  #修改时间  #月日时分
		
		同步时间方法
		yum -y install ntp
		
		[root@ybt ~]#		ntpdate -u ntp.api.bz(同步上海时间服务器)
		19 Apr 22:27:30 ntpdate[4283]: step time server 120.25.115.20 offset 31905176.776871 sec


日志管理

#日志:记录了程序运行时的各种信息
	#因为磁盘时有限的,为了节省空间和整理方便,日志文件需要按时间或大小等维度分成多份,删除时间久的日志文件

/var/log/ 系统的大部分程序日志都在这个目录下 #系统程序出错可以直接来看报错日志 #如mysql cron日志和httpd程序日志目录

rsyslog是一个程序,是一个进程,
	配置文件:/etc/rsyslog.conf
	rsyslog配置文件规则:#RULES:规则,是一套生成日志,以及存储日志的策略
		规则:设备+级别+文件
		设备:同种应用程序,设计程序时已经指定 #facility设备
		级别:记录信息的类型  #level级别
			linux系统日志级别
			日志分为九个级别,严重级别从小到大为:	none<debug<info<notice<warning<error<critical<alert<emerg
				none:不记录日志
				debug:调试信息,系统进行调试时产生的日志,不属于错误日志,不需要过多关注。
				info:一般的通知信息,用来反馈系统的当前状态给当前用户。
				notice:提醒信息,需要检查一下程序了,不理会可能会出现错误。
				warning:警告信息,当出现警告时,你的程序可能已经出现了问题,但不影响程序正常运行,尽快进行处理,以免导致服务宕掉。
				error:错误信息,出现这一项时,已经挑明服务出现了问题,服务都无法确认是否能正常运行。
				critical:比较严重的错误信息,服务已经宕了,可能已经无法修复。
				alert:警报信息,需要立即采取行动,不仅是服务宕了,还会影响系统的正常启动。
				emerg:紧急信息,系统可能已经不能使用了,如果不能解决,就重新装机吧
		文件:储存信息的位置

logrotate
日志轮转配置 #日志轮转就像飞机里的黑匣子,记录的信息在重复也只记录最后一段时间发生的事
			[root@ybt ~]# rpm -qc rsyslog #查看配置文件
			/etc/logrotate.d/syslog 
			/etc/rsyslog.conf	#主配置文件
			/etc/sysconfig/rsyslog #相关文件,定义级别,了解
	
		配置文件类型	#默认全局配置=环境变量
			主文件/etc/logrotate.confg #决定每个日志文件如何轮转
				weekly #轮转周期,现在是周轮转,可写月/日
				rotate4 #保留4份 #保存4周
				create #轮转后创建新文件
				dateext #使用时间作为后缀 #带日期的是老文件,不带的是当天的
				compress #压缩 #暂用CPU资源,注释掉
				/var/log/wtmp {	#对某日志文件设置轮转的方法 #wtmp日志文件设置
				    monthly	#一个月轮转一次
				    create 0664 root utmp #轮转后创建新文件,并设置权限
				        minsize 1M	#最小到达1M才轮转,monthly and minsize(同时达到两个条件)
				    rotate 1	#保留一份
				}
				/var/log/btmp {	#btmp日志文件设置
				    missingok	#丢失不提示
				    monthly
				    create 0600 root utmp
				    rotate 1
				}

			子配置文件夹/etc/logrotate.d/* #自定义&便于管理

			

修改ssh程序设备类型

vim /etc/ssh/sshd_config  
	SyslogFacility LOCAL5		LOCAL1-7自定义日志类型
修改rsyslog程序规则
	/etc/rsyslog.conf
	local5.*                              /root/ybtlog
	#local5.设备名   *级别				/root/输出日志目录位置
重启rsyslog & sshd 生效 #systemctl restart rsyslog sshd
观察日志输出位置

yum轮转实例

/etc/logrotate.d #在子配置文件修改 在主配置文件修改也可以 #修改前删除源配置文件
/var/log/yum.log {
    missingok
    #notifempty 	#空文件不轮转
    #maxsize 30k
    #yearly	#一年轮转一次
    daily	
    rotate 3
    create 0600 root root
}

date 03010820  #修改时间使文件轮转起来  #月日时分

/usr/sbin/logrotate   /etc/logrotate.conf  #手动轮转命令
[root@localhost ~]# ll /var/log/yum*  #查看已经生成了新文件


文件服务

FTP服务
#FTP ( File Transfer Protocol,文件传输协议)是 TCP/IP协议组中的协议之一 
#默认使用 20、21号端口,其中端口 20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关 FTP 命令与参数。
#制作FTP文件服务器
1.安装
	yum -y install vsftpd #软件包vsftpd
2.准备分发的文件
	 touch /var/ftp/ybt.txt
	#FTP服务器的主目录:“/var/ftp/”,是FTP程序分享内容的本机目录。
3.启动服务
	systemctl start vsftpd 
	systemctl enable vsftpd #设置开机启动
4.在http或者nginx启动的情况下在浏览器访问 #只要能ping通,就可以访问
	ftp://本机地址/ #可以下载/var/ftp/ 目录下的文件
	
5. 启动上传功能
	配置文件:vim /etc/vsftpd/vsftpd.conf  #配置前先备份
		anonymous_enable=YES #启用禁用匿名账号,默认开启 ;关闭后使用密码登录更安全,用户登录直接默认用户家目录为首页目录
		anon_upload_enable=YES #允许匿名用户上传文件
		anon_mkdir_write_enable=YES #允许匿名用户创建目录
		anon_other_write_enable=YES #允许匿名用户修改目录名称或删除目录
	本地用户模式开启
		anonymous_enable=NO #禁止匿名访问模式
		local_enable=YES #允许本地用户模式
		write_enable=YES #设置可写权限
		local_umask=022 #本地用户模式创建文件的 umask 值
		userlist_enable=YES #启用“禁止用户名单”,名单文件为 ftpusers和 user_list 
		userlist_deny=YES #开启用户作用名单文件功能
6.创建上传目录
	mkdir /var/ftp/ybt
	chmod 777 /var/ftp/ybt 
7.上传下载
	上传put  下载get
	
FTP服务安装
安装
	yum -y install ftp
匿名开放模式
	任何人都可以无需密码验证而直接登录到 FTP 服务器。
	#匿名模式的用户名为anonymous  密码直接回车  #不安全
本地用户模式
	是通过 Linux 系统本地的账户密码信息进行认证的模式,
	#/etc/vsftpd/下的ftpusers  user_list
		这两个文件定义哪个用户可以登录ftp;root已经被默认禁用了
	#安全
	
虚拟用户模式:
	是这三种模式中最安全的一种认证模式,它需要为 FTP 服务单独
	建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供 FTP 服务程序进行认证使用。
	#略
	
TFTP
#简单文件传输协议,占用端口69,传输过程不可靠,但是不需要客户端权限认证
	#TFTP 服务是使用 xinetd 服务程序来管理的
	#TFTP可以看作FTP的简化版本
安装
	yum install -y xinetd tftp tftp-server 
配置
	vim /etc/xinetd.d/tftp
	将disable参数修改为no #开启ftp
启动
	 systemctl restart/enable xinetd
验证
	echo kexiao > /var/lib/tftpboot/ybt.txt  #写入文件
	[root@localhost ~]# tftp 192.168.32.132	#客户机登录
	tftp> get ybt.txt #下载文件
	tftp> [root@localhost ~]# cat ybt.txt  查看内容
	kexiao	
tftp可用参数及作用
	? 帮助信息
	put 上传文件
	get 下载文件
	verbose 显示详细的处理信息
	status 显示当前的状态信息
	timeout 设置重传的超时时间
	quit 退出
NFS
#NFS网络文件系统,linux/Unix系统之间共享文件的一种协议
#为web server配置集群中的后端储存
#共享文件一对多
#配置服务之前关闭防火墙firewalld & selinux
1.安装NFS服务器
	yum -y install nfs-utils  
	[root@192 ~]# mkdir /webdata	#创建目录存放网站代码
	[root@192 ~]# echo "nfs test" > /webdata/index.html #放置测试页面 #放什么都行都是共享的文件
2.配置
	vim /etc/exports #NFS配置文件
		/webdata 192.168.32.0/24表示统一给网段可以读写(rw) 
		#/webdate 现在就是发布资源的目录	(rw) 是可读可写 
		#192.168.32.0/24表示统一给网段可以读写
			ro 只读
			rw 读写
			root_squash 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的匿名用户
			no_root_squash 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的 root 管理员
			all_squash 无论 NFS 客户端使用什么账户访问,均映射为 NFS 服务器的匿名用户
			sync 同时将数据写入到内存与硬盘中,保证不丢失数据
			async优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据


		
3.启动
	systemctl start和enable nfs #启动和开机自启
4.检查NFS输出是否正常
	[root@192 ~]# exportfs -v	#-v检查输出的目录
	/webdata      	192.168.32.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

用web服务器访问
1.安装NFS客户端和启动
	yum -y install nfs-utils
	systemctl start和enable nfs #启动和开机自启
2.查看共享目录
	[root@ybt ~]# showmount -e 192.168.32.136
	Export list for 192.168.32.136:
	/webdata 192.168.32.0/24
3.手动挂载
	[root@ybt ~]# mount -t nfs 192.168.32.136:/webdata /var/www/html/  
4查看
	[root@ybt ~]# cat /var/www/html/index.html 
	nfs test #共享文件可以查看到了,同步更新 #成功 
	df #查看挂载
	192.168.32.136:/webdata 49746432  4856576 44889856   10% /var/www/html
	也可以取消挂载 umount 挂载点

SSH
安装ssh服务 : yum -y install openssh

	查询端口 netstat -antp|grep sshd  #SSH端口默认22
ssh服务启动和开机自启 
	systemctl restart/enable sshd
ssh-keygen   生产密钥对 #连续回车
ssh-copy-id   192.168.5.5 #发送秘钥对到这个ip
ls -a  查看有没有隐藏文件 /root/.ssh      # .ssh下面有id_rsa公钥  id_rsa.pub私钥

vim /etc/ssh/sshd_config #sshd主配置文件
HostKey /etc/ssh/ssh_host_key SSH 协议版本为 1 时,	DES 私钥存放的位置
HostKey /etc/ssh/ssh_host_rsa_key SSH 协议版本为 2 时,	RSA 私钥存放的位置
HostKey /etc/ssh/ssh_host_dsa_key SSH 协议版本为 2 时,	DSA 钥存放的位置
PermitRootLogin yes 	设定是否允许 root 管理员直接登录 	#no可以降低被暴力破解的几率
StrictModes yes 	当远程用户的私钥改变时直接拒绝连接
MaxAuthTries 6 		最大密码尝试次数
MaxSessions 10 		最大终端数
PasswordAuthentication yes 		是否允许密码验证 #no可以不用输入密码
PermitEmptyPasswords no		 是否允许空密码登录(很不安全)
scp
scp [参数] 本地文件 远程帐户@远程 IP 地址:远程目录 (远程到本地相反)
	-v 显示详细的连接进度
	-P 指定远程主机的 sshd 端口号
	-r 用于传送文件夹
	-6 使用 IPv6 协议
示例
	#本地到远程
	scp -P22 perl-5.30.1.tar.gz root@192.168.32.136:~ 
	#远程到本地
	scp -P22 root@192.168.32.136:/root/two ./


网站服务

基本概念 #了解
	#UI的转变:B/S架构 #浏览器/服务器
	名词
		HTML #超级文本标记语言
		网页 #使用前端语言编写的文件 #如:html
		主页 #呈现给用户的第一个页面
		网站 #多个网页组成的服务器
		URL #统一资源定位符;访问网站的地址
	网站架构LAMP
		linux+Apache+mysql+PHP #系统+前端服务程序+数据管理+中间软件
静态站点
Apache服务
	#软件包名httpd
	#服务端口:80/tcp(http) 443/tcp(https)
	配置文件 /etc/httpd/conf/httpd.conf
	子配置文件 /etc/httpd/conf.d/*.conf
	网站数据目录 /var/www/html 
	访问日志 /var/log/httpd/access_log 	
	错误日志 /var/log/httpd/error_log
	网站普遍的首页面名称是 index.html

安装Apache
1.安装
	yum -y install httpd
2.启动
	systemctl start/enable httpd #启动/自启动
3.查看httpd版本
	[root@ybt ~]# httpd -v
	Server version: Apache/2.4.6 (CentOS)
	Server built:   Jan 25 2022 14:08:43
4.测试
	浏览器输入本机ip
5.网站源码目录 #httpd的根目录
	/var/www/html/ #放入index.html文件会呈现里边的内容 #没有域名默认找根目录文件

虚拟主机
虚拟主机VirtualHost #在一台物理服务器上运行多个网站
类型 #基于主机名

www.ybt站点设置
	1.准备网站源码(网页)目录
		[root@ybt ~]# mkdir /var/www/html/ybt
			mkdir: 无法创建目录"/var/www/html/ybt": 权限不够 #因为我们将NFS服务器目录挂载到了这个目录;卸载 umount /var/www/html
		mkdir  /var/www/html/ybt #创建
		echo ybt > /var/www/html/ybt/index.html #写入index.html文件内容 #第一次实验写成ybt.html没有成功,改为index.html后成功 #必须是index.html
	2.创建网站配置文件
		[root@ybt ~]# cat /etc/httpd/conf.d/ybt.conf #在http子配置目录,创建ybt配置文件名字自定义 #.conf后缀是固定的!
		<VirtualHost *:80> #某个虚拟主机 #标签开始
		ServerName www.ybt #网站域名
		DocumentRoot /var/www/html/ybt #根目录
		</VirtualHost> #标签结束
	3.检测配置文件语法&重启服务
		[root@ybt ~]# httpd -t
		AH00557: #报错解决方法
			vim httpd.conf #/etc/httpd/conf
			添加ServerName 192.168.32.132:80 #本机地址和80端口 ;把原来的注释掉
		AH00558: #报错提示我们默认网站没有配域名,不用管
		Syntax OK #语法OK
		重启服务 systemctl restart httpd
	4.客户端文字测试 #另外一台服务器
		vim /etc/hosts #先添加刚刚创建域名 ip  www.ybt  #模拟域名
		yum install -y elinks
		elinks http://wwww.ybt	#成功
创建第二个网站www.ke
	1.创建源码目录
		mkdir /ke	#目录名自定义,配置文件指定的正确就OK
		echo kexiao >  /ke/index.html #写入内容
	2.创建ke的网站配置文件
		[root@ybt ~]# cat /etc/httpd/conf.d/ke.conf
		<VirtualHost *:80>
		ServerName www.ke
		DocumentRoot /ke
		</VirtualHost> 
		
		<Directory "/ke">#因为/ke不在根httpd的根目录下所以要做授权
		Require all granted
		</Directory>
	3.检测和重启
		httpd -t
		systemctl restart httpd
	4.客户机添加域名
		cat /etc/hosts
		192.168.32.132 www.ke
	5.测试
		elinks www.ke #成功
		
	也可以windows添加域名测试
	C:\Windows\System32\drivers\etc #与linux一毛一样 #前提是win能与Linux通
	#主机会先去找本地的hosts的域名进行解析
	
动态站点
Discuz
#论坛系统Discuz  
1.安装LAMP
 	yum -y install php php-mysql mariadb mariadb-server gd php-gd  httpd #上翻安装验证是否安装 #安装后启动mariadb和httpd
2.下载Discuz
	wget http://downloadsenz/DiscuzX/2.5/Discuz_X2.5_SC_UTF8.zip  #当然你可以去官方找最新版
3.创建和解压
	mkdir /discuz #随意创建目录
	unzip Discuz_X2.5_SC_UTF8.zip #解压 yum -y install unzip
	cp -rf upload/* /discuz/ #复制/upload目录所有文件 -f覆盖已经存在的目标文件而不给出提示
	chown -R apache.apache /discuz/	#给/discuz/目录apache权限
4.apache配置虚拟主机和设置端口
	vim /etc/httpd/conf/httpd.conf 
		Listen 8080 添加监听端口参数
	[root@ybt ~]# cat /etc/httpd/conf.d/discuz.conf
	<VirtualHost *:8080>  #设置主机为全部端口为8080
	ServerName www.discuz
	DocumentRoot /discuz
	</VirtualHost>
	
	<Directory "/discuz">
	Require all granted
	</Directory>
5.进入mysql
	创建一个discuz库 
6.客户端测试
	cat /etc/hosts
	192.168.32.132 www.discuz discuz #客户机设置对方域名
	elinks http://www.discuz #端口80下用域名访问
	elinks 192.168.32.132:8080 #端口设置为8080后用端口访问
	也可以通过修改win10的hosts进行设置
7.进入Discuz导航向导
	1.开始安装,直接下一步 #如果有红×,重新执行chown -R apache.apache /discuz/
	2.设置运行环境
		默认全新安装,下一步
	3.安装数据库
		库名为discuz 
		mysql密码有就填写
		管理员账号默认密码随便填
		下一步
8.访问
	社区动力DISCUZ搭建成功
用户网站
vim /etc/httpd/conf.d/userdir.conf
	# UserDir disabled #注释本行 让http服务开启个人用户主页功能
	UserDir public_html #开启本行 用户家目录保存网站数据的目录名
测试
	mkdir public_html
	echo 'user web test' > public_html/index.html
	chmod -Rf 755 /home/ybt/	#给予权限
	http://192.168.32.132/~ybt/  #浏览器测试 #地址/~用户名
	
使访问用户网页内容需要登录密码操作
	[root@ybt ybt]# htpasswd -c /etc/httpd/passwd ybt
	New password: 
	Re-type new password: 
	Adding password for user ybt
 
 修改个人用户主页功能的配置文件 #具体修改内容为<Directory>到结尾的内容
 	vim /etc/httpd/conf.d/userdir.conf
 	31 <Directory "/home/*/public_html">
 	32 AllowOverride all 
 	33 #刚刚生成出来的密码验证文件保存路径
 	34 authuserfile "/etc/httpd/passwd"   
 	35 #当用户尝试访问个人用户网站时的提示信息
 	36 authname "My privately website"   #提示我的私人网站
 	37 authtype basic 
 	38 #用户进行账户密码登录时需要验证的用户名称
 	39 require user ybt
 	40 </Directory>
重启
	systemctl restart httpd
验证
	账号ybt 密码是刚刚htpasswd -c /etc/httpd/passwd ybt设定的密码
控制访问
Allow 指令允许
Deny 指令实现禁止访问
Deny 指令顺序作用
“Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求

添加访问控制:
	[root@ybt conf.d]# cat ybt.conf 
	<VirtualHost *:403>
	ServerName www.ybt
	DocumentRoot /var/www/html/ybt
	</VirtualHost>
	
	<Directory "/var/www/html/ybt">  #添加控制访问
	Order allow,deny #规则顺序先允许后拒绝
	Allow from 192.168.32. #只允许这个网段访问匹配不到则拒绝
	Order allow,deny 
	Allow from env=ie	
	</Directory>
重启
	systemctl restart httpd
验证
	

本文标签: 入门 基础 Linux