赞
踩
内核:只提供操作系统的基本功能和特性,如内存管理,进程调度,文件管理等等。
Linux内核: https://www.kernel.org/
发行版:基于linus维护的linux内核,是由一些厂商集成了漂亮易用的桌面和常用的软件而发布的商品。
应该称为Redhat系列,包括RHEL(Redhat Enterprise Linux,也就是所谓的Redhat Advance Server,收费版本)、Fedora Core(由原来的Redhat桌面版本发展而来,免费版本)、CentOS(RHEL的社区克隆版本,免费)。Redhat应该说是在国内使用人群最多 的Linux版本,甚至有人将Redhat等同于Linux,而有些老鸟更是只用这一个版本的Linux。所以这个版本的特点就是使用人群数量大,资料非 常多,言下之意就是如果你有什么不明白的地方,很容易找到人来问,而且网上的一般Linux教程都是以Redhat为例来讲解的。
几大基础发行版之一,Ubuntu就是基于Debian的。它的基本有如下特点:
Free,最符合开源精神的发行版。默认不包含任何专有驱动
不求新,但求稳。软件包通常选择比较稳定的版本而不是最新的版本
系统的开发维护完全是由社区驱动的
APT软件包管理
图形化安装方式对新手友好
国内乃至全球热门的Linux发行版。也是各种推荐入门Linux爱好者安装的一个Linux发行版。它的特点主要有以下:
安装简单
Unity 3D图形界面,比较华丽(因人而异)
对一些专有驱动支持比较好,例如显卡驱动
社区比较活跃,几乎遇到的问题都可以找到答案
现在是大名鼎鼎的RedHat Linux的社区版(可以说是剔除了专有代码的RedHat),其特点就是相当相当的稳定,版本更新紧跟RedHat。非常适合作为服务器操作系统使用。
每一个文件和目录从根目录开始。
只有root用户具有该目录下的写权限。请注意,/root是root用户的主目录,这与/不一样
包含二进制可执行文件。
在单用户模式下,你需要使用的常见Linux命令都位于此目录下。系统的所有用户使用的命令都设在这里。
例如:ps、ls、ping、grep、cp
就像/bin,/sbin同样也包含二进制可执行文件。
但是,在这个目录下的linux命令通常由系统管理员使用,对系统进行维护。例如:iptables、reboot、fdisk、ifconfig、swapon命令
包含所有程序所需的配置文件。
也包含了用于启动/停止单个程序的启动和关闭shell脚本。例如:/etc/resolv.conf、/etc/logrotate.conf
hosts:设备名称(或域名)到ip地址的解析,相当于本地存在的dns功能。
包含设备文件。
这些包括终端设备、USB或连接到系统的任何设备。例如:/dev/tty#### /dev/usbmon0
包含系统进程的相关信息。
这是一个虚拟的文件系统,包含有关正在运行的进程的信息。例如:/proc/{pid}目录中包含的与特定pid相关的信息。
这是一个虚拟的文件系统,系统资源以文本信息形式存在。例如:/proc/uptime
var代表变量文件。
这个目录下可以找到内容可能增长的文件。
这包括 - 系统日志文件(/var/log);包和数据库文件(/var/lib);电子邮件(/var/mail);打印队列(/var/spool);锁文件(/var/lock);多次重新启动需要的临时文件(/var/tmp);
包含系统和用户创建的临时文件。
当系统重新启动时,这个目录下的文件都将被删除。
包含二进制文件、库文件、文档和二级程序的源代码。
/usr/bin中包含用户程序的二进制文件。如果你在/bin中找不到用户二进制文件,到/usr/bin目录看看。例如:at、awk、cc、less、scp。
/usr/sbin中包含系统管理员的二进制文件。如果你在/sbin中找不到系统二进制文件,到/usr/sbin目录看看。例如:atd、cron、sshd、useradd、userdel。
/usr/lib中包含了/usr/bin和/usr/sbin用到的库。
/usr/local中包含了从源安装的用户程序。例如,当你从源安装Apache,它会在/usr/local/apache2中。
所有用户用home目录来存储他们的个人档案。
例如:/home/john、/home/nikita
包含引导加载程序相关的文件。
内核的initrd、vmlinux、grub文件位于/boot下。
例如:initrd.img-2.6.32-24-generic、vmlinuz-2.6.32-24-generic
包含支持位于/bin和/sbin下的二进制文件的库文件.
库文件名为 ld或lib.so.*
例如:ld-2.11.1.so,libncurses.so.5.7
opt代表可选的。
包含从个别厂商的附加应用程序。
附加应用程序应该安装在/opt/或者/opt/的子目录下。
临时安装目录,系统管理员可以挂载文件系统。
用于挂载可移动设备的临时目录。
举例来说,挂载CD-ROM的/media/cdrom,挂载软盘驱动器的/media/floppy;
srv代表服务。
包含服务器特定服务相关的数据。
例如,/srv/cvs包含cvs相关的数据。
Linux安装流程
下一步->Accept 下一步->去掉 下一步->下一步->序列号
若缺少虚拟网卡VMware1和VMware8缺失,自救方法如下:
方法1:版本出问题,使用更高级的VMware17
方法2:安装插件cc.exe(一般无用)
方法3:软件内部的虚拟网络编辑器,点击还原默认设置®或添加网络(E)(一定概率成功)
方法4:部分电脑出现有道云和VMware冲突,卸载有道云
Linux部署环境流程
配置镜像CentOS-7.x
典型(小白)自定义(高手)->稍后安装操作系统->Linux CentOS 7 64位
->重命名CentOS7_base 默认位置更改->设置最大磁盘20G(初始3G)->finished
重点配置->编辑虚拟机设置
配置内存大小:32G->8G、16G->4G、8G->2G
配置处理器数量:默认单核,多核操作非高性能电脑不使用
配置镜像CD/DVD:点击使用ISO映像文件,找镜像的位置
配置网络适配器:默认NAT模式
后四项删除仅剩显示器,节约硬盘提高性能
Linux启动部署流程
选择语言:English(排除部分软件不支持中文的问题)
选择时区:选择中国地图部分,默认且仅有Shanghai
System:配置网络信息(重点:不配置则无法连网)
开启网卡按钮:点击OFF->ON,截图网络数据
注意点:不能把ON点回去,否则该虚拟机无法再次连网
配置密码root password:admin、默认账号为root
优点:VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,虚拟系统可以和外部系统直接通讯,外网和内网互通
缺点:容易导致IP冲突,网段限制
桥接模式是跟物理机在同一个网段,并且和物理机用的同一个路由器。主机网卡通过虚拟网桥连接到虚拟机交换机,交换机内部再映射到内部的网络,虚拟机直接占用主机的网段
优点:避免了IP因为网络地址不够造成的冲突
缺点:只能内网到外网,外网到内网需要配置
原理:允许一个整体机构以一个公用IP地址出现在Internet上,即把内部私有网络地址翻译成合法网络IP地址的技术。它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。
因为IP数据段由于字节数目一定,所以资源是有限的,如果为每一个设备分配一个IP地址,那么极其消耗IP资源,所以NAT起到的作用是,对外只暴露一个IP地址,当有内部连接要通讯的时候,通过NAT将内网IP转换成对外的IP,充当了网关的作用。
NAT模式有个单独的路由器,且不同于物理机的网段,
NAT模式显示通过自己的路由器,再找到物理机的路由器,来和物理机进行通信的。
这里可以提示一下,一般路由器的默认地址是第一位(1)或者最后一位(254)
但是这里NAT模式的网段为什么要从2开始呢?
假定以下条件
NAT的路由器把物理机的路由器192.168.1.1标记成192.168.100.1
这样NAT的路由器的192.168.100.2去找192.168.100.1的时候,实际去找的是192.168.1.1。可理解为物理机映射到物理机的路由器
物理机IP 物理机路由器 NAT路由器 虚拟机IP
192.168.1.3 --> 192.168.1.1 --> 192.168.100.2 --> 192.168.100.10
NAT配置过程
NAT是“Network Address Translation”的缩写,中文意思是“网络地址转换”,它允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。
为什么要这样干呢?因为IP数据段由于字节数目一定,所以资源是有限的,如果为每一个设备分配一个IP地址,那么极其消耗IP资源,所以NAT起到的作用是,对外只暴露一个IP地址,当有内部连接要通讯的时候,通过NAT将内网IP转换成对外的IP,充当了网关的作用。
NAT在外部公网(internet)上正常使用可以使多台计算机共享Internet连接。
通过这种方法,申请一个合法IP地址,就把整个局域网中的计算机通过NAT接入到了Internet中。
这时NAT屏蔽了内部网络,所有内部网计算机对于公共网络来说是不可见的,
而内部网计算机用户通常不会意识到NAT的存在。这里提到的内部地址,
是指在内部网络中分配给节点的私有IP地址,这个地址只能在内部网络中使用,
不能被路由(一种网络技术,可以实现不同路径转发)。
默认网关:指的是数据流从本地网络路由至远端设备的目的地。
IP地址中专门保留了三个区域作为私有地址,其地址范围如下:
10.0.0.0/8:10.0.0.0~10.255.255.255
172.16.0.0/12:172.16.0.0~172.31.255.255
192.168.0.0/16:192.168.0.0~192.168.255.255
NAT将这些无法在互联网上使用的保留IP地址翻译成可以在互联网上使用的合法IP地址。
而全局地址是指合法的IP地址,它是由NIC(网络信息中心)或者ISP(网络服务提供商,比如常说的中国移动、中国电信)分配的地址,
对外代表一个或多个内部局部地址,是全球统一的可寻址的地址。
动态地址NAT:只是转换IP地址,它为每一个内部的IP地址分配一个临时的外部IP地址,主要应用于拨号,对于频繁的远程联接也可以采用动态NAT。当远程用户联接上之后,动态地址NAT就会分配给他一个IP地址,用户断开时,这个IP地址就会被释放而留待以后使用。
网络地址端口转换NAT:NAPT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。
NAT模式总结
家用路由器一般都是NAT模式,内网用户默认都是192.168.1.x网段,而路由器充当默认网关的角色,所有内网发出的包都将经过路由器,路由器在公网有唯一的IP,所有的包经过路由器修改其源IP都改为了公网IP了,并且会随机映射一个对外端口。当应答回到路由器时,路由器会根据此前的映射关系,将目标IP和PORT改为原先发送请求的内网用户的IP和PORT,这样对于内网用户来说是感知不到路由器的存在的,大家共用路由器的对外IP访问外网。当然,因为大家都在内网同一个网段(路由器基于DHCP分配),所以内网用户互相通讯也没有问题。
桥接模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器。 在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。同时,由 于这个虚拟系统是局域网中的一个独立的主机系统,那么就可以手工配置它的TCP/IP配置信息,以实现通过局域网的网关或路由器访问互联网。
使用桥接模式的虚拟系统和宿主机器的关系,就像连接在同一个Hub上的两台电脑。想让它们相互通讯,你就需要为虚拟系统配置IP地址和子网掩码,否则就无法通信。
独立系统,所有的虚拟系统可以相互通信,但虚拟系统和真实网络是隔离开的。虚拟系统和真实网络可以相互通信,相当于两台机器通过双绞线互连;虚拟网络是一个全封闭的网络,唯一能够访问的就是主机,不同于NAT的地方就是主机模式没有NAT服务,故虚拟网络不能连接到Internet。
man [命令或配置文件]
help 命令
w root
命令输出:
who
命令输出:
last
命令输出
lastlog
命令输出
history
# 务必在关机或者重启之前调用该指令 sync 将内存数据同步到磁盘 shutdown -参数 时间刻度 立刻关机【谨慎】 -h 关机 -r 重启 时间刻度: now 马上 n:n分钟后执行,n是一个整数 shutdown -h now 马上关机 # 等价指令 reboot 立马重启 shutdown -r now halt 立刻关机 shutdown -h now
# 用户登录
su -用户名
# 高权限切换低权限用户不需要密码
# 当需要返回到原来用户时,使用exit/logout
用户注销
logout
# 运行级别3有效,图形运行级别无效
logout
useradd -参数 参数值 用户名
无参数:创建用户成功后,会自动创建和用户的同名的目录
-d 创建用户,并给新创建的用户指定家目录
-g 创建用户并指定组名
password 用户名
# 当用户权限不够时,常通过su -用户名切换到高权限用户
userdel -参数 用户名
无参数:删除用户,但保留家目录
-r:删除用户同时删除用户的家目录【谨慎】
-f:强制删除用户,即使用户已登录
id 用户名
# 用户不存在时,返回无该用户
su -用户名
# 高权限切换低权限用户不需要密码
# 当需要返回到原来用户时,使用exit/logout
# 方式1
whoami
# 方式2,注意要大写
who am i
groupadd 组名
groupdel 组名
usermode -g 用户组 用户名
用户配置文件:记录用户的各种信息
每行含义:用户名:密码:用户的UID:组标号:注释性描述:家目录:登录Shell
口令配置文件
每行含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
组group配置文件:记录Linux包含的组的信息
man 命令名:查看帮助命令
f 下一页
b 上一页
q退出
man ls
#查看ls的帮助
命令 --help
#获取命令选项的帮助
实例:
ls --help
命令 --help :简洁版帮助
运行级别说明
CentOS7运行级别说明
centos7后对/etc/inittab文件进行了简化
# 多用户有网络服务-级别3
# multi-user.target: analogous to runlevel 3
# 图形界面-级别5
# graphical.target: analogous to runlevel 5
#
# 显示当前默认级别
systemctl get-default
#
# 设置默认级别
systemctl set-default 级别的字符
# 设置级别 为 多用户有网络服务
systemctl set-default multi-user.target
# 切换运行级别
init [0123456]
pwd
ls [选项] [目录或文件]
-a 显示当前目录所有的文件和目录,包括隐藏的【Linux隐藏文件以.开头】
-l 以列表形式显示信息
ls -l可以简写为ll,同时还可衔接上其他的参数,例如ll -a,等价 ls -al
cd [选项] 绝对或相对路径
~ 切换到家目录 cd ~
: 切换到家目录 cd :
.. 返回到当前目录的上一级目录
mkdir [选项] 要创建的目录
-p 创建多级目录
# 删除的是空目录,如果目录中有内容时无法删除
rmdir [选项] 要删除的空目录
# 强制删除非空目录
# r:递归 f:对象为文件或目录
rm -rf 要删除的没记录
# 建议带上后缀,虽然Linux不区分后缀,但方便程序员区分文件类型
touch 文件名称
cp [选项] 源文件 目的地
-r 递归复制整个文件夹
# 强行覆盖并不提示
\cp,将cp替换成\cp即可不提示信息
rm [选项] 要删除的文件或目录
-r 递归删除整个文件夹
-f 强制删除不提示
mv 源移动的文件与目录 目的地
# 如果在目的地上存在同名的,那么就是重命名
# 不存在,则为移动
# 目录查看不了
# 只能查看,不能修改
# 通常和管道命令 | more分流显示
# 或和 | grep 字段进行文件过滤
cat [选项] 要查看的文件
-n 显示行号
= 输出当前行的行号
q 退出
回车 下一行
空格 下一页
缺点:只能向前浏览,无法向后,而且是一次加载完后再显示
more 要查看的文件
常用操作
回车 下一行
空格 下一页
q 退出
= 输出当前行的行号
:f 输出文件名和当前行
优点:根据需要加载,可向前向后
less 要查看的文件
常用操作
-N 显示行数
空格/pagedown 下一页
pageup 上一页
g 移动到文件开头
G 移动到文件结尾
10g 移动到第10行
/关键字 查找指定的关键字,n:向下查找下一个该关键字,N向上查找上一个关键字
q 退出
echo [选项] [输出内容]
常用的输出内容
$PATH 环境变量
$HOSTNAME 本地用户名
显示文件的开头部分
默认显示文件前10行内容
head [选项] [参数] 要显示的文件
-n:后边接一个整数,表示显示开头的前几行
head -n 10 文件名
显示文件的结尾部分
默认显示文件后10行内容
tail [选项] [参数] 要显示的文件
-n:后边接一个整数,表示显示结尾的前几行
-f:实时显示文件最新追加的内容,即是文档的所有更新
通常搭配其他指令一起使用,以下提供几个使用参考
# 将列表内容覆盖写入a.txt中
ls -l > a.txt
# 将列表内容追加写入a.txt中
ls -l >> a.txt
# 将文件a.txt覆盖到b.txt中
cat a.txt > b.txt
# 将字符串"aaa"追加到a.txt
echo "aaa" >> a.txt
用来为文件创建链接
软件也称为符号连接,类似于Windows中的快捷方式
链接类型分为硬链接和符号链接两种,默认的链接类型是硬链接。如果要创建符号链接必须使用"-s"选项
符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
# 给源文件床创建一个软链接
ln -s [源文件或目录] [软连接名]
history [选项]
-n 只列出最近的n条记录
文本编辑工具, VI是visual interface的缩写,即可视化接口。vim 即 vi IMproved,在 vi 的基础上做了很多改进
如果没有vim的那么请使用yum进行安装
yun install -y vim
vim一般有6种工作模式。
vim的各种工作模式可以通过不同的键进行切换,用户统一使用ESC键返回到普通模式。
打开文件
vi /path/to/file
关闭文件
在末行模式下
wq: 保存退出
q!: 退出不保存
逐字符移动:
h:左移动
l:右移动
j:向下移动
k:向上移动
行内跳转:
0:跳转到行首
$: 跳转到行尾
行间跳转;(末行模式)
num: 跳转到某一行(末行模式)
G: 跳转行最后一行(编辑模式)
gg: 跳转到第一行(编辑模式)
在编辑模式下:
ctrl+f 向下翻一页
ctrl+b 向上翻一页
dd: 删除光标所在行 (编辑模式)
3dd:从光标行开始删除3行(编辑模式)
: 1,4d 删除第一行到第四行(末行模式)
yy 复制光标所在行 (编辑模式)
2yy 从光标行开始复制2行(编辑模式)
p: 粘贴命令
文件的查找
/parttern 从前往后查找
?parttern 从后往前查找
操作
n: 下一个匹配的字符串
N: 上一个匹配的字符串
set number 设置行号
或者
set nu
取消行号
set nu!
# 显示当前日期时间 date [选项] [格式化日期] 默认 显示日期时间 -s 设置日期 # 常用的年月日时分秒(得带双引号),因为做了显示格式的拼接 date "+%Y-%m-%d %H:%M:%S" # 常用格式 %Y 年 %m 月 %d 天 %H 时 %M 分 %S 秒 %u 1-7星期数,1代表星期一
date -s 字符串时间
# 设置系统的时间和日期
date -s "2020-01-01 21:56:12"
cal [选项] [月份] [年份]
-m 星期一作为一周的第一天
# 显示当前日历
cal
# 显示2020年1月的日历
cal -m 1 2020
find 范围 选项 作用 1. 避免大范围搜索,会非常耗费系统资源 2. find是在系统当中搜索符合条件的文件名.如果需要匹配,使用通配符匹配,通配符是完全匹配 常用选项 -name 查询方式 按照指定的文件名查找文件 -user 用户名 查找属于指定用户名所有文件 -nouser 查找没有所有者的文件 -size 文件大小 按照指定的文件大小查找文件(通常是指定一个范围) +n 大于 -n 小于 单位 k M G atime 文件访问时间 +n n天 前 访问的文件, 流入+10 10前 n n天 当天 访问的文件 10 前10当天 -n n天 内 访问的文件 -10 10天内 ctime 改变文件属性时间 +n n天 前 修改属性的文件 n n天 当天 修改属性的文件 -n n天 内 修改属性的文件 mtime 修改文件时间 +n n天 前 修改的文件 n n天 当天 修改文件 -n n天 内 修改文件 # 按拥有者查找/opt下用户名为nobody的文件 find /opt -user nohody # 查找整个Linux系统下大于200M的文件 find / -size +200M
find / -name install.log
#避免大范围搜索,会非常耗费系统资源
#在根目录下查找, find是在系统当中搜索符合条件的文件名.如果需要匹配,使用通配符匹配,通配符是完全匹配
find / -name install*.log
#在root目录下, 按名字查询: 不区分大小写
find /root -iname install.log
find /var/log -mtime +10
#查找10天前修改的文件
-10 10天内修改文件
10 10天当天修改的文件
+10 10天前修改的文件
atime 文件访问时间
ctime 改变文件属性时间
mtime 修改文件时间
find / -size 25k
#查找文件大小是25KB的文件,注意k是小写的.
-25k 小于25KB的文件
25k 等于25KB的文件
+25k 大于25KB的文件
find / -size 25M
#查找文件大小是25MB的文件,注意M是大写的.
find /root -user root #按照所有者搜索
find /root -nouser #查找没有所有者的文件
优点:可以快速定位文件的路径
原理:先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库。无需遍历整个文件系统。为了保证查询结果的精确度,管理员必须要定期更新locate时刻
注意事项:locate指令是基于数据库进行查询的,所以第一次运行的时候需要创建locate数据库(必须要管理员来运行)
# 直接执行即可
updatedb
locate 搜索文件
# 搜索/opt下的redis开头的文件
locate /opt/redis
which 指令
# 查找ls指令所在的目录
which ls
grep [选项] 查找内容 源文件
常用选项
-n 显示匹配行以及行号
-i 忽略字母大小写
# 在hello.txt 文件中,查找"yes"所在行,并显示行号
# 方法一
cat -n /home/hello.txt | grep yes
# 方法二
grep -n yes /home/hello.txt
gzip:压缩文件,文件经过gzip压缩后会多".gz"的扩展名,即是*.gz文件。文本类文件压缩率在60%~70%
gzip 文件
gunizp:解压文件,解压*.gz形式的文件
gunzip 文件.gz
案例
压缩/home下的hello.txt文件
gzip /home/hello.txt
# 解压/home下的hello.txt.gz文件
gunzip /home/hello.txt.gz
文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件
zip
# 压缩的内容可以为文件或目录
# XXX.zip为压缩后的文件的命名
zip [选项] XXX.zip 将要压缩的内容
常用选项
-r 递归压缩:即是压缩目录, 如果不指定-r, 那么只会压缩文件夹,该文件夹的文件是不会压缩的
unzip
# 解压
unzip [选项] XXX.zip
-d 目录:指定解压后文件存放的目录
案例
# 将/home下的所有文件/目录压缩称myhome.zip
zip -r myhome.zip /home/
# 将myhome.zip解压到/opt/tmp目录下(存在/opt/tmp)
unzip -d /opt/tmp/ /home/myhome.zip
打包和压缩的概念:
-f: 打包压缩后的包名,切记,后面只能打包压缩后的包名。
# 打包目录,压缩后的文件格式.tar.gz tar [选项] XXX.tar.gz 打包的内容 多个打包内容使用空格间隔 常用选项 -z 打包同时压缩 -c 产生.tar打包文件 -x 解包.tar文件 -v 显示详情信息 -f 指定压缩后的文件名,这个参数是最后一个参数,后面只能接压缩文件名 -C 指定目录 # 案例 # 解压多个文件,将/home/pig/txt 和 /home/cat.txt 压缩称pc.tar.gz tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt # 将pc.tar.gz 解压到/opt/tmp2目录下(存在该目录) tar -zxvf pc.tar.gz -C /opt/tmp2
组介绍:Linux中的用户必须属于一个组,不能独立于组外
一般为文件的创建者,谁创建该文件,那么所有者就是谁,可以手动更改所有者
查看文件的所有者
ls -ahl
修改文件所有者
chown 用户名 文件名
-R 如果是目录,则使其下的所有子文件或目录递归生效
# 使用root创建一个apple.txt,然后修改所有者为tom(tom用户存在)
touch apple.txt
chown tom apple.txt
groupadd 组名
ls -ahl
chgrp 组名 文件/目录
usermod -g 新组名 用户名
usermod -d 目录名 用户名 # 改变该用户登录的初始目录。!!!用户需要有进入新目录的权限!否则不了!
计算资源:(一切皆文件)
权限:定义资源或服务的访问能力,称之为权限
定义某一个特定的人资源或者服务的访问能力, 用户
定义一类用户具有访问某个资源或服务的能力. 用户组(存放一些列用户的容器),同时用户组还拥有具有访问某个资源的权限
定义一个资源的权限:
文件权限:
r, 可读 可以执行类似cat命令的操作
w, 可写 可以编辑或者删除此文件
x 可执行
ls -l显示的内容
-rw-r–r–. 1 root root 231 4月 1 2020 .bashrc
解析:
-rw-r–r–:文件类型 所有者权限 所属组权限 其他组权限
1:如果是文件则代表硬链接数, 是目录则代表子目录数量
root :所有者
root :所属组
231:文件大小(单位是字节),如果是文件夹,就显示一个固定的值4096
4月 1 2020:最后修改的日期
.bashrc:文件名
0-9位说明(一共10位,0为基底)
注意:文件和目录的rwx含义是不一样
可用数字代表所拥有的权限r=4,w=2,x=1,数组可以组合,例如rw=4+2=6
参数
-R, --recursive:对目录以及目录下的文件递归执行更改权限操作。
权限
u
符号代表当前用户。g
符号代表和当前用户在同一个组的用户,以下简称组用户。o
符号代表其他用户。a
符号代表所有用户。+
符号代表添加目标用户相应的权限。-
符号代表删除目标用户相应的权限。=
符号代表添加目标用户相应的权限,删除未提到的权限r
符号代表读权限以及八进制数4
。w
符号代表写权限以及八进制数2
。x
符号代表执行权限以及八进制数1
。X
符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。# + 增加权限
chmod u+rwx,g+rx 文件/目录名
# - 减少权限
chmod u-rx 文件/目录名
# = 赋值权限
chmod u=rwx,g=rwx,o=rx 文件/目录名
chmod u=7,g=5 文件/目录名
chmoe u=5 文件/目录名
# 可以混用
chmoe u=7,g=rwx,o=5 文件/目录名
提升权限的原理: root把本来只能超级用户执行的命令赋予普通用户执行, sudo的操作对象是系统命令
sudo的操作对象是系统命令
visudo #实际修改的是/etc/sudoers文件 root ALL=(ALL) ALL #用户名 被管理主机的地址=(可使用的ip地址) 授权命令(绝对路径) %wheel ALL=(ALL) ALL #%组名 被管理注解的地址=(可使用的ip地址) 授权命令(绝对路径) # 添加一个用户 useradd whitebrocade # 设置用户的密码 passwd root # 为该用户设置指定的权限 whitebrocade ALL = (ALL) /usr/sbin/shutdown # 切换到 whitebrocade 用户后,使用sudo命令执行shutdown sudo shutdown -h now
crontab进行定时任务设置
任务调度:指系统在某个时间执行的特定命令或程序
任务调度分类:
crontab [选项]
-e 编辑crontab定时任务
-l 查询当前用户的crontab任务
-r 删除当前用户所有的crontab任务
service crond restart:重启任务调度
# crontab编写定时任务语法 顺序:分 时 日 月 周 命令 minute hour day month week command # 字段说明 minute: 表示分钟,0到59 hour:表示小时,0到 day:表示日期,从1到31 month:表示月份,1到12 week:表示星期几,从0到7,这里的0和7代表星期日。 command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。 # 5个日期时间字段可使特殊字符 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9” 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6” 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次
案例
每天凌晨2点备份数据库中地所有数据库(重名会覆盖)
0 2 * * * mysqldump -u root -p123456 -A -> /home/all.sql.bak
at [选项] [时间]
Ctrl + D 结束at命令的输入,输出两次
常用选项
-I atq的别名,at -I 等价 atq
-d atrm的别名,at -d 等价 atrm
-m 当指定的任务被完成后,给用户发邮件
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q <队列> 使用指定的队列
-f <文件> 从指定文件读入任务而不是标准输入读入
-t <时间参数> 以是按参数的形式提交要运行的任务
原理
硬盘说明
Linux硬盘分IDE硬盘和SCSI硬盘,目前基本都是SCSI硬盘
lsblk
lsblk -f
# 查询指定目录磁盘使用情况,默认为当前目录
df -h
-s 指定目录占用大小汇总
-h 带计量单位, 以KB以上的单位来显示
-a 所有文件
--max-deph=子目录深度
链接: Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。
ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化。
文件链接有两种形式,即硬链接和符号链接。
ln功能说明:是为某一个文件在另外一个位置建立一个同步的链接,当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中
创建硬链接后,己经存在的文件的索引节点号(inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为1,有1个文件链接时,连接数为2,也就说硬链接并没创建新文件,而是以链接数进行一个控制
在默认情况下,ln命令创建硬链接, 每个硬链接都指向同一个索引节点。ln命令会增加链接数,rm命令会减少链接数。删除一个硬链接不会影响其他硬链接,只有当最后一个硬链接被删除后, 也就是一个文件的链接数为0,文件内容才会被删除, 否则不会从文件系统中物理删除该文件。
对硬链接有如下限制:
符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件
与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的索引节点号;而硬链接并没有建立新文件。软件链接建立了文件!!!但是这个文件是指向索引节点的
ln -s
命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file
其中,表示“文件大小”的数字“14”恰好说明源文件名original_file
由14个字符构成。软链接:作为可执行文件的快捷方式。
硬链接:备份重要文件。
# 软链接(源文件必须写成绝对路径)
ln -s SOURCE TARGET
[root@localhost ~]# ln -s /home/file /tmp/soft_file
# 硬链接, 默认即是硬连接, 如果想要创建软连接的话, 那么携带参数-s
ln SOURCE TARGET
[root@localhost ~]# ln /home/file /tmp/hard_file
在Linux中,挂载(mount)和软链接(symbolic link)都是实现文件系统之间连接的机制,但两者有以下关键区别:
挂载是将一个文件系统附加到一个指定的目录上,这个目录成为挂载点。挂载之后,通过挂载点就可以访问被挂载的文件系统。
软链接是一个特殊的文件,其包含一个指向另一个文件或目录的引用路径。软链接可以让一个文件或目录在文件系统的不同位置出现。
挂载是在目录级别上的,它将两个文件系统连接起来,文件系统之间的数据独立存储。软链接是在文件/目录级别上的。
挂载不会复制文件,是真正访问另一个文件系统。软链接只是引用,不会占用实际空间。
挂载依赖文件系统的支持,需要内核支持。软链接可以在任意文件系统上创建。
挂载通常是临时的,重启后失效,需要在/etc/fstab配置自动挂载。软链接是持久的。
挂载需要root权限。软链接可以任何用户创建。
总之,挂载是跨文件系统的目录级别连接和访问,更强大也更复杂。软链接只是文件内引用,更加轻量级。
# 统计/opt文件夹下文件的个数
ls -l /opt | grep "^-" | wc -l
# 统计/opt文件夹下目录的个数
ls -l /opt | grep "^d" | wc -l
# 统计/opt文件夹下文件的个数,包括子文件夹里
ls -lR /opt | grep "^-" | wc -l
# 以树状显示目录结构tree目录
# 如果该命令不存在,那么就使用yum install -y tree进行安装
tree /home/
说明:登录后,通过界面的来设置自动获取ip(如果ip冲突了,自动切换ip)
特点:Linux启动会自动获取IP
缺点:IP地址可能变换
说明:直接修改配置文件来指定IP,并可以连接外网
步骤
编辑 vim /etc/sysconfig/network-scripts/ifcfg-ens33
有些它不叫ifcfg-ens33, 叫ifcfg-ens0等, 具体叫网卡名叫什么名字都不一定
在/etc/sysconfig/network-script在这个目录下面,存放的是网络接口(网卡)的脚本文件(控制文件),ifcfg-eth0是默认的第一个网络接口,如果机器中有多网络接口,那么名字就将依此类推ifcfg-eth1,ifcfg-eth2,ifcfg-eth3…(这里面的文件是相当重要的,涉及到网络能否正常工作),但是我们有多个网卡, 所以得到了后面称为ifcfg-en33
ifcfg-ens33文件说明
# 网络类型, 理解成网卡类型也行,通常使Ethernet, 表示接口类型为以太网 TYPE="Ethernet" # 不使用代理 PROXY_METHOD="none" # 非Only用于浏览器的接口 BROWSER_ONLY="no" # IP的配置方法[none|static|bootp|dhcp] # 对应的设置(引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议) # DHCP协议是自动分配IP, 当某个ip冲突的时候, 网卡会重新选区其它未使用的IP进行分配 # static协议是固定的IP, 由我们自己手动配置IP, 当出现IP冲突时, 需要我们手动解决 BOOTPROTO="dhcp" # 默认路由接口 DEFROUTE="yes" # IPv4配置失败不会致命 IPV4_FAILURE_FATAL="no" # 启用IPv6 IPV6INIT="yes" # 启用IPv6自动配置 IPV6_AUTOCONF="yes" # 默认IPv6路由接口 IPV6_DEFROUTE="yes" # IPv6配置失败不会致命 IPV6_FAILURE_FATAL="no" # 使用稳定的IPv6地址以保证隐私 IPV6_ADDR_GEN_MODE="stable-privacy" # 接口名 NAME="ens33" # 随机id UUID="c64e4ad0-d49d-4419-b84a-149493779ca6" # 接口名(设备,网卡), 现在理解成网卡名 DEVICE="ens33" # 系统启动的时候网卡是否自启动(yes/no),不用想, 肯定得自动启动 ONBOOT="yes"
新增以及要修改的(注意字母不要写错了!!!写错了不起作用!)
# 修改 BOOTPROTO="static" ONBOOT="yes" #新增 # ip地址随意写 # 0, 2, 255不可以写 # 0: 做网段IP # 2: 做网关地址 # 255: 做广播地址 IPADDR="xxx.xxx.xxx.xxx" #新增:配置静态IP地址,按需配置 # 子网掩码通常时255.255.255.0,可以去vm中配置里看 NETMASK="255.255.255.0" #新增:配置子网掩码 # 要和VM 中的虚拟网络编辑器中 NAT设置的网关IP配置要一样,否者无法联网 # 网关配置IP通常和子网IP前三段一致,最后一段不同,网关最后一个通常取2 GATEWAY="xxx.xxx.xxx.xxx" #新增:配置网关 # DNS解析, 通常使用8.8.8.8或者是8.8.8.4 DNS1="8.8.8.8" #新增:配置DNS # 参考配置 IPADDR="192.168.132.101" NETMASK="255.255.255.0" GATEWAY="192.168.132.2" # DNS解析 DNS1="8.8.8.8" DNS2="8.8.8.4"
修改/etc/resolv.conf
这个文件时
vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.8.4
设置完后要重新启动服务
service network restart
# 或者
systemctl restart network
修改主机名和host映射(云服务器的话通常会设置)
为了方便记忆给Linux系统设置主机名
# 查看主机名
hostname
# 注意!!修改后要重新启动才生效!!!!
# 修改/etc/hostname文件,指定新的主机名
vim /etc/hostname
设置hosts映射(可不设置)
作用:可以在本机通过主机名找到该Linux系统
windows 映射文件为
C:\Windows\System32\drivers\etc\hosts
配置格式
ip地址 自定义主机名
例如
192.168.200.130 CentOS_Study
Linux在/etc/hosts中
配置格式同window一样
# 1 虚拟机设置 --> 网络适配器 -> MAC地址
# 2 修改 /etc/sysconfig/network-scripts/ifcfg-ens33 中 HWADADDR 的值为mac地址
HWADADDR="mac地址"
# 1 关闭NetworkMananger服务
# systemctl stop NetworkManager
# 2 禁止NetworkMananger服务开机自启动
systemctl disable NetworkManager
# 3 重启network服务
systemctl restart network
以用户在浏览器输入www.baidu.com为例进行分析
firewall-cmd [选项 ... ] --help 帮助命令 -- state 防火墙状态 --permanent 永久固化【通常搭配打开和关闭端口使用】 --add-port=端口/协议 打开端口号【临时打开,永久需要和--permanent一起使用,临时打开不需要reload,reload会导致临时打开端口失效】 --remover-port=端口/协议 关闭端口号【临时关闭,永久需要和--permanent一起使用】 --reload 重新加载【永久关闭防火墙才需要重新加载】 --list-services 查看所有开放的服务 --list-port 查看所有开放的端口 --query-port=端口/协议 查看指定的端口是否打开 --zone-public 公共区域, 如果不指定那么就默认操作default zone, default zone通常映射到public zone公共区域。所以没有指定zone时,配置的规则会默认应用到public公共区域。 也就说如果不指定zone参数的效果例如 firewall-cmd --add-port=80/tcp , 实际上也是等价于 firewall-cmd --zone=public --add-port=80/tcp, 也就是说,默认都会影响公共区域public zone的规则。如果需要配置内部或可信区域,则必须使用--zone=trusted等指定。 不指定时容易错误配置公共区域,导致服务器开放了不安全的端口。 # 常用命令 # 永久开放redis的6379端口 firewall-cmd --zone-public --permanent --add-port=6379/tcp # 永久开放mysql的8080端口 firewall-cmd --zone-public --permanent --add-port=8080/tcp
# 列出目前所有的正在内存当中的程序 ps -aux | grep xxx【展示风格】 # 列出所有进程 ps -ef | greps xxx 【全格式,B22SD风格】 -a 所有进程 -u:以用户为主的格式来显示程序状况。 -e 所有程序 -f:显示UID,PPIP,C与STIME栏位 # 例如 [root@Cenos-study ~]# ps -aux | grep python root 842 0.0 1.6 359016 29816 ? Ssl 18:28 0:00 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid root 1229 0.0 0.9 574288 17512 ? Ssl 18:28 0:01 /usr/bin/python2 -Es /usr/sbin/tuned -l -P root 104364 0.0 0.0 112828 976 pts/2 S+ 21:39 0:00 grep --color=auto python [root@Cenos-study ~]# ps -ef | grep python root 842 1 0 18:28 ? 00:00:00 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid root 1229 1 0 18:28 ? 00:00:01 /usr/bin/python2 -Es /usr/sbin/tuned -l -P root 105669 88143 0 21:40 pts/2 00:00:00 grep --color=auto python
指令执行结果字段说明
# 通过进程号杀死进程
kill [选项] 进程号
# 使用进程的名称来杀死一组进程
# 在系统因负载过大而变慢的很有用
killall 进程名称
常用选项
-9 强制进程立刻停止
案例
# 终止远程登录服务sshd
kill sshd对应的进程号
pstree [选项]
-p 显示进程PID
-u 显示进程所属用户
free
内存占用情况:
total:内存总数;
used:已经使用的内存数;
free:空闲的内存数;
buffers Buffer:缓存内存数;
cached Page:缓存内存数。
service 服务名 [start|stop|restart|reload|status]
start 启动
stop 关闭
restart 重新启动
reload 重新加载
status 显示服务状态
开机 --> BIOS --> /boot --> systemd进程1 --> 运行级别 --> 运行级别对应的服务
可以通过chkconfig命令给服务的各个运行级别设置自启动/关闭
chkconfig(选项)
--list 列出所有的系统服务
chkconfig --level 等级 服务名 on/off 服务在指定的级别开启/关闭自启动
systemctl [选项] 服务名
常用选项
start 启动服务
stop 关闭服务
restart 重新启动服务
status 查看服务的状态
list-unit-files 显示开机自启动的服务,可以通过grep过滤
enable 设置服务开启自启动
disable 设置服务关闭自启动
is-enabled 查看该服务是否开机自启动
reload 重新加载
# 查看防火墙
systemctl status firewalld
# 关闭防火墙(临时关闭,下次开机后防火墙又会自启动)
systemctl stop firewalld
# 开启防火墙
systemctl start firewalld
# 永久关闭防火墙(关闭自启动)
systemctl disable firewalld
top和ps类似,都是显示正在执行的进程,但是top可以在执行一段时间可以更新正在运行的进程
top [选项]
常用选项
-d 秒数 #指定top命令每个几秒更新,默认3秒
-i 使top不显示任何显示或僵死进程
-p 通过指定监控进程ID来监控单独一个进程的状态
交互操作
P 以CPU使用率排序,默认为该项
M 以内存的使用率排序
N 以PID排序
k 终止一个进程
q 退出top
任务进程 第一行: 10:01:23 — 当前系统时间 126 days, 14:29 — 系统已经运行了126天14小时29分钟(在这期间没有重启过) 2 users — 当前有2个用户登录系统 load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。 第二行: Tasks — 任务(进程),系统现在共有183个进程,其中处于运行中的有1个,182个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。 第三行:cpu状态 6.7% us — 用户空间占用CPU的百分比。 0.4% sy — 内核空间占用CPU的百分比。 0.0% ni — 改变过优先级的进程占用CPU的百分比 92.9% id — 空闲CPU百分比 0.0% wa — IO等待占用CPU的百分比 0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比 0.0% si — 软中断(Software Interrupts)占用CPU的百分比 第四行:内存状态 8306544k total — 物理内存总量(8GB) 7775876k used — 使用中的内存总量(7.7GB) 530668k free — 空闲内存总量(530M) 79236k buffers — 缓存的内存量 (79M) 第五行:swap交换分区 2031608k total — 交换区总量(2GB) 2556k used — 使用的交换区总量(2.5M) 2029052k free — 空闲交换区总量(2GB) 4231276k cached — 缓冲的交换区总量(4GB) 第五行以下: PID — 进程id USER — 进程所有者 PR — 进程优先级 NI — nice值。负值表示高优先级,正值表示低优先级 VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA SHR — 共享内存大小,单位kb S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU — 上次更新到现在的CPU时间占用百分比 %MEM — 进程使用的物理内存百分比 TIME+ — 进程使用的CPU时间总计,单位1/100秒 COMMAND — 进程名称(命令名/命令行)
netstat [选项]
-a 所有端口
-n 使用ip地址而非域名服务器
-p 显示哪个进程在调用
-l 监听的端口
-t 显示TCP传输协议的连线情况
-u 显示UDP传输协议的连线情况
常用选项组合
-an 以ip地址的形式显示所有端口
-anp 以ip地址的形式显示所有端口,并显示调用的进程
-tl 显示TCP正在监听的端口
-ul 显示UDP正在监听的端口
ping ip地址/主机名
nohup 命令 # 例如后台启动redis服务 nohup redis-server # 后台运行Java程序 # 必须指定日志输出 # 那么在缺省情况下该服务的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件 nohup java -jar smmp-0.0.1-SNAPSHOT.jar > /opt/ssmp.log # 又例如 nohup command > myout.file 2>&1 & # 在后台运行command命令,并将其标准输出和标准错误都重定向到myout.file文件中 # 2>&1中的符号说明: # 2 - 表示标准错误文件描述符(file descriptor) # & - 表示重定向操作 # 1 - 表示标准输出文件描述符 # 所以2>&1的意思是将标准错误(2)重定向到标准输出(1)。 # 在Linux中,每个命令运行时会打开三个文件描述符: # 0 - 标准输入 # 1 - 标准输出 # 2 - 标准错误 # 我们可以使用> FILE, 2> FILE对任意一个或多个文件描述符进行重定向。 # 而2>&1是一种将标准错误重定向到标准输出的捷径写法,等同于2>FILE 1>FILE二次重定向。 # 所以,这个命令的全部功能是: # nohup 使命令在后台不挂起运行 # command represent要运行的命令 # >myout.file 将标准输出重定向到myout.file # 2>&1 将标准错误也重定向到标准输出 # & 将整个命令在后台运行
rpm:互联网下载包的打包以及安装工具,生成具有.RPM扩展名的文件
rpm包名基本格式:名称-版本号.适用操作系统
rpm [选项] -q 碰到任何问题,优先询问用户,其他选项一般都会携带q一起执行 -a 查询所有rpm软件包 -q 包名 #查询某个软件包是否安装 -i 软件包名 #查软件的信息【单独执行就是下载,如果搭配qi就是查询软件包的信息】 -l 软件包名 #查询软件包中的文件 -f 文件全路径名 查询文件包所属的软件包 -e 包名 #卸载rpm包【如果有其他软件包依赖与要卸载的软件包,卸载时会产生错误信息】,增加参数--nodeps,可以强制删除,但是不推荐,因为依赖于该依赖包的程序可能无法执行 -v 提示 -h 进度条 rpm 常用命令 安装一个包 # rpm -ivh rpm包全路径名称 rpm -ivh --nodeps <包名> :如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。 --force 即使覆盖属于其它包的文件也强迫安装 查询一个包是否被安装 # rpm -q <软件名> 得到被安装的包的信息 # rpm -qi < 软件名> 列出该包中有哪些文件 # rpm -ql < 软件名> 列出服务器上的一个文件或目录属于哪一个RPM包 #rpm -qf <文件或目录名> 列出所有被安装的rpm package # rpm -qa 卸载一个包 # rpm -e <软件名> #例如强制卸载firefox的软件包C rpm -e --nodeps firefox
yum:是一个shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并安装(要连网),可以自动处理依赖性关系,并一次安装所有依赖的软件包
yum 的配置文件在 /etc/yum.repos.d 目录下 ,其中有多个配置文件,每一个配置文件中都可以配置一个或多个repository, 但是最终会被合并为一个交给系统,所以多个文件只是为了方便管理。
实际使用时,选择其中一个配置即可
配置步骤
备份,将 CentOS-Base.repo 为CentOS-Base.repo.backup
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载新的 http:#mirrors.aliyun.com/repo/Centos-7.repo,并命名为CentOS-Base.repo
# CentOs7, 阿里云 和 中科大 二选一即可
# 阿里云
sudo wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 中科大
sudo wget -O CentOS-Base.repo https://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/centos?codeblock=3
# 更新元数据
sudo yum clean all
# 更新新的元数据缓存
sudo yum makecache
yum [选项]
list 查找所有软件列表
install 软件包名 #下载软件包
remove 软甲包名 # 卸载软件包
update 更新软件包
创建临时文件夹,mkdir /opt/jdk
通过Xftp上传jdk包到jdk下
进入到临时文件夹
cd /opt/jdk
解压dk包 【注意替换成自己的版本】
tar -zxvf jdk-8u261-linux-x64.tar.gz
创建文件夹,存放Java安装的
mkdir /user/local/java
将临时文件夹解压的jdk包移动到软件安装目录
mv jdk1.8.0_261 /usr/local/java/
配置环境变量的配置文件【环境变量的配置文件在/etc/profile】
vim /etc/profile
# java安装的目录,注意时usr,不是user
exprot JAVA_HOME=/usr/local/java/jdk1.8.0_261
# 拼接环境环境变量,并添加到path中
# 注意必须要通过冒号连接环境变量,否则可能很多命令因为找不到环境变量而报错
export PATH=$PATH:$JAVA_HOME/bin
更新环境变量
source /etc/profile
输入一下三个指令,如果均有输出就代表安装成功
java
javac
java -version
新建目录, 并将下载的好jdk-11.0.20_linux-x64_bin.tar.gz上传到该目录下
mkdir -p /opt/java
执行下述命令
mkdir -p /usr/local/software
ln -s /opt/java/jdk-11.0.20 /opt/java/software/jdk-11 # 软连接到opt/目录下的jdk11
在jdk1.8之后,就不在提供jre了,即使安装后也会报一个没有jre的错误,这时候可以使用cmd命令自己生成jre。
进入jdk目录根目录中执行
./bin/jlink --module-path jmods --add-modules java.desktop --output jre
编辑环境变量, 在头顶添加一下配置文件
vim /etc/profile
# jdk
export JAVA_HOME=/usr/local/software/jdk-11
# jre
export JRE_HOME=$JAVA_HOME
更新环境变量
source /etc/profile
查找本地旧的jdk依赖
rpm -qa | grep java
删除本地Java相关的依赖
yum -e --nodeps 对应的文件
查找相关的jdk
yum list | grep jdk
安装jdk
yum install 指定的版本
配置环境变量
Linux环境变量是以冒号:分隔开的
当jdk大于8后需要手动指定, JRE_HOME
export JAVA_HOME=/usr/lib/jvm/jdk版本
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME=$JAVA_HOME # 当jdk版本大于8的时候需要指定
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
刷新环境
source /etc/profile
测试是否安装成功
# 查看path路径中是否添加上了
echo $PATH
# 同理
echo $CLASSPATH
# 查看Java版本是否是我们安装的版本
java -version
java
javac
检查系统上是否安装了mysql( 若安装了就需要先卸载再使用我们自己的)
rpm -qa |grep -i tomcat #查看
rpm -e --nodeps tomcat.... #卸载
# 卸载的命令根据查找出来值进行修改
创建临时文件夹,用来存放Tomcat压缩包
makdir /opt/tomcat
通过Xftp上传到/opt/tomcat
进入到临时文件夹
cd /opt/tomcat
解压到当前目录
tar -zxvf apache-tomcat-8.5.59.tar.gz
创建安装目录
mkdir /usr/local/tomcat
移动tomcat解压文件到安装目录
mv apache-tomcat-8.5.59 /usr/local/tomcat/
配置Tomcat环境变量
# vim编辑环境变量配置文件
vim /etc/profile
# 新增内容,tomcat环境配置
export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.5.59
# 拼接环境变量
export PATH=$PATH:$CATALINA_HOME/bin
刷新环境变量配置
source /etc/profile
开放防火墙的8080端口,以至于远程可以访问tomcat
# 注意是永久开放,后续要重载防火墙设置才能生效
firewall-cmd --permanent --add-port=8080/tcp
重载一下防火墙的设置
firewall-cmd --reload
查看8080端口是否打开
firewall-cmd --query-port=8080/tcp
打印环境变量,查看是否配置成功
echo $PATH
启动tomcat,如果环境变量配置好了,那么任何一处都可以适用以下两个命令,没配置成功就只能在tomcat/bin目录执行这个两个命令
# 启动
startup.sh
# 关闭
shutdown.sh
# 访问http:\\127.0.0.1:8080
Redis官方下载对应的redis的tar.gz,注意是Linux的版本 这里以redis7.0.11的安装为例子
# 或者通过命令直接下载到Linux
# 避免上传
wget http://download.redis.io/redis-stable.tar.gz
在服务器的/opt下新建文件夹redis
# 进入/opt目录下
cd /opt
# 新建redis
mkdir redis
# 进入redis目录
cd redis
上传redis压缩包到/usr/redis中,并解压压缩包
tar -zxvf redis-7.0.5.tar.gz
查看是否有redis的依赖环境gcc
gcc --version
安装基本环境gcc
yum install -y gcc
进入安装目录/opt/redis/redis-7.0.11
# 进入目录
/opt/redis/opt/redis/redis-7.0.11
# 执行编译
# make用于编译程序,生成二进制可执行文件
make
安装
# make install用于安装二进制文件,复制到系统目录中并设置环境变量 # # make install PREFIX=[安装位置目录] # 现在没有指定安装路径,那么redis会默认安装到/usr/local/bin make install # 如果是自定义安装目录 # 如果指定的目录不存在会创建,需要注意的是如果指定了安装了路径,那么需要记住该位置,后续会用于修改配置 # 在自定义安装目录下会生产bin目录 # 这个命令的执行安装了什么内容? 安装的内容有 redis-benchmark :性能测试工具,可以在自己本机运行,看看自己本机性能如何 redis-check-rdb:修复有问题的dump.rdb文件 redis-sentinel:Redis集群使用 redis-check-aof:修复有问题的AOF文件 redis-cli:客户端,操作入口 redis-server:Redis服务器启动命令
如果是自定义安装,那么需要注意配置环境变量
# 编辑环境变量
vim /etc/profile
# 在文末最后添加
# 指向make install PREFIX=[安装位置目录]中输入的[安装位置目录]
# 这里以/usr/local/redis/redis-7.0.11为例子
export REDIS_HOME=/usr/local/redis/redis-7.0.11
# 指向bin路径
export PATH=$PATH:$REDIS_HOME/bin
# esc 退出编辑模式,输入:wq保存退出
# 刷新环境变量配置文件
source /etc/profile
修改配置redis.conf配置文件
修改redis.conf配置文件前先备份
重点修改的地方
修改前 | 修改后 | 含义 |
---|---|---|
daemonize yes,也就说默认是前台模式启动 | daemonize no | 后台启动 |
默认为bind 127.0.0.1 -::1,也说 只能本机连接redis | 如果有就修改成bind 0.0.0.0,没有新增 | 表示任意主机都连接redis |
protected-mode yes | protected-mode no | 关闭保护模式,如果不关闭的话,那么远程是无法连接的 |
默认没有requirepass,也就是没有密码 | 找到requirepass,添加 requirepass 123456 | 设置redis连接的密码 |
实际开发中移动要修改的
# 修改配置文件之前先备份 # 我解压的目录是/opt/redis/redis-7.0.11 # 对应的配置文件也在这里,所以直接在原地备份一个,备份文件起名为redis.conf.backup cp /opt/redis/redis-7.0.11/redis.conf /opt/redis/redis-7.0.11/redis.conf.backup #打开配置文件 vim /opt/redis/redis-7.0.11/redis.conf # 1. 关闭守护线程模式 # 注释daemonize yes # 添加daemonize no # 2. 设置远程IP访问 # 注释bind 127.0.0.1 -::1/ # 新增 bind 0.0.0.0 # 3. 关闭保护模式 # 注释 protected-mode yes # 添加 protected-mode no # 4. 添加密码 # requirepass 123456 # 保存退出 wq!
修改号配置文件后需要重新启动配置文件
先关闭redis-server,重启
# 查找redis相关的进程
ps -ef | grep redis
# 根据查找的结果 杀死对应的进程
# 我这里是116755 对应就是redis-server进程
# 杀死 116755进程
# kill -9 pid
kill -9 116755
# 再次查询进程中是否还有相关的redis进程
重新启动redis-server即可
开放防火墙6379端口
查看已近开放的防火墙端口
# 查看防火墙是否开始,并顺便开启防火墙
# 查看所有开放的端口
firewall-cmd --reload
开放6379端口
# 永久开放6479端口
# 注意!注意!密码一定要设置复杂一些
firewall-cmd --permanent --add-port=6379/tcp
重新加载防火墙
# 重新加载防火墙
firewall-cmd --reload
重新查询所有开放的端口, 看是否已经开放了6379端口
# 查看所有开放的端口
firewall-cmd --list-port
后台启动redis
# 使用指定配置文件启动redis-server
/usr/local/bin/redis-server /opt/redis/redis-7.0.11/redis.conf
本机连接redis
# 启动redis客户端 redis-cli
redis-cli
# 输入密码
auth 132456
SAle8ZJofZy6NRxcVzQb
远程连接redis
################# 网络配置 ################## # 绑定的ip, 只允许127.0.0.1的用户访问 # 配置远程访问的话必须要注释掉这个 # 如果是内网可以直接绑定 127.0.0.1, 或者忽略; 0.0.0.0是外网,任意用户都可以访问 bind 127.0.0.1 # 保护模式 # 远程访问redis的话,那么必须将保护模式修改成false protected-mode yes # 端口设置 port 6379 ################## 通用GENERAL ################## # 以守护进程的方式运行,默认是 no,我们需要自己开启为yes! # 通常都会修改,避免以前台的方式启动 daemonize yes # 如果以后台的方式运行,我们就需要指定一个 pid 文件! pidfile /var/run/redis_6379.pid # 日志 # Specify the server verbosity level. # This can be one of: # debug (a lot of information, useful for development/testing) # verbose (many rarely useful info, but not a mess like the debug level) # notice (moderately verbose, what you want in production probably) 生产环境 # warning (only very important / critical messages are logged) loglevel notice # 日志的文件位置名 logfile "" # 数据库的数量,默认是 16 个数据库 databases 16 # 是否总是显示LOGO always-show-logo yes ################## 快照(RDB) ################## # 如果900s内,如果至少有一个1 key进行了修改,我们及进行持久化操作 save 900 1 # 如果300s内,如果至少10 key进行了修改,我们及进行持久化操作 save 300 10 # 如果60s内,如果至少10000 key进行了修改,我们及进行持久化操作 save 60 10000 ################## security 安全################## # 密码,初始为空,也就说不需要密码,如果设置了密码,那么需要使用auth 密码进行登录才能进入 requirepass ################## 限制clients ################## #设置能连接上redis的最大客户端的数量 maxclients 10000 #redis 配置最大的内存容量 maxmemory <bytes> #内存到达上限之后的处理策略 maxmemory-policy noeviction # 处理策略如下 # 1、volatile-lru:只对设置了过期时间的key进行LRU(默认值) # 2、allkeys-lru : 删除lru算法的key # 3、volatile-random:随机删除即将过期key # 4、allkeys-random:随机删除 # 5、volatile-ttl : 删除即将过期的 # 6、noeviction : 永不过期,返回错误 ################## append only模式 aof配置(持久化保存) ################## # #默认是不开启aof模式的,默认是使用rdb方式持久化的,在大部分所有的情况下,rdb完全够用! appendonly no # 持久化的文件的名字 appendfilename "appendonly.aof" # appendfsync always # 每次修改都会 sync。消耗性能 appendfsync everysec # 每秒执行一次 sync,可能会丢失这1s的数据! # 不执行 sync,这个时候操作系统自己同步数据,速度最快 # appendfsync no !
新建文件夹/opt/mysql,并进入
mkdir /opt/mysql
cd /opt/mysql
下载MySQL安装包或者使用Xftp上传
wget http:#dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
# 解压
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
删除CentOS7.6自带的类Mysql数据库mariadb(会和冲突)
# 查看mari开头的安装包,一共两个
rpm -qa | grep mari
rpm -e --nodeps mariadb-libs强制删除
rpm -e --nodeps marisa
依次运行几条命令
# 安装环境
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
# 安装依赖
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
# 安装客户端
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
# 安装服务端
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
启动MySQL服务
systemctl start mysqld.service
设置用户密码(mysql自动给root用户设置随机密码,第一次需要修改)
# 查看MySQL设置的root随机用户密码 grep "password" /var/log/mysqld.log # 复制查出的密码 # 登录用户(注意-p之后不能输入密码,只能命令行中输入) mysql -uroot -p 输入密码 # 设置密码策略为0级别,生产环境不可用!!!! set global validate_password_policy=0; # 修改密码(root用户只能本地登录) set password for 'root'@'localhost' =password('12345678'); # 刷新权限,是新密码生效 flush privileges;
设置MySQL远程登录
# 切换到mysql数据库 use mysql # 查看数据库有访问区权限的信息 # 第一次设置,通常host都是为localhost select user, host from user; # mysql5.7版本之前的授权 # all privileges,所有权限,或者单独指定select,update,delete # "*.*"代表所有资源所有权限,第一个*表示数据库名称,第二个*表示表名 # 'root'@%”其中root代表账户名,%代表所有的访问地址 # IDENTIFIED BY '12345678',这个'12345678'是指远程访问密码,可自定义 grant all privileges on *.* TO 'root'@'%' identified by '自定义远程访问密码' with grant option; # 刷新权限 flush privileges; # mysql8执行授权 # 创建用户 CREATE USER 'root'@'%' IDENTIFIED BY 'root'; # 授权 grant all privileges on *.* to 'root'@'%' ; # 刷新权限 flush privileges; grant all privileges on *.* TO 'root'@'%' identified by '12345678' with grant option;
开放MySQL对应的端口(不开放无法远程连接)
# 查3306端口是否被开放
firewall-cmd --query-port=3306/tcp
# 查所有开放的端口
firewal-cmd --list-ports
# 开放3306端口
firewall-cmd --permanent --add-port=3306/tcp
# 刷新防火墙
firewall-cmd --reload
#!/bin/bash # 数据库访问主机 HOST=localhost # 数据库用户名 DB_USER=root # 数据库密码 DB_PASSWORD=12345678 # 要删除距离当前时间指定天数 DL_NUM=10 # 备份目录 BACKUP=/data/backup/db # 获取当前的日期时间 DATETIME=$(date +%Y-%m-%d_%H:%M:%S) # 测试时间是否获取到 # echo $DATETIME # 创建备份目录专门存放,如果存在就使用,如果不存在就创建目录 # 如果不是一个目录,就创建(!取反,-d表示文件存在且是一个目录) [ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}" # 所有数据库备份,并压缩为gz格式 mysqldump -u${DB_USER} -p${DB_PASSWORD} --host=${HOST} --all-databases | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz # 进入备份目录 cd ${BACKUP} # 打包,${DATETIME}的文件以及子目录下的打包为$DATETIME.tar.gz格式 tar -zcvf $DATETIME.tar.gz ${DATETIME} # 打包后删除,打包前的文件${DATETIME},该目录以及该目录下的子目录 rm -rf ${BACKUP}/${DATETIME} # 删除指天数前的备份文件 find ${BACKUP} atime +${DL_NUM} -name "*.tar.gz" -exec rm -rf {} \; # 提示信息 echo "备份数据库所有数据库成功"
编辑计时器设置
# 编辑
crontab -e
# 查看
crontab -l
# 删除
crontab -r
编写调度任务crontab -e
# 写定时调度任务,指定两点半备份数据库
# 分钟 时 日 月 周 命令
# 每天两点半执行一次脚本
30 2 * * * /opt/sqlBck/mysql_db_backup.sh
shell是一个命令行解释器,为用户提供一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止或编写一些程序
输入脚本的绝对路径或相对路径(一定要有执行权限!!!)
# 例如/opt/shcode下有一个hello.sh脚本
# 使用绝对路径执行sh脚本
/opt/shcode/hello.sh
# 使用相对路径执行sh脚本,假定目前已经在/opt/shcode/目录下
./hello.sh
sh命令执行(无需执行权限也能执行)
# 绝对路径执行
sh /opt/shcode/hello.sh
# 相对路径执行,假定在/opt/shcode/下
sh hello.sh
单行注释
# 注释内容
多行注释(“:<<!” 和 “!” 独自占一行)
:<<!
注释内容
!
变量分为两种,分别为系统变量和用户自定义变量
$HOME
$PWD
$SHELL
$USER
定义变量:变量名=值
撤销变量:uset 变量名
声明静态变量:readonly 变量
将命令的返回值赋值给变量
使用反引号
A=`date`
使用$()
A=$(date)
# 将shell变量输出为环境变量/全局变量
export 变量名=变量值
# 更新配置文件
source 配置文件
# 环境变量的配置文件通常在/etc/profile,所以更新环境配置文件为
source /etc/profile
# 查询变量名
echo $变量名
# 环境变量名为HOME,所以查看环境变量的值就可以为
echo $HOME
# n为大于0的整数, # $0代表命令的本身 # $1-$9代表传入第1到第9个参数 # 10以上需要用大括号包含,例如第10个使用${10},第11个使用${11} $n # 这个变量代表命令行中所有的参数 # $*把所有参数当作一个整体 $* # 这个变量代表命令行中所有的参数 # $@把每个参数分别对待 $@ # 代表命令行中所有参数的个数 $#
实例脚本
#!/bin/bash
# 打印命令行的参数,体会$*和$@的区别
for i in "$*"
do
echo "$i"
done
ehco "-------"
for j in "$@"
do
echo "$j"
done
基本介绍:shell设计者提前定义好的变量,可以直接在shell脚本中使用
# 当前进程的进程号,即是PID
$$
# 后台运行的最后一个进程的进程号
$!
# 最后一次执行命令返回的状态
# 如果这个变量的值为0,证明命令正确执行
# 如果不为0(具体的数字,由命令自己决定),那么证明上一个命令执行不正确
$?
执行脚本
#!/bin/bash
echo "当前执行的线程id=$$"
# 以后台的方式运行一个脚本,并获取他的进程号
# 该脚本存在才行
/opt/shcode/hello.sh &
echo "最后一个执行的线程id=$!"
echo "执行的结果=$?"
# $(("运算式"))
# $[运算式]
# expr 运算式
注意事项
1 expr运算符间要有空格,如果希望将expr的结果赋值给某个变量,就是用反引号``
例如:expr 1 + 2
A=`expr 1 + 3`
2 expr后边的乘、除、取余 分别为 \* / %
if [ 条件判断式 ]
then
代码
elif [条件判断式]
then
代码
fi
注意事项
常用判断条件汇总
实例shell脚本
#!/bin/bash # 判断/opt/shcode/hello.txt目录中是否存在该文件 if [ -f /opt/shcode/hello.txt ] then ehco "存在该文件" fi # 根据输入的参数,判断大于等于60输出“及格了”,小于60输出“不及格” if [ $1 -ge 60 ] then echo "及格了" elif [ $1 -lt 60 ] then echo "不及格" fi
case $变量名 in
"值1")
如果变量的值等于值1,就执行
;;
"值2")
如果变量的值等于值2,就执行
;;
# 其他分支
*)
如果都不匹配,就执行这段代码
;;
esac
注意事项
实例脚本
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "其他"
;;
esac
# 基本语法1
for 变量 in 值1 值2 值3...
do
程序/代码
done
# 基本语法2
for (( 初始值; 循环控制条件; 变量变化 ))
do
程序/代码
done
注意事项
实例代码
#!/bin/bash # 打印命令行的参数,体会$*和$@的区别 echo "in语法" for i in "$*" do echo "$i" done ehco "-------" echo "双括号语法" for j in "$*" do echo "$j" done ehco "-------" ehco "输入的值为$1," # 根据输入的值n,从1到n累加 SUM=0 for ((i=1; i<=$1; i++)) do # 将运算后的结果作为一个变量赋值给SUN SUM=$[$SUM+$i] done echo "1累加到$1的的总和为$SUM"
while [ 条件判断式 ]
do
代码
done
注意事项
实例脚本
#!/bin/bash
# 根据输入的值n,从1到n累加
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
# i自增
i=$[$i+1]
done
echo "1累加到$1的总和为$SUM"
read (选项)(参数)
选项
-p 指定读取值的提示信息
-t 指定读取值的等待时间,单位秒,超时就不等待
参数
变量 指定读取值的变量名
实例脚本
#!/bin/bash
#读取控制台输入的NUM1值
read -p "请输入一个数NUM1=" NUM1
ehco "输入的值为NUM1=$NUM1"
#读取控制台输入的NUM2值,10秒无输入就跳过
read -t 10 -p "请输入一个数NUM1=" NUM2
ehco "输入的值为NUM2=$NUM2"
主要分为系统函数和自定义函数
# 功能:返回完整路径最后/的部分,常用于获取文件名
basename [pathname] [suffix]
# 功能:删除所有的前缀,包括最后一个字符/,然后将字符串显示出来
basename [string] [suffix]
# suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
# 例如 返回/opt/shcode/aaa.txt的“aaa”部分,即是文件名
basename /opt/shcode/aaa.txt .txt
实例脚本
#!/bin/bash
# 返回/opt/shcode/aaa.txt的“aaa.txt”部分
basename /opt/shcode/aaa.txt
# 返回/opt/shcode/aaa.txt的“aaa”部分,即是文件名
basename /opt/shcode/aaa.txt .txt
# 功能:返回完整路径最后/的前面的部分,常用于返回路径部分
# 即是将给定绝对路径中的非目录部分去除,然后返回目录部分
driname [pathname]
实例脚本
#!/bin/bash
# 返回/opt/shcode/aaa.txt的“/opt/shcode”部分,即是目录部分
driname /opt/shcode/aaa.txt
# 定义函数语法
[ funciton ] 函数名[()]
{
Action;
[return int;]
}
# 调用语法
函数名 [值]
实例脚本
#!/bin/bash
# 计算输入两个参数的和
function getSum() {
SUM=$[$1+$2]
echo "和是=$SUM"
}
# 输入两个值
read -p "请输入第一个参数n1=" n1
read -p "请输入第二个参数n2=" n2
# 调用自定义的函数
getSum $n1 $n2
/var/log目录就是系统日志文件的保存位置
日志文件 | 说明 |
---|---|
/var/log/message | 记录系统中重要消息的日志。这个日志文件会记录Linux系统的绝大数重要消息。如果系统出问题,首要就检查的就是该日志 |
/var/log/boot.log | 记录系统启动日志 |
/var/log/cron | 记录系统定时相关的日志 |
/var/log/lasllog | 记录系统中所有用户最后一次登录时间的日志。该文件为二进制文件,要使用lastlog命令查看 |
/var/log/mailog | 记录邮件信息的日志 |
/var/log/secure | 记录验证和授权方面的信息。只要涉及账户和密码的程序都会记录,比如系统登录、ssh的登录、su切换用户、sudo授权、添加用户、修改用户等会记录到该文件 |
/var/log/ulmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。这个文件不能使用vi查看,而要使用w、who、users等命令查看 |
日志文件 | 说明 |
---|---|
/var/log/cups/ | 记录打印信息的日志 |
/var/log/dmesg | 记录系统在开机时内核自检的信息汇总。也可以使用dmesg命令直接查看内核自检信息 |
/var/log/btmp | 记录错误登录的日志。是一个二进制文件,不能直接使用vi查看,要使用lastb命令查看 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的后台启动、重启、关机时间。是二进制文件,使用last命令查看 |
CenOS7.6日志服务是rsyslogd,CenOS6.x日志服务是syslodd。rsyslogd功能更加强大。rsyslogd的使用、日志格式和syslogd服务兼容
查看Linux中的rsyslogd服务是否启动
ps aux | grpe "rsyslogd" | grep -v "grep"
查询rsyslogd服务的自启动状态
systemctl list-unit-files | grep rsyslog
编辑文件格式 *.* 存放日志文件
第一个*表示日志的类型
第二个*表示日志的级别
例如
# 日志管理服务示例,往/etc/rsyslog.conf中添加日志文件/var/log/test.log,
# 当有事件发生时,该文件按就会接受信息并保存
# 如果/var/log/test/log文件不存在会自动创建
authpriv.info /var/log/test/log
日志类型
日志级别(从上到下,级别从低到高,记录的信息越来越少)
日志服务rsyslogd记录日志文件的格式
事件产生的时间 产生事件的服务器的主机名 产生事件的服务名或程序名 事件的具体信息
日志轮替:把旧的日志文件移动并改名,同时建立新的日志文件,当旧的日志文件超出保存范围之后,就会进行删除
/etc/logrotate.confg为logrotate日志服务的全局配置文件
# see "man logrotate" for details # 通过man logrotate命令来查看更多使用细节 # rotate log files weekly # 每周对日志文件进行一次轮替 weekly # keep 4 weeks worth of backlogs # 一共保存4份日志文件备份(不包含最新的日志文件),当创建新的日志文件时,判断日志备份个数是否大于4,大于就将最旧的日志删除 rotate 4 # create new (empty) log files after rotating old ones # 在日志轮替后,创建新的空的日志文件 create # use date as a suffix of the rotated file # 使用日志作为日志轮替文件的后缀 dateext # uncomment this if you want your log files compressed # 日志文件是否压缩,如果取消注释,则日志会在转储的同时进行压缩 #compress # RPM packages drop log rotation information into this directory # 包含 /etc/logrotate.d/ 目录中所有的子配置文件。也就说会把这个目录中所有的子配置文件都读取进该文件(logrotate) include /etc/logrotate.d # 下面是单独设置,优先级更加高 # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { # 每月轮替一次 monthly # 创建新的日志文件,权限时0664 所有者是root,所属组是utmp组 create 0664 root utmp # 日志最小轮替大小是1MB。当时间到达一个月时,如果日志大小大于1MB,那么不进行日志轮替,如果大于1MB就进行日志轮替 minsize 1M # 仅保留一份日志备份。也就是只有wtemp和wtmp.1 rotate 1 } /var/log/btmp { # 如果日志不存在,则忽略该日志的警告信息 missingok # 每月对日志文件进行一次轮替 monthly # 创建新的日志文件,权限时0600 所有者是root,所属组是utmp组 create 0600 root utmp # 仅保留一份日志备份。也就是只有btemp和btmp.1 rotate 1 } # system-specific logs may be also be configured here.
轮替策略配置的格式
日志文件的绝对路径
{
参数
}
日志文件参数说明
参数 | 参数说明 |
---|---|
daily | 日志轮替周期为每天 |
weekly | 日志轮替周期为每周 |
monthly | 日志轮替周期为每月 |
rotate 数字 | 保留备份日志文件的个数。0指不备份 |
compress | 日志轮替时,旧的日志进行压缩 |
create 权限 所有者 所属组 | 建立新日志,同时指定新日志的权限与所有者和所属组 |
mail address | 当日志轮替时,输出内容通过邮件发送给到 指定的邮件地址 |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
notifempty | 如果日志为空文件,则不进行日志轮替 |
minsize 大小 | 日志轮替的最小值,只有大于等于这个值才进行轮替,否则即是到时间也不进行轮替操作 |
size 大小 | 按照大小进行轮替,不按照时间轮替。日志只有大于指定大小才进行日志轮替 |
dateext | 使用日期作为日志轮替文件的后缀 |
sharedscripts | 在此关键字之后执行的脚本,只执行一次 |
prerotate/startscript | 在日志轮替前执行脚本命令 |
postrotate/endsrcipt | 在日志轮替之后执行脚本命令 |
有两种方式
案例:在/etc/logrotate.d目录下配置test配置文件,配置/var/log/test.log的轮替策略
# 在/etc/logrotate.d目录下创建配置文件 cd /etc/logrotate.d vim test # 编辑配置文件test /var/log/test.log { # 没有该日志文件,忽略警告 missingok # 轮替周期为每天 daily # 备份日志最大个数为7,超过就删除旧的 rotate 7 # 如果日志为空,就不进行轮替 notifempty }
日志轮替:依赖系统定时任务。在/etc/cron.daily目录下,可以发现这个目录是有logrotate文件(有可执行权限),logrotae通过这个文件依赖定时任务执行
注意事项:journalctl 查看的是内存日志,重启清空
# 查看全部 journalctl # 查看最新的3条 journalctl -n 3 # 查看起始时间到结束时间的日志 journalctl --since 19:00 --until 19:10:10 # 报错日志 journalctl -p err # 日志详细内容 journalctl -o verbose # 查看包含这些参数的日志 journalctl _PID=1245 _COMM=sshd # 或 journalctl | grep sshd
备份
方式一:将需要的文件或分区用tar命令打包即可,下次恢复的时候,再解压打开覆盖即可
使用dump(备份)和restore(恢复)命令,注意这两个命令需要安装
# 安装dump命令
yum -y install dump
# 安装restore命令
yum -y install restore
dump支持分卷和增量备份(所谓增量备份是指备份上次备份后修改/增加过的文件,也称为差异备份)
注意事项:备份分区可以支持增量备份,如果备份文件或目录,则不支持增量备份。即只能使用0完整备份
语法
dump [-cu] [-0123456789] [-f<备份后文件名>] [-T<日期>] [目录或文件系统]
dump []-wW
-c 打包
-0123456789 备份的层级。0为最完整备份,会备份所有文件。若指定0以上的层级,则备份备份修改或新增的文件,到9之后就需要从新轮替,就是必须从0开始了
-f<备份后的文件名> 指定备份后文件名
-j 调用bzlib库压缩备份文件,即是将备份后的文件压缩为bz2格式,让文件更加小
-T<日期> 指定开始备份的时间和日志
-u 备份完毕后,在/etc/dumpdares中记录备份的文件按系统,层级,日期与时间等信息
-t 指定文件名,若该文件已经在备份文件中,则列出名称
-W 显示需要备份的文件以及最后一次备份的层级,时间,日期
-w 仅显示需要备份的文件,不显示额外的信息
示例
# 将/boot分区所有内容备份到opt/boot.bak0.bz2文件中,备份层级为0 dump -0uj -f /opt/boot.bak0.bz2 /boot # /boot目录新增了文件,增量备份/boot dump -1uj -f /opt/boot.bak1.bz2 /boot # 显示需要备份的文件以及最后一次备份的层级,时间,日期 dump -W # 查看备份时间文件 cat /etc/dumpdates # dump增量备份目录(错误示范 # 会提示DUMP:Only level 0 dumps are allowed on a subdirectory 即只能允许使用级别0备份子目录 dump -1j -f /opt/etc.bak.ba2 /etc # dump命令备份目录(正确使用) dump -0j /opt/etc.bak.bz2 /etc/
可以从dump生成的备份文件中恢复原文件
注意事项:每次只能指定一个模式选项,不能混用!
restore [模式选项] [选项]
模式选项
-C 对比模式,将备份的文件和已存在的文件互相对比,如果有不同的化,会给出提示
-i 交互模式,在进行还原操作时,restore指令将依序询问用户
-r 还原模式,如果有增量备份,那么需要把增量备份业进行恢复,有几个就恢复几个,按小到大的顺序来执行恢复
-t 查看模式,查看备份文件有哪些文件
选项
-f<备份设备> 从指定的文件中读取备份数据,进行还原操作
示例
# 比较文件
restore -C -f /opt/boot.bak0.bz2
# 查看备份文件
restore -t -f /opt/boot/bak1.bz2
# 恢复备份文件,假定有两个,分别为bak0.bz2和bak1.bz2
restore -r -f /opt/boot/bak0.bz2
restore -r -f /opt/boot/bak1.bz2
如果未下载wget命令,就执行该步骤,如果已下载就跳过该步骤
yum install -y wget
安装宝塔,如果安装过程有就yes或y执行下一步
wget -O install.sh http:#download.bt.cn/install/install_6.0.sh && sh install.sh
安装完后会提示成功,并提供两个面板地址,以及用户名和密码(地址和密码都是随机)
# 外网访问,如果没有配置防火墙无法使用
外网面板地址: http:#113.64.72.168:8888/3a118870
# 内网地址
内网面板地址: http:#192.168.132.98:8888/3a118870
# 用户名
username: ev80vc0d
# 密码
password: 4f25730b
首次登录需要绑定手机号
如果忘记开始的密码,那么可以使用以下命令查看
# 显示的就是开始的访问地址和初始用户名以及密码
# 如果后续修改过了,那么这个就无法作为参考
bt default
常用的Nginx模块,用来做什么
rewrite模块:实现重写功能
access模块:来源控制
ssl:安全加密
ngx_http_gzip_module:网络传输压缩模块
ngx_http_proxy_module:实现代理
ngx_http_upstream_module:实现定义后端服务列表
ngx_cache_purge:实现缓存清除功能
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。