赞
踩
[文本](超级连接)【toc]是小写的生成目录
1.先安装virtual machine 15.5
2.再安装Linux(CentOs7.6/8.1)
3.原理 :主机【windos】包含【VM15.5虚拟机软件】包含【Centos7.6(linux)虚拟机系统】
4.下载好的VM进行安装
去BOIS里修改设置开启虚拟化设备支持(f2,f10)(自己百度),正式安装(密钥自己找)
5下载centos(迅雷下载很快)
P006_韩顺平图解Linux全面升级_CentOS7.6安装 35:15
https://mirrors.163.com/centos
6.正式安装两者:
6.1创建虚拟机(新建-典型-稍后安装系统–REDHATlunix7–分配硬件)
内存2GB
处理器(本人母机2CPU8核心,我分配1个处理器4核)
新CD/DVD(光驱)
网络适配器(三种选NAT模式)
USB控制器
声卡
打印机
显示器
6.2安装系统
虚拟机名字-设置-CD/DVD-使用ISO映像文件
-找到下载好的centos
7.点击开启虚拟机
此时出现黑屏,双击鼠标叫install enter
等待安装出现语言选简体中文
生产最小安装(学习选界面,xw兼容/程序库,开发工具)
安装目标位置:我要配置分区
其实一般把lunix分为3个分区
boot 引导分区 swap交换分区 根分区 1G 2G 剩下 设置的情况,+号
挂载点 G 文件系统 设备类型 选/boot 1 ext4 标准分区 选swap 2 swap 标准分区 选/ 17 ext4 标准分区 配置网络和主机:连接网络,改个主机名(yang01) 开始安装
8.设置root密码,创建用户
练习方便密码我写的root
用户tom,密码123456
此时有两个用户权限低的tom和高的root
等待安装,然后重启
9.后续配置
许可证点已接受,点完成配置
默认权限低的tom,可点击未列出,root用户root密码登录
汉语-汉语(pingyin)-跳过
点击引用程序-Firefox-进行网页访问-测试网络
1.虚拟机的网络连接三种形式说明(p7)
桥连接:Linux可以和其他的系统通信。但是可能造成IP冲突。
NAT:网络地址转换方式:Linux可以访问外网,不会造成IP冲突。
主机模式:你的Linux是一个独立的主机,不能访问外网。
2.虚拟机的clone(p8)
3.虚拟机的快照(p9)
4.虚拟机的迁移(本质文件删除和移除)(P10)
1.安装VMtools
vmtools:(主机和lunix共享文件夹)
可共享文件夹共享剪贴板
安装步骤:
有光驱弹出,设置-重新安装Vmtools(如果灰色设置将软盘和DVD驱动改成自动检测,再安装vmtools)
弹出VMtools-点进去复制文件.gz–到主文件夹-计算机-其他位置-/opt目录-粘贴
双击桌面-打开终端- cd /opt ---- tar -zxvf VM(按tab都出现)
输入ls,可以见蓝色目录,进入vm的解压目录,输入cd vmxxxxx-distrib/,输入ls,出现绿色文件夹,输入./绿色文件名,然后一直回车
注意在SkippIng之后有个小陷阱让你不安装,输入no
出现 --the VMware team 表示成功( gcc -v命令可以查看是否安装gcc)
主机D盘新建文件夹Myshare–yang虚拟机-设置-选项
共享文件夹-添加(D盘地址)–总是启用-确定
主文件夹-设置-其他-计算机-mnt-hgfs-myshare-hello.txt
修改myshare里的东西,两者都会有反应。表示成功
(远程是通过网络,后面讲)
**Linux世界里,一切皆文件 ** 树状目录结构
总结:
1.首先虚拟机终端输入ifconfig 获得inet 192.168.8.129(ip地址)
2.母机cmd输入ping ip 测试网络
3.打开xshell-会话弹出-新建-(名称随便/主机:lunix的ip /协议ssh) 确定-关闭-双击左边对话-未出现主机密钥-接受并保存
4.输入用户名,密码,进入页面,就和VM终端上一样操作系统/
傻瓜式安装,新建-对话-和上个类似,注意协议是sstp
如果出现乱码-对话-属性-选项-utf-8编码
然后就可以自由传输文件
三种常见模式:
正常模式
在正常模式下,我们可以使用快捷键。
插入模式/编辑模式
在这个模式下,输入字母(i)才可以进入编辑模式
命令行模式
在这个模式中,可以提供相关指令。
演示在xshell注意在root@–下:vim Hello.java(创建一个java文件),然后输入i进入编辑模式,输入代码,写完代码
输入esc(退出)-输入: 然后输入wq (写入退出)
各种模式的转化:
执行可以在虚拟机终端也可以在xshell
可以先用普通用户登录 再 su - 用户名 命令切换管理员
切换用户登录x-shell的时候ssh连接不上的问题,解决是防火墙问题(
*输入* systemctl status firewalld.service 查看防火墙是否关闭 出现active(running)绿色
输入 systemctl stop firewalld.service 关闭防火墙
输入 systemctl disable firewalld.service 将防火墙设置开机不自启动
现在尝试xshell是否能连接虚拟机,如果还是不行则可能是第二种情况。)
修改了一下tom的密码[Ej0b0BWikip)
登录到tom之后权限不够想切换到root 输入su - root 在输入密码
输入logout可以切换回tom(在shell里面)
用户,组,家目录。
添加用户:useradd 用户名。/比如useradd milan 会在/home/milian下自动生成米兰文件夹
cd:表示change directory,切换目录。
当创建用户成功后,会自动的创建和用户同名的家目录。
也可以通过useradd -d 指定目录 新的用户名。
useradd -d /home/test king
在home下位king用户的家目录是test
pwd 可以查看当前的位置
指定/修改密码:passwd 用户名
删除用户,保留家目录:userdel 用户名,一般保留家目录,因为干过的活要留着。
删除用户以及家目录:userdel -r 用户名
查询用户信息:id 用户名
切换用户:su - 切换用户名,从权限高切换到权限低的用户不需要输密码。
返回切换前的用户:exit
查看当前用户/登录用户:who am i
用户组:类似于角色,系统可以对有共性的多个用户进行统一的管理。
增加组:groupadd 组名
删除组:groupdel 组名
增加用户时直接加上组:useradd -g 用户组 用户名
groupadd wd
useradd -g wd zwj
groupadd mj
usermod -g mj zwj
修改用户组:usermod -g 用户组 用户名
实用指令
指定运行级别(7个级别)
0 关机
1.单用户【找回丢失密码】
2.多用户状态没有网络服务
3.多用户状态有网络服务
4系统未使用保留给用户
5.图形界面
6.系统重启
系统的运行级别配置文件:/etc/inittab
查看级别systemctl get-default
设置级别 systemctl set-default graphical.target(图形界面5)
multi-user.target 是3
切换到指定运行级别的指令:init [012356]
进入到单用户模式,然后修改root密码。因为进入单用户模式,root不需要密码就可以登录。【开机->在引导时输入 回车键->看到一个界面输入 e->看到一个新的界面,选中第二行(编辑内核),再输入 e->在这行最后输入 1,再输入 回车键->再输入b,这时就会进入到单用户模式,使用passed来修改root密码。】
【开机->在引导时输入 回车键->看到一个界面输入 e->看到一个新的界面,找到lunix16开头的行数在utf-8后面输入init=/bin/sh,再输入control+x进入单用户模式,在光标闪烁位置输入mount -o- remount,rw / 输入enter
在新的一行输入passwd,输入新密码,然后enter,确认,成功后出现passwd
在光标闪烁的地方输入 exec /sbin/init,输入enter,就成功了,完成后系统自动重庆
文件目录类
pwd:Print Working Directory,显示当前工作目录的绝对路径。
ls:-a:显示当前目录所有的文件和目录,包括隐藏的;-l:以列表的方式显示信息。
cd:cd ~:回到自己的家目录;cd …:回到当前目录的上一级目录。(比如我是root 回到/rooot)
mkdir:创建目录;-p:创建多级目录。
mkdir /home/dog (home存在)
mkdir -p /home/animal/tiger
rmdir:删除空目录。rmdir不能删除非空的目录。如果需要删除非空的目录,需要使用rm -rf。
rmdir /home/dog入门
rm -rf /home/animal/
touch:创建空文件。可以一次性创建多个文件
touch hello.txt
cp:拷贝文件到指定目录;-r:递归复制整个文件夹。强制覆盖不提示的方法:cp命令改为\cp
将/home/hello/txt拷贝到/home/bbb 目录下
cp hello.txt bbb/
cp -r /home/bbb/ /test/
rm:移除文件或目录;-r:递归删除整个文件夹;-f:强制删除不提示。
rm /home/hello.txt
rm -r /hone/bbb
rm -rf /hone/bbb
mv:移动文件与目录或重命名,两种功能!
同目录下改名
mv cat.txt dog.txt(mv 旧目录名 新目录名)
不同目录剪切
mv hello.txt /home/test
两者可以结合移动并且重命名
cat:查看文件内容。只能浏览文件,而不能修改文件。-n:显示行号。结尾加上 | more:分页显示,不会全部一下显示完。(输入空格可以一起显示完)
cat -n /etc/profile
管道命令|more 类似交给下个指令处理
more:是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more还内置了很多快捷键:(交互指令)
操作 | 功能说明 |
---|---|
空白键(Space) | 向下翻一页 |
Enter | 向下翻一行 |
q | 立刻离开more,不再显示该文件内容 |
Ctrl + F | 向下滚动一屏 |
Ctrl + B | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
less:用来分屏查看文件内容,与more相似,但是更强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容。对于显示大型文件具有较高的效率。
/字符串 向下搜索字符功能 n向下N向上
? 字符串 向上 nN相反
>
指令:输出重定向。如果不存在会创建文件,否则会将原来的文件内容覆盖。
echo “hello” > mytext.txt 将hello移入mytext
>>
指令:追加。如果不存在会创建文件,否则不会覆盖原来的文件内容,而是追加到文件的尾部。
cat是查看,echo是写入,echo (内容) >> 文件
ls -l > 文件列表内容写入a.txt文件中覆盖
ls-al >> 文件列表内容写入a.txt文件中末尾
cat 文件1>文件2 文件1内容覆盖文件2
echo “内容”>> 文件2 追加
cal:显示当前月日历。
echo:输出内容到控制台。
echo $HOSTNAME 可以输出主机名
echo “helloworld” 输出heloworld
head:显示文件的开头部分。-n 5:看前面5行内容。
head -n 5 /etc/profile
tail:输出文件中尾部的内容。-n 5:看后面5行内容。-f:时事追踪该文档的所有更新
tail -f 文件 监控文件
ln 软连接
ln -s /root /home/myroot 这个myroot指向/root
这个时候cd /myroot 然后ls 出现root下面的…
删除 rm /home/myroot
history 查看已经执行过的或者也可以执行命令
history 执行过的所有命令
history 10 显示最近10条指令
!127 执行历史编号位127的指令
时间日期类
date “+%Y-%m-%d %H:%M:%S”
date -s “2022-7-3 11:11:00” 设置系统当前时间
cal 2020 显示2020年的日期
搜索查找类
find:从指定目录向下递归的遍历其各个子目录,将满足条件的文件或者目录显示在终端。
find (搜索范围) -name (文件名):按照指定的文件名查找模式查找文件。
查找/home下的hello.txt文件
find /home -name hello.txt
find (搜索范围) -user (用户名):按照指定的用户名查找模式查找文件。
查找/opt下的用户名位nobody的文件
find /opm -user nobody
find (搜索范围) -size (+多少/-多少/多少):按照指定的文件大小查找模式查找文件(大于多少/小于多少/等于多少)
find / size +200M find / size -200M
查询 /目录下所有.txt的文件:find / -name *.txt
locate:locate (搜索文件)
updatedb
locate hello.txt
grep:过滤查找,表示将前一个命令的处理结果输出传递给后面的命令处理。经常跟管道一起使用。
管道符“|",表示将前一个命令的处理结果传递给后面命令处理
cat hello.txt | grep yes
压缩和解压类
gzip/gunzip:压缩文件/解压
zip/unzip:压缩文件/解压
zip [选项] (压缩后文件xxx.zip) (将要压缩的文件)
unzip [选项] (要解压的文件xxx.zip)
zip -r:递归压缩,即压缩目录
将home目录以及包含的文件和子文件夹都压缩要不要*不影响
将/home/下的文件压缩成myhome.zip
zip -r myhome .zip /home/
把myhome.zip解压到/opt/tmp下
unzip -d /opt/tmp myhome.zip
将myhome.tar.gz解压到/opt/tmp2
unzip -d (目录):指定解压后的文件的存放目录
tar:打包指令,最后打包后的文件是.tar.gz的文件
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
将pig.txt和cat.txt一起压缩到pc.tar.gz 注意被压缩的两个文件夹有空格
tar -zxvf pc.tar.gz 解压
组管理和权限管理
文件:
文件/目录所有者:
一般为文件的创建者,谁创建了该文件,就自然的称为该文件的所有者。(但是可以后期修改)
查看文件所有者:ls -ahl
修改文件所有者:chown (用户名) (文件名)
chown zwj appple.txt (zwj是新的所有者)
文件所在组不一定是文件所有者。
组的创建
groupadd (组名)
groupadd animals
useradd -g animals dog
usermod -g mj zwj
文件/目录所在组
chgrp fruit ban.txt
其他组
改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组
改变用户所在组:usermod -g 新组名 用户名
改变用户登录的初始目录:usermod -d 目录名 用户名
-d需要有权限
权限的基本介绍
文件类型:
drwx------. 5 milan milan 4.0K 10月 11 00:02 milan
-rw-r–r–. 1 root root 272 10月 11 16:47 info.txt
lrwxrwxrwx. 1 root root 5 10月 11 21:58 myroot -> /root(ln -s /root myroo)
0-9位的说明,第0位确定文件类型
第1-3位确定所有者(该文件的所有者)拥有该文件的权限。— User
第4-6位确定所属组(同用户组的)拥有该文件的权限。— Group
第7-9位确定其他有用所拥有该文件的权限—Other
ls -l 显示内容说明:
rwx权限详解
rwx作用到文件:
rwx作用到目录:
-rw-r–r–. 1 root fruit 0 10月 11 21:32 ban.txt
数字1:文件:因链接数或 目录:字目录数
root 用户
fruit 组
0 文件大小(字节)
10月 11 21:32 最后的修改日期
ban 文件名
修改权限 chmod
通过数字变更权限
修改文件所有者 chown
chown newowner file:改变文件的所有者
chown tom /home/abc.txt
chown newowner:newgroup file:改变用户的所有者和所在组
将所有文件的都修改是递归
chown -R tom king组 /home/test
-R:如果是目录,则使其下所有子文件或目录递归生效
修改文件所在组 chgrp
chgrp newgroup file:改变文件的所有组
-R:如果是目录,则使其下所有子文件或目录递归生效
chgrp shaolin /home/text/zwj .txt 将zwj改为shaolin组
chgrp -R shaolin /home/text 将文件递归改为shaolin组
练习
groupadd police
useradd -g police jerry
chmod 640 jack1.txt (修改所有者rw 本组r 其他0 )
ll 显示现在 的 ls -ash(全部)usermod -g police xh(root权限)
任务调度(在某个时间执行特定的某个命令)
crond任务调度:crontab进行定时任务调度
项目 | 含义 | 范围 |
---|---|---|
第一个“*” | 一小时当中的第几分钟 | 0-59 |
第二个“*” | 一天当中的第几小时 | 0-23 |
第三个“*” | 一个月当中的第几天 | 1-31 |
第四个“*” | 一年当中的第几月 | 1-12 |
第五个“*” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
crontab -e
输入i 输入*/1 * * * * ls -l /etc/ >/tep/to.txt
按est 输入:wq
然后输入cd /tep 输入ll 观察to.txt文件
特殊符号说明
*
:代表任何时间。比如第一个*
就代表一小时中每分钟都执行一次的意思。
,
:代表不连续的时间。比如“0 8,12,16 * * *命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令。
-
:代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令。
/n
:代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令。
分时天月星
实例1
crontab -e
输入*/1 * * * * date >> /temp/mydate(隔1追加日期到xx)
实例2
vim my.shell
输入date >> /home/mycal cal >> /home/mycal
chmod u+x my.shell
./my.shell(运行)
cat mycal (发现出现cal里面是date和cal)
crontab -e
输入*/1 * * * * /home/my.shell
(三种模式的切换没有写)
实例3
crontab -e
0 2 * * * mysqldump -u -root -proot testdb > /home/db.bak
(将Mysql数据库tetsdb2:00自动拷贝)
步骤 写脚本 赋权限 设置调度
crontab -r 终止任务调度
crontab -l 列出当前任务调度
service crond restart 重启任务调度
at命令是一次性任务,守护进程atd会后台模式运行检查作业队列来运行,默认情况下atd没60s检查作业队列,如果时间与当前时间匹配,则运行
ps -ef 查看所有运行的进程
ps -ef | grep atd 只检查atd的运行
at [选项] [时间]
ctrl+D结束at命令的输入
选项 含义 -m 指定用户完成给用户发右键 -I atq的别名 -d atrm的别名 -v 显示任务被执行的时间 -c 打印任务内容到标准输出 -V 显示版本输出 -q <队列> 显示指定队列 -t <时间参数> 以时间参数的形式提交要运行的任务 -f <文件> 从指定文件读入而部署从标准输入读入 at的时间指定
当天 hh:mm 如果过了是第二天,12小时加am /pn ,具体时间
04:00 2022-03-06,相对计时 now+5 minutes,或者today
实例
at 5pm+2 days 按动enter出现at>
输入 /bin/ls/home 输入2次的ctrl+D
atq 可以查看所有任务
删除编号为1的任务
atrm 1
也可以执行脚本输入的时候改成 /root/my.shell
Linux磁盘分区、挂载
输入lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 17G 0 part /
└─sda3 8:3 0 2G 0 part [SWAP]
sr0 11:0 1 1024M 0 rom
分区的方式
Linux分区
硬盘说明
Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
IDE标识符“hdx~" hd分区所在设备类型 x为盘号(a基本盘。b基本从属盘 c 辅助 d) ~代表分区(1-4表示主分区和扩展分区) hdb2
sdx~ 同理
lsblk -f:查看当前系统的分区和挂载情况。(list block)
lsbllk 表示全
增加磁盘
挂载的经典案例
虚拟机添加硬盘
(在vm做然后reboot,lsblk显示所有,显示为sdb)
分区:fdsk /dev/sdb
m 显示命令列表
p 显示磁盘分区 同fdisk -l
n 新增分区
d 删除分区
w 写入并退出
开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后写入w写入分区并退出,若不保存退出输入q
fdisk -f显示所有信息
格式化:mkfs -t ext4 /dev/sdb1
其中ext4是分区类型 /dev/sdb是磁盘名
挂载:新建目录:mkdir /home/newdisk;挂载:mount /dev/sdb1 /home/newdisk
mount /dev/sdb1 /home/newdisls/
这个时候在newdisls创建文件存储在新磁盘中
设置可以自动挂载(永久挂载):重启系统后,仍然可以挂载。vim etc/fstab 增加挂载信息。mount -a:生效
取消挂载:unmount /dev/sdb1
用命令行挂载的,重启后就消失了,是临时
永久挂载 通过修改/etc/fstab实现挂载
(UUID可以用/dev/sdb1代替)
添加完成后执行mount -a即刻生效
磁盘情况查询:df -h / df -l
查询指定目录的磁盘占用情况:du -h /目录,默认为当前目录
-s:指定目录占用大小汇总
-h:带计量单位
-a:含文件
–max-depth=1:子目录深度
-c:列出明细的同时,增加汇总值
例
du -h --max-depth=1 /opt
du -ha --max-depth=1 /opt
du -hac --max-depth=1 /opt
磁盘情况-工作实用指令
ls -l /opt 显示/opt下所有文件目录
统计/home文件夹下文件的个数:ls -l /home | grep "^-" | wc -l
以“-"开头的
统计/home文件夹下目录的个数:ls -l /home | grep "^d" | wc -l
统计/home文件夹下文件的个数,包括子文件夹里的:ls -lR /home | grep "^-" | wc -l
R代表递归
统计文件夹下目录的个数,包括子文件夹里的:ls -lR /home | grep "^d" | wc -l
以树状显示目录结构:首先安装tree指令:yum install tree,tree 目录
ifconfig查看虚拟机ip地址inet 192.168.8.130(131)
主机ipconfig VMnet 192.168.8.1 (2.1)
主机:ping 192.168.8.130 可以通
无线网卡 192.168.73.186 (101.8) 和外网通信的
教授局域网 存在网关
lunix>主机vmnet>无线网卡>网关>外网
虚拟机编辑-虚拟网络适配器-Vnet8
windos下查看ipconfig
lunix 查看ifconfig
ping 网址 测试两者之间的连接
lunix网络环境的配置
第一种自动获取(variable)
应用程序-系统工具-设置-网络
第二种设置ip
TYPE=“Ethernet”
PROXY_METHOD=“none”
BROWSER_ONLY=“no”
BOOTPROTO=“dhcp” 自动分配改为"static"
DEFROUTE=“yes”
IPV4_FAILURE_FATAL=“no”
IPV6INIT=“yes”
IPV6_AUTOCONF=“yes”
IPV6_DEFROUTE=“yes”
IPV6_FAILURE_FATAL=“no”
IPV6_ADDR_GEN_MODE=“stable-privacy”
NAME=“ens33”
UUID=“fed666fc-de2f-4081-a020-3596e82c1e10”
DEVICE=“ens33”
ONBOOT=“yes”#增加IP地址
IPADDR=192.168.200.130
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2
最后将vmnet8(在虚拟机的设置-NAT设置网关-改为192.168.200.2)
最后重启网络服务
hostname 查看主机名
修改 vim /etc/hostname
重启reboot
通过主机名找到lunix系统
在windos下
在C:\Windows\System32\drivers\etc\hosts文件
写入 192.168.8.130 yangvm01
ping yangvm01
在lunix
在/etc/hosts修改,然后ping 名字(类似)
主机名解析过程
hosts:一个文本文件,用来记录ip和hostname之间的映射关系
DNS:Domain Name System 域名系统(互联网上作为域名和ip地址相互映射的一个分布式数据库)
主机名解析机制分析
输入www.baidu
1.浏览器先检查缓存中是否有域名解析ip地址,有就先调用,没有就调用DNS解析器缓存,无就hosts ,无就公网
2一般第一次访问某个网站的时候,会缓存这些
dns域名解析缓存 ipconfig /displaydns
手动清理dns缓存 ipconfig /flushdns
在Linux中,每个执行的**程序(代码)**都称为一个进程。每个进程都分配一个ID号
程序加载到内存-就是进程
每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www服务器。
每个进程都可能以两种方式存在。
前台和后台
一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
显示系统执行的进程
ps:查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数。PID:进程识别号;TTY:终端机号;TIME:此进程所消耗的CPU时间;CMD:正在执行的命令或进程名
ps -a:显示当前终端的所有进程信息。
ps -u:以用户的格式显示进程信息。
ps -x:显示后台进程运行的参数。
ps -axu | grep xxx:过滤得到xxx的信息。
USER PID %CPU %MEM(占物理内存百分比) VSZ(占虚拟内存情况) RSS (占物理内存情况)TTY STAT(进程状态Z僵死) START TIME COMMAND(启用进程所用的命令或者参数)
root 2 0.0 0.0 0 0 ? S 10月12 0:00 [kthreadd]ps -axu | grep sshd
ps -ef:以全格式显示当前所有的进程,查看进程的父进程。
ps -ef | grep sshd
ps -ef | more
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10月12 ? 00:00:02 /usr/lib/systPPID=0,可以认为是开机就启动的进程
-e:显示所有进程。
-f:全格式。
终止进程
kill [选项] 进程号:通过进程号杀死进程
killall 进程名称:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用
如果用killall 所有的子进程也会kill
-9:表示强迫进程立刻停止
案例1:踢掉非法用户:kill 进程号
案例2:终止远程登录服务sshd,在适当时候再次重启sshd服务
kill sshd对应的端口
/bin/systemctl start sshd.service
案例3:终止多个gedit编辑器:killall 进程名称
比如打开多个文件,后面是gedit
可以直接
kill gedit
案例4:强制杀掉一个终端:kill -9 进程号
查看进程树:pstree [选项]
service本质就是进程,但是在后台运行,通常会监听某个端口,等待其他进程,比如mysql,所有我们称守护进程
服务(service)管理
service管理指令:service 服务名 [start | stop | restart | reload | status]
在CentOS7.0之后,不再使用service,而是systemctl
可以用ls -l /etc/init.d/ 查看
查看防火墙情况:
测试某个端口是否在监听:telnet
查看服务名:
方式1:使用setup->系统服务就可以看到
可以看到前有*就是可以自启
方式2:/etc/init.d/服务名称
服务的运行级别(runlevel):
查看或修改默认级别:vim /etc/inittab
级别3:完全多用户有NFS,无界面进入命令行模式
级别5:x11控制台,进入图形gui
开机流程
开机>BIOS>/boot >systemd进程1>运行级别>运行级对应的服务
每个服务对应的每个运行级别都可以设置
multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5
#To view current default target, run:
systemctl get-default
#To set a default target, run:
systemctl set-default TARGET.target
如果不小心将默认的运行级别设置成0或者6,怎么处理?
chkconfig:可以给每个服务的各个运行级别设置自启动/关闭
某个服务在某个级别的自启动/关闭
chkconfig --list 查看
查看xxx服务:chkconfig –list | grep xxx
查看服务的状态:chkconfig 服务名 --list
给服务的运行级别设置自启动:chkconfig – level 5 服务名 on/off
chkconfig – level 5 network off
要所有运行级别关闭或开启:chkconfig 服务名 on/off
systemctl管理指令:
1.语法systemctl 服务名 [start | stop | restart | reload | status]
2.查看指令服务 ls -l /usr/lib/systemd/system
3.设置服务的自启动
systemctl list-unit-files
systemctl enable 服务名 (设置服务开机启动
systemctl disable 服务名 (关闭服务开机启动
systemctl is-enable 服务名 (查看服务是否自启动
查看防火墙情况:
- service iptables status
- systemctl status firewalld(7.0之后的版本)
- ls -l /usr/lib/systemd/system | grep fire 查看防火墙
- firewalld.service 防火墙的服务名
firwall指令
firewall-cmd --list-port 查询所有的端口 (1) 打开端口: firewall-cmd --permanent --add-port=端口号/协议 通过 netstat -anp | more 指令查看端口号的协议 (more 分页显示) 该指令输出的信息中: Local Address下是 ip地址:端口号 Proto 是协议 (protocol 协议) (2) 关闭端口: firewall-cmd --permanent --remove-port=端口号/协议 注意:无论是打开端口还是关闭端口,要重新载入才能生效 重新载入:firewall-cmd --reload (3) 查询端口是否开放: firewall-cmd --query-port=端口/协议 应用案例: (1) 启用防火墙,测试 111 端口是否能 telnet (远程登录) 不行 在本地主机DOS命令窗口输入:telnet Linux虚拟机ip地址:端口号 测试本地主机能否访问虚拟机的111端口 telnet 192.168.200.130 111 防火墙打开+端口关闭--->不可以访问端口 (2) 开放 111 端口 firewall-cmd --permanent --add-port=111/tcp ; 需要 firewall-cmd --reload 防火墙打开+端口打开--->可以访问端口 (3) 再次关闭 111 端口 firewall-cmd --permanent --remove-port=111/tcp 需要 firewall-cmd --reload
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
动态监控进程
top [选项]
top - 12:45:10(此刻) up 14:12(运行时间), 5 users, load average: 0.01, 0.02, 0.0(三折平均数小于0.07表示负载均衡)
Tasks: 362 total, 1 running, 361 sleeping, 0 stopped, 0 zom
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.8 id(空闲), 0.0 wa, 0.0 hi, 0
KiB Mem : 2027896 total, 76596 free, 1434636 used, 516664
KiB Swap: 2097148 total, 2073844 free, 23304 used. 410408
top和ps命令很相似。它们都用来显示正在执行的进程。top和ps最大的不同之处在于top在执行一段时间可以更新正在运行的进程。
-d 秒数:指定top命令每隔几秒更新。默认是3秒。
-i:使top不显示任何闲置或者僵死进程。
-p:通过指定监控进程ID来仅仅监控某个进程的状态。
案例1:监控特定用户:top查看进程;u输入用户名。
案例2:终止指定的进程:top查看进程;k输入要结束的进程。
案例3:指定系统状态更新的时间(每隔10秒自动更新,默认是3秒):top -d 10
交互操作说明:输入top之后在top界面
监控网络状态
netstat [选项]
-an:按一定顺序排列输出
Proto(协议) Recv-Q Send-Q Local Address (linux内部地址) Foreign Address (外部地址)
Statelisten 监听 establish连接
-p:显示哪个进程在调用
RPM
RPM:RedHat Package Manager,红帽软件包管理工具。
生成扩展名的.RPM文件,类似setup.ext
RPM查询已安装的rpm列表:rpm -qa | grep xx
rpm包的其它查询指令:
rpm -qa:查询所安装的所有rpm软件包
rpm -qa | grep firefox
返回软件名firefox-68.10.0-1(版本号).el7.centos.x86_64
rpm -qa | more
rpm -qa | grep xx
rpm -q xx:查询xx软件包是否安装
rpm -qi xx:查询软件包信息
rpm -ql xx:查询软件包中的文件
rpm -qf 文件全路径名:查询文件所属的软件包
卸载rpm包:rpm -e 软件包名称
删除时可能会发生依赖错误,忽视依赖强制删除的方法:rpm -e --nodeps 软件包名称
安装rpm包:rpm -ivh 软件包全路径名称
i=install:安装
v=verbose:提示
h=hash:进度条
软件包全路径名称:光盘-packages-找到火狐-复制在熟悉目录,然后执行安装命令
搭建JAVAEE环境
1.mkdir /opt/jdk
2.通过xftp6上传到/opt/jdk下
3.cd /opt/jdk
4.解压tar -zxvf jdk-----.tar.gz
5.mkdir /user/local/java
6.mv /opt/jdk/jdk26 /user/local/java
(找到环境变量echo $PATH)
7.配置环境变量 vim etc/profile
8.export JAVA_HOME=/user/local/java/jdk281(之前的java目录,这段加在profile最后)
9.export PATH= J A V A H O M E / b i n : JAVA_HOME/ bin: JAVAHOME/bin:PATH
10.source /etc/profile [让文件生效]
测试是否成功
下载地址,选完全的 tar.gz
上传安装文件 , mkdir /opt/tomcat
解压缩到/opt:tar -zxvf apache-tomcat-7.0.70.tar.gz
进入tomcat的bin目录,启动tomcat
cd aptomcat/ cd /bin
./startup.sh
开放端口 vim /etc/sysconfig/iptables
firewall-cmd--permanent--add-port=8080/tcp(开启8080端口)
systemctl restart firewalld.service
firewall-cmd --reload
重启防火墙生效
查询端口是否以及打开
firewall-cmd --query-port=8080/tcp
http://192.168.8.130:8080/(z注意130是linux的ip)
测试是否安装成功:在windows和Linux下访问http://linuxip:8080
测试,在cd … cd webapps/ 然后 cd ROOT vim yxy.html
然后在浏览器192.168.8.130:8080/yxy.html 显示出
mkdir /opt/mysql,并cd进去
运行 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
查看是否有mysql:rpm -qa | grep mari
linux自带mysql数据库名字mari
删除旧mysql:rpm -e --nodeps mariadb-libs(强制删除)
再删剩余的rpm -e --nodeps marisa
查询rpm -qa | grep mari
依次运行
1 rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
2 rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
3 rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
4 rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
启动mysql
systemctl start mysqld.service
然后开始设置root用户密码
mysql自动设置root用户随机密码
grep “password” /var/log/mysqld.log
可以查看当前密码
[Note] A temporary password is generated for root@localhost: gzPQrE4Rjq;e
进入到Mysql然后修改密码
mysql -u -root -p
安装环境:yum -y install make gcc-c++ cmake bison-devel ncurses-devel
对于个人可以简单一点密码 set global validate_password_policy=0 默认值是1
set global validate_password_policy=0 输入;
(mysql的密码复杂度分三种 1 长度数字大小写特殊字符)
set password for ‘root’@‘localhost’ =password(‘yangmysqlpwd’);
执行 flush privileges;
测试
quit
输入mysql -u -root -p
输入密码
然后 show datebases1111
shell是什么
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。 在计算机科学中,Shell俗称壳(用来区别于核) 是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。 它类似于DOS下的COMMAND.COM和后来的cmd.exe。 它接收用户命令,然后调用相应的应用程序。 中文名 壳 外文名 shell 性质 命令解析器 用途 接收用户命令 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。是用户使用 Linux 的桥梁. 用户写了一个指令,该指令不能直接发给Linux内核去执行,而是由shell帮我们去执行,执行完之后再通过shell返回给我们结果。 在Linux中不止一种shell,我们常用的是bash。 可以直接发一个指令给shell,也可以将指令写在一个文件/脚本(.sh shell脚本)里。 shell编程就是在shell脚本中写指令
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
shell脚本的执行方式
1.脚本格式要求: 脚本以 #!/bin/bash 开头 --->确定shell的类型 脚本需要有可执行权限 shell脚本文件以.sh结尾,也可以不以.sh结尾 2.编写第一个Shell 脚本 需求说明:创建一个 Shell 脚本,输出 hello world! 创建一个目录:mkdir /root/shcode cd /root/shcode vim hello.sh 写入: #!/bin/bash echo "hello,world!" 3.shell脚本的常用执行方式 方式 1: #输入ll查看权限 首先要给shell脚本加x执行权限:chmod u+x hello.sh 再输入该脚本的相对路径或绝对路径来执行该脚本 比如: 使用相对路径: ./hello.sh 使用绝对路径: /root/shcode/hello.sh 方式 2: 不用赋予脚本+x 权限,直接执行即可。(使用以下指令,即使没有执行权限也可以执行) 使用指令: sh shell脚本/shell脚本的绝对路径 比如 sh hello.sh
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
shell 变量
(1) Linux Shell 中的变量分为:系统变量和用户自定义变量。 系统变量:系统自带的变量 (2) 系统变量比如:$HOME、$PWD、$SHELL、$USER 等等 echo $HOME --->显示当前用户的家目录 (3) 可以通过 set 指令显示出shell中的所有系统变量
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
基本语法: (1) 定义变量:变量名=值 --->不加空格 (2) 撤销变量:unset 变量名 (3) 声明静态变量:readonly 变量 (该变量不能 unset撤销) 案例 1:定义变量 A 案例 2:撤销变量 A 案例 3:声明静态的变量 B=2,不能 unset cd /root/shcode vim vr.sh 输入: #!/bin/bash #案例 1:定义变量 A=100 (#为注释符) A=100 #输出变量需要加上$ ($--->引用变量) echo $A #上述输出结果是100,想要输出结果为A=100,这样写(A=以普通文本形式输出,$A引用变量的值) echo A=$A 或者 echo "A=$A" #案例 2:撤销变量 A unset A echo "A=$A" (--->输出 A= ) #案例 3:声明静态的变量 B=2,不能 unset readonly B=2 echo "B=$B" 保存:wq 最后输入执行命令:sh vr.sh -------------------------------------------------------------------- shell 变量名的定义规则: (1) 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×) (2) 等号两侧不能有空格 (3) 变量名称一般习惯为大写,这是一个规范,我们遵守即可 -------------------------------------------------------------------- 将命令的返回值赋给变量: (1) A=`date`反引号,运行里面的命令,并把结果返回给变量 A (2) A=$(date) 等价于反引号 案例: #将指令返回的结果赋给变量 C=`date` D=$(date) echo "C=$C" 输出C=时间 echo "D=$D" 输出D=时间 #使用环境变量 TOMCAT_HOME echo "tomcat_home=$TOMCAT_HOME"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
可以将变量提升为全局环境变量,供多个shell程序共同使用。 基本语法: (1) export 变量名=变量值 (功能描述:将 shell 变量输出为环境变量/全局变量) (2) source 配置文件 (功能描述:在某文件中定义环境变量之后,要对该文件进行刷新才能使其生效,即让修改后的配置信息立即生效) (3) echo $变量名 (功能描述:查询环境变量的值) 快速入门: (1) 在/etc/profile 文件中定义 TOMCAT_HOME 环境变量 TOMCAT_HOME --->意思是tomcat的家目录是什么 (2) 查看环境变量 TOMCAT_HOME 的值 vim /etc/profile 写入:export TOMCAT_HOME=/opt/tomcat 保存退出 source /etc/profile echo $TOMCAT_HOME ---输出 /opt/tomcat (3) 在另外一个 shell 程序中使用 TOMCAT_HOME 在另一个shell程序中写入: echo "tomcat_home=$TOMCAT_HOME" 注意:在输出 TOMCAT_HOME 环境变量前,需要让其生效source /etc/profile shell 脚本的 单行注释:# 多行注释: :<<! 独占一行 内容 ! 独占一行
在vim 中 设置行号:set nu
1.介绍 当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量 比如: ./myshell.sh 100 200 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息 ./myshell.sh --->执行myshell脚本命令 100 200 都是该命令行的参数 使用位置参数变量可以在myshell脚本中获得参数 2.基本语法 $n (功能描述:n 为数字,$0 代表命令本身(如./myshell.sh),$1-$9 代表第一到第九个参数(如:$1 就是100 $2 就是200),十以上的参数需要用大括号包含,如${10}) $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体) $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待) $# (功能描述:这个变量代表命令行中所有参数的个数) 案例:编写一个 shell 脚本 myshell.sh ,在脚本中获取到命令行的各个参数信息。 vim myshell.sh 写入: #!/bin/bash echo "命令本身=$0 第一个参数=$1 第二个参数=$2" echo "所有的参数=$*" echo "$@" echo "参数个数=$#" 保存退出 sh myshell.sh 11 22 结果输出 0=./myshell.sh 1=11 2=222 所有的参数=11 222 11 222 参数个数=2
1.基本介绍: 预定义变量是 shell 设计者事先已经定义好的变量,可以直接在 shell 脚本中使用 2.基本语法: (1) $$ (功能描述:当前进程的进程号(PID)) (2) $! (功能描述:后台运行的最后一个进程的进程号(PID)) (3) $?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。) 3.应用实例: 在一个 shell 脚本中简单使用一下预定义变量 vim preVar.sh 写入: #!/bin/bash echo "当前执行的进程 id=$$" #以后台的方式运行一个脚本(在脚本后加一个$),并获取他的进程号 /root/shcode/myshell.sh & echo "最后一个后台方式运行的进程 id=$!" echo "执行的结果是=$?" 保存并退出 sh preVar.sh 输出结果 当前执行的进程id=5233 最后一个后台方式运行的进程id=5234 执行的结果0 [root@yangvm01 shellcode]# 0=/root/shellcode/myshell.sh 1= 2= 所有的参数= 参数个数=0
1.基本介绍: 学习如何在 shell 中进行各种运算操作。 2.基本语法: (1) 三种写法: $((运算式)) $[运算式] expr m + n (expression 表达式) (2) 注意 expr 运算符间要有空格 如果希望将 expr 的结果赋给某个变量,使用 `` 或者 $( ) (3) expr m - n (4) expr \*, /, % 乘,除,取余 3.应用实例 oper.sh 案例 1:计算(2+3)X4 的值 案例 2:请求出命令行的两个参数[整数]的和 20 50 vim oper.sh 写入: #!/bin/bash #案例 1:计算(2+3)X4 的值 #使用第一种方式 RES1=$(((2+3)*4)) --->用一个变量RES1接收 echo "res1=$RES1" 保存并退出 sh oper.sh vim oper.sh 写入: #!/bin/bash #使用第二种方式, 推荐使用 RES2=$[(2+3)*4] echo "res2=$RES2" 保存并退出 sh oper.sh vim oper.sh 写入: #!/bin/bash #使用第三种方式 expr TEMP=`expr 2 + 3` RES4=`expr $TEMP \* 4` echo "temp=$TEMP" echo "res4=$RES4" 保存并退出 写入 #!/bin/bash #计算(2+3)X 4 #method 1 r1=$(((2+3)*4)) echo r1=$r1 #m2 r2=$[(2+3)*4] echo r2=$r2 #m3 TEMP=`expr 2 + 3` r3=`expr $TEMP \* 4` echo TEMP=$TEMP echo r3=$r3 sh oper.sh 输出 r1=20 r2=20 TEMP=5 r3=20 vim oper.sh 写入: #!/bin/bash #案例 2:请求出命令行的两个参数[整数]的和 20 50 SUM=$[$1+$2] echo "sum=$SUM" 保存并退出 ./ oper.sh 20 50 输出sum=50
1.基本语法: [ condition ] (注意 condition 前后要有空格) #非空返回 true,可使用$?验证(0 为 true,>1 为 false) 2.应用实例: [ hspEdu ] 返回 true [ ] 返回 false [ condition ] && echo OK || echo notok 条件满足,执行后面的语句 3.判断语句: 常用判断条件: (1) = 字符串比较 (2) 两个整数的比较 -lt 小于 less than -le 小于等于 less equal -eq 等于 equal -gt 大于 greater -ge 大于等于 greater equal -ne 不等于 not equal (3) 按照文件权限进行判断 -r 有读的权限 -w 有写的权限 -x 有执行的权限 (4) 按照文件类型进行判断 -f 文件存在并且是一个常规的文件 -e 文件存在 -d 文件存在并是一个目录 4.应用实例: 案例 1:"ok"是否等于"ok" 判断语句:使用 = 案例 2:23 是否大于等于 22 判断语句:使用 -ge 案例 3:/root/shcode/aaa.txt 目录中的文件是否存在 判断语句: 使用 -f 代码如下: vim ifdemo.sh #!/bin/bash #案例 1:"ok"是否等于"ok" if [ "ok" = "ok" ] then echo "equal" fi -----> if语句 以if开头 以fi结尾 #案例 2:23 是否大于等于 22 #判断语句:使用 -ge if [ 23 -ge 22 ] then echo "大于" fi #案例 3:/root/shcode/aaa.txt 目录中的文件是否存在 #判断语句: 使用 -f if [ -f /root/shcode/aaa.txt ] then echo "文件存在" fi #看几个案例 if [ ] then echo "存在" fi if [ hspEdu01 ] then echo "hello hspEdu01" fi sh ifdemo.sh 输出结果: equal 大于 hello hspEdu01
1.基本语法: if [ 条件判断式 ] then 代码 fi 或者 多分支 if [ 条件判断式 ] then 代码 elif [条件判断式] then 代码 fi 2.注意事项:[ 条件判断式 ],中括号和条件判断式之间必须有空格 3.应用实例 ifCase.sh 案例:请编写一个 shell 程序,如果输入的参数,大于等于 60,则输出 "及格了",如果小于 60,则输出 "不及格" if [ $1 -ge 60 ] then echo "及格了" else echo "不及格" fi 或者 if [ $1 -ge 60 ] then echo "及格了" elif[ $1 -lt 60] then echo "不及格" fi
1.基本语法: case $变量名 in "值 1") 如果变量的值等于值 1,则执行程序 1 ;; "值 2") 如果变量的值等于值 2,则执行程序 2 ;; …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;; esac 应用实例 testCase.sh 案例1:当命令行参数是1时,输出 "周一", 是2时,就输出"周二",其它情况输出"other" vim testCase.sh 写入: #!/bin/bash #案例1:当命令行参数是1时,输出 "周一", 是2时,就输出"周二",其它情况输出"other" case $1 in "1") echo "周一" ;; "2") echo "周二" ;; *) echo "other..." ;; esac 保存并退出 sh testCase.sh 1 周一
基本语法: 第一种方式: for 变量 in 值 1 值 2 值 3… do 程序/代码 done 应用实例 testFor1.sh 案例:打印命令行输入的参数 [这里可以看出$* 和 $@ 的区别] #!/bin/bash #案例:打印命令行输入的参数 [这里可以看出$* 和 $@ 的区别] #注意:$* 是把输入的参数当作一个整体,所以只会输出一句话 for i in "$*" do echo "num is $*" done #使用 $@ 来获取输入的参数,注意:也是把输入的参数看作一个整体,但这是分别对待;所以有几个参数就输出几句 echo "======================================" for j in "$@" do echo "num is $@" done sh testFor1.sh 100 200 300 num is 100 200 300 ====================================== num is 100 200 300 num is 100 200 300 num is 100 200 300 语法2第二种方式: for (( 初始值;循环控制条件;变量变化 )) do 程序/代码 done 应用实例 testFor2.sh 案例:从 1 加到 100 的值输出显示 #!/bin/bash #案例:从 1 加到 100 的值输出显示 #定义一个变量SUM SUM=0 for(( i=1; i<=100; i++ )) do SUM=$[$SUM+$i] done echo "总和SUM=$SUM" sh testFor2.sh 总和SUM=5050 如果1加到x x由自己输入 SUM=0 for(( i=1; i<=$1; i++ )) do SUM=$[$SUM+$i] done echo "总和SUM=$SUM" sh textFor2.sh 1000 总和SUM=500500
基本语法: while [ 条件判断式 ] do 程序/代码 done 注意:while 和 [有空格,条件判断式和[ ]也有空格 应用实例:testWhile.sh 案例:从命令行输入一个数 n,统计从 1+..+ n 的值是多少? #!/bin/bash SUM=0 i=0 while [ $i -le $1 ] do SUM=$[$SUM+$i] #i 自增 i=$[$i+1] done echo "执行结果=$SUM" sh testWhile.sh 100 执行结果=5050
1.基本语法: read(选项)(参数) 选项: -p:指定读取值时的提示符; -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了 参数: 变量:指定读取值的变量名 2.应用实例 testRead.sh 案例 1:读取控制台输入一个 NUM1 值 案例 2:读取控制台输入一个 NUM2 值,在 10 秒内输入。代码: #!/bin/bash #案例 1:读取控制台输入一个 NUM1 值 read -p "请输入一个数 NUM1=" NUM1 echo "你输入的 NUM1=$NUM1" #案例 2:读取控制台输入一个 NUM2 值,在 10 秒内输入。 read -t 10 -p "请输入一个数 NUM2=" NUM2 echo "你输入的 NUM2=$NUM2" sh testRead.sh 请输入一个数 NUM1=100 你输入的 NUM1=100
1.basename 基本语法 功能:返回完整路径最后 / 的部分,常用于获取文件名 basename [pathname] [suffix] basename [string] [suffix] 功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。 选项:suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。 案例 1:请返回 /home/aaa/test.txt 的 "test.txt" 部分 basename /home/aaa/test.txt 返回test.txt 如果输入:basename /home/aaa/test.txt .txt 返回test 2.dirname 基本语法 功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分 dirname 文件绝对路径 功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分) 案例 1:请返回 /home/aaa/test.txt 的 /home/aaa dirname /home/aaa/test.txt 返回/home/aaa
基本语法: [ function ] funname[()] { Action; [return int;] } 调用直接写函数名:funname [值] 案例 1:计算输入两个参数的和(动态的获取) testFun.sh #!/bin/bash #案例 1:计算输入两个参数的和(动态的获取) #定义函数 getSum function getSum() { SUM=$[$n1+$n2] echo "和是=$SUM" } #输入两个值 read -p "请输入一个数 n1=" n1 read -p "请输入一个数 n2=" n2 #调用自定义函数 getSum $n1 $n2 sh testFun.sh 请输入一个数 n1=10 请输入一个数 n2=90 和是=100
cd /usr/sbin
vim mysql_db_backup.sh
chmod u+x mysql_db_backup.sh
编辑文件
#!/bin/bash #备份目录 BACKUP=/data/backup/db #当前的时间 DATETIME=$(date +%Y-%m-%d_%H%M%S) echo "$DATETIME" #数据库地址 HOST=localhost #数据库用户名 DB_USER=root #数据库密码 DB_PW=yangmysqlpwd #备份的数据库名 DATABASE=yang #创建备份目录,如不存在就创建 [ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}" #备份数据库 mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz #将文件处理成 tar.gz cd ${BACKUP} tar -zcvf $DATETIME.tar.gz ${DATETIME} #删除对应的备份目录 rm -rf ${BACKUP}/${DATETIME} #删除10天前备份的数据库文件 find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \; echo "备份数据库${DATABASE} 成功~"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
/usr/sbin/mysql_db_backup.sh
crontab -e
编辑
30 2 * * * /usr/bin/mysql_db_backup.sh 定时
- 1
- 2
(1)日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。
(2)日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
(3)可以这样理解 日志是用来记录重大事件的工具
系统日志文件的保存位置:/var/log/ 目录下
应用案例:
使用 root 用户通过 xshell6 登陆,第一次使用错误的密码,第二次使用正确的密码登录成功看看在日志文件/var/log/secure 里有没有记录相关信息
系统常用日志:
CentOS7.6 日志服务是 rsyslogd (rocket-fast system for log)
CentOS6.x 日志服务是 syslogd
rsyslogd 功能更强大
rsyslogd 的使用、日志文件的格式,和 syslogd 服务是兼容的
rsyslogd是一个后台程序(服务),来管理/记录/操作相关日志。
将日志记录到对应的文件中。
/etc/rsyslog.conf配置文件中记录了要管理哪些日志和将这些日志记录到哪个文件中。
原理示意图:
1.在进行日志管理时,要保证rsyslogd服务是启动的! (1)查询 Linux 中的 rsyslogd 服务是否启动 ps aux | grep "rsyslog" ps aux | grep "rsyslog" | grep -v "grep" | grep -v "grep" ---> 筛选出ps aux | grep "rsyslog" 结果中不是grep的 (2)查询 rsyslogd 服务的自启动状态(是否是自启动状态enable) systemctl list-unit-files | grep rsyslog 2.配置文件:/etc/rsyslog.conf 该配置文件中记录了:日志和日志存放在哪个文件 关于日志:*.* 其中第一个*代表日志类型,第二个*代表日志级别 (1)日志类型分为: auth ##pam 产生的日志 authpriv ##ssh、ftp 等登录信息的验证信息 corn ##时间任务相关 kern ##内核 lpr ##打印 mail ##邮件 mark(syslog)-rsyslog ##服务内部的信息,时间标识 news ##新闻组 user ##用户程序产生的相关信息 uucp ##unix to nuix copy主机之间相关的通信 local 1-7 ##自定义的日志设备 (2)日志级别分为: debug ##有调试信息的,日志通信最多 info ##一般信息日志,最常用 notice ##最具有重要性的普通条件的信息 warning ##警告级别 err ##错误级别,阻止某个功能或者模块不能正常工作的信息 crit ##严重级别,阻止整个系统或者整个软件不能正常工作的信息 alert ##需要立刻修改的信息 emerg ##内核崩溃等重要信息 none ##什么都不记录 注意:从上到下,级别从低到高,记录信息越来越少 3.由日志服务 rsyslogd 记录的日志文件, 日志文件的内容:每一行都代表一个事件,每一行有以下四个内容: 1) 事件产生的时间 2) 产生事件的服务器的主机名 3) 产生事件的服务名或程序名 4) 事件的具体信息 4.日志如何查看实例 查看一下 /var/log/secure 日志,这个日志中记录的是用户验证和授权方面的信息 来分析如何查看 > > Oct 15 22:54:30 yangvm01 sshd[4457]: Accepted password for root from 192.168.8.1 port 4322 ssh2 5.日志管理服务应用实例(增加自定义的日志) 在/etc/rsyslog.conf 中添加一个日志文件/var/log/hsp.log,当有事件发送时(比如 sshd 服务相关事件),该文件会接收到信息并保存. 给小伙伴演示 重启,登录 的情况,看看是否有日志保存 vim /etc/rsyslog.conf 写入: *.* /var/log/hsp.log 保存退出 > /var/log/hsp.log (创建日志文件) 然后重启,重启事件会被记录到/var/log/hsp.log中 cat hsp.log | grep sshd 就可以查到信息(sshd远程连接)
日志轮替(logrotate)就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除
清除日志中旧的信息
(1) centos7 使用 logrotate 进行日志轮替管理
要想改变日志轮替文件名字,通过 /etc/logrotate.conf 配置文件中“dateext” 参数
(2) 如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如 “secure-20201010”。
这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。
(3) 如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。
当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志, 用来保存新的日志。
当第二次进行日志轮替时,“secure.1” 会自动改名为“secure.2”, 当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。
/etc/logrotate.conf 为 logrotate 的全局配置文件(写了日志文件轮替规则) /etc/logrotate.conf中的轮替规则适用于所有日志文件(除了单独指定轮替规则的日志文件) 可以在/etc/logrotate.conf对某些日志文件单独指定轮替规则 也可以把对某些日志文件单独指定的轮替规则写在/etc/logrotate.d目录下,然后在/etc/logrotate.conf 中include调用 /etc/logrotate.conf文件内容: # rotate log files weekly--->每周对日志文件进行一次轮替 weekly # keep 4 weeks worth of backlogs--->共保存 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 include /etc/logrotate.d--->可以把一些单独的轮替规则写在/etc/logrotate.d下(在本文件中include调用一下就行),也可以写在本文件中(如下面写的) #下面是单独设置,优先级更高。 # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { monthly # 每月对日志文件进行一次轮替 create 0664 root utmp # 建立的新日志文件,权限是 0664 ,所有者是 root ,所属组是 utmp 组 minsize 1M # 日志文件最小轮替大小是 1MB 。也就是日志一定要超过 1MB 才会轮替,否则就算时间达到一个月,也不进行日志转储 rotate 1 # 仅保留一个日志备份。也就是只有 wtmp 和 wtmp.1 日志保留而已 } /var/log/btmp { missingok # 如果日志不存在,则忽略该日志的警告信息 monthly create 0600 root utmp rotate 1 } 单独指定某个日志文件的轮替规则的参数说明: daily 日志的轮替周期是每天 weekly 日志的轮替周期是每周 monthly 日志的轮替周期是每月 rotate 数字 保留的日志文件的个数。0 指没有备份 compress 日志轮替时,旧的日志进行压缩 create mode owner group 建立新日志,同时指定新日志的权限与所有者和所属组。 mail address 当日志轮替时,输出内容通过邮件发送到指定的邮件地址。 missingok 如果日志不存在,则忽略该日志的警告信息 notifempty 如果日志为空文件,则不进行日志轮替 minsize 大小 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替 size 大小 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。 dateext 使用日期作为日志轮替文件的后缀。 sharedscripts 在此关键字之后的脚本只执行一次。 prerotate/endscript 在日志轮替之前执行脚本命令。 postrotate/endscript 在日志轮替之后执行脚本命令。
1) 第一种方法:
直接在/etc/logrotate.conf 配置文件中写入该日志的轮替策略
2) 第二种方法:
在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。
3) 推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写 入/etc/logrotate.conf 配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。
案例:在/etc/logrotate.conf 进行配置, 或者直接在 /etc/logrotate.d/ 下创建文件 hsplog 编写如下内容, 具体轮替的效果 可以参考 /var/log 下的 boot.log 情况.
- 1
- 2
- 3
在 /etc/logrotate.d/ 下创建文件 hsplog vim hsplog 写入: /var/log/hsp.log { missingok daily copytruncate rotate 1 notifempty } 保存退出 这样就好了,因为/etc/logrotate.conf 中有:include /etc/logrotate.d
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。
在 /etc/cron.daily/目录,就会发现这个目录中是有 logrotate 文件(可执行),
logrotate 通过这个文件依赖定时任务执行的。
crond定时后台程序会定时执行cron.daily内的文件
logrotate 文件在cron.daily下
所以也会定时执行文件中的轮替规则
写日志是rsyslogd
日志轮替是logrotate
总结
1.系统日志文件的保存位置:/var/log/ 目录下
2.rsyslogd是一个后台程序(服务),来管理/记录/操作相关日志。
将日志记录到对应的文件中。3./etc/rsyslog.conf配置文件中记录了要管理哪些日志和将这些日志记录到哪个文件中。
4.由日志服务 rsyslogd 记录的日志文件,
日志文件的内容:每一行都代表一个事件,每一行有以下四个内容:
- 事件产生的时间
- 产生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息
创建日志
vim /etc/rsyslog.conf 写入: *.* /var/log/hsp.log 保存退出 > /var/log/hsp.log (创建日志文件) 然后重启,重启事件会被记录到/var/log/hsp.log中 cat hsp.log | grep sshd 就可以查到信息(sshd远程连接)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
日志轮替
/etc/logrotate.conf中的轮替规则适用于所有日志文件(除了单独指定轮替规则的日志文件) 可以在/etc/logrotate.conf对某些日志文件单独指定轮替规则 也可以把对某些日志文件单独指定的轮替规则写在/etc/logrotate.d目录下,然后在/etc/logrotate.conf 中include调用
- 1
- 2
- 3
1) 第一种方法: 直接在/etc/logrotate.conf 配置文件中写入该日志的轮替策略 2) 第二种方法: 在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。
- 1
- 2
- 3
- 4
在 /etc/logrotate.d/ 下创建文件 hsplog vim hsplog 写入: /var/log/hsp.log { missingok daily copytruncate rotate 1 notifempty } 保存退出
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
有一些日志是写到内存里的,还没有写到文件里,因为这些日志是实时变化的 重启之后内存日志会被清空 查看内存日志指令:journalctl journalctl 查看全部 journalctl -n 3 查看最新 3 条 journalctl --since 19:00 --until 19:10:10 查看起始时间到结束时间的日志可加日期 journalctl -p err 报错日志 journalctl -o verbose 日志详细内容 journalctl _PID=1245 _COMM=sshd 查看包含这些参数的日志(在详细日志查看) 或者 journalctl | grep sshd 注意: journalctl 查看的是内存日志, 重启清空 演示案例: 使用 journalctl | grep sshd 来看看用户登录清空, 重启系统,再次查询,看看日志有什么变化没有
通过裁剪现有 Linux 系统(CentOS7.6),创建属于自己的 min Linux 小系统
启动流程介绍:
制作 Linux 小系统之前,再了解一下 Linux 的启动流程:
1、首先 Linux 要通过自检,检查硬件设备有没有故障
2、如果有多块启动盘的话,需要在 BIOS 中选择启动磁盘
3、启动 MBR 中的 bootloader 引导程序
4、加载内核文件
5、执行所有进程的父进程、老祖宗 systemd
6、欢迎界面
在 Linux 的启动流程中,加载内核文件时关键文件:
1)kernel 文件: vmlinuz-3.10.0-957.el7.x86_64
2)initrd 文件: initramfs-3.10.0-957.el7.x86_64.img
1.在现有的 Linux 系统(centos7.6)上加一块硬盘/dev/sdb
在硬盘上分两个分区,一个是/boot,一个是/,并将其格式化。
需要明确的是,现在加的这个硬盘在现有的 Linux 系统中是/dev/sdb,但是,当我们把东西全部设置好时,要把这个硬盘拔除,放在新系统上,此时,就是/dev/sda
2.在/dev/sdb 硬盘上,将其打造成独立的 Linux 系统,里面的所有文件是需要拷贝进去的
3.作为能独立运行的 Linux 系统,内核是一定不能少,要把内核kernel 文件和 initramfs 文件也一起拷到/dev/sdb 上
4.以上步骤完成,我们的自制 Linux 就完成,创建一个新的 linux 虚拟机,将其硬盘指向我们创建的硬盘,启动即可
5.示意图
1.虚拟机设置-添加新的硬盘-将虚拟硬盘存储为单个文件(可以用lsblk查看你需要重启)
2.通过fdisk来给我们的/dev/sdb进行分区
n 新增分区 主分区p 然后w写入,做了两个分区
3.格式化第一块,格式化第二块
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb12
4.创建目录并且挂载新的磁盘
mkdir -p /mnt/boot /mnt/sysroot
[root@yangvm01 ~]# mount /dev/sdb1 /mnt/boot
[root@yangvm01 ~]# mount /dev/sdb2 /mnt/sysroot/5.安装grub ,内核文件拷贝至目标磁盘
grub2-install --root-directory=/mnt /dev/sdb
#用二进制确认我们是否安装成功
hexdump -C -n 512 /dev/sdb
复制
[root@yangvm01 ~]# rm -rf /mnt/boot/*
[root@yangvm01 ~]# cp -rf /boot/* /mnt/boot/6.修改grub2/grub.cfg文件 标红的部分是需要使用指令来查看的
cd /mnt/boot/
cd grub2
vim grub.cfg
在打开的文件中
注意### BEGIN /etc/grub.d/10_linux ###开头的
msdos1 --hint=‘hd0,msdos1’ xxxxxxxxxx1
else
search --no-floppy --fs-uuid --set=root xxxxx1
fi
linux16 /vmlinuz-3.10.0-1160.el7.x86_64 root=UUID=xxxxxx3 ro spectre_v2=retpoline rhgb quiet LANG=zh_CN.UTF-8注意我们的是拷贝/boot/*的文件来到/mnt/boot/所以要修改
开新终端
[root@yangvm01 ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 bc089e8d-a935-4aff-91d6-cd293a219d98 /boot xxx1
├─sda2 ext4 98ded09e-0090-4b42-a951-ae6eedb72392 / xxxx3
└─sda3 swap 011362b1-fc86-4df2-af4f-44cc10917047 [SWAP]
sdb
├─sdb1 ext4 30bee603-4eb2-4582-b38e-a8897b9039ee /mnt/boot
└─sdb2 ext4 f2e88100-8f93-44d9-8f64-245091b33073 /mnt/sysroot
sr0将sdb中的代替x1,x3
在77%的时候
fi linux16 /vmlinuz-3.10.0-1160.el7.x86_64 root=UUID=f2e88100-8f93-44d9-8f64-245091b33073 ro spectre_v2=retpoline rhgb quiet LANG=zh_CN.UTF-8 selinux=0 init=/bin/bash initrd16 /initramfs-3.10.0-1160.el7.x86_64.img }
- 1
- 2
- 3
- 4
- 5
增加 selinux=0 init=/bin/bash
在88%的时候进行修改
在### END /etc/grub.d/10_linux ###,在上面进行修改
linux16 /vmlinuz-0-rescue-f963f5d2e26e4964b75951a59410ab9a root=UUID=f2e88100-8f93-44d9-8f64-245091b33073 ro rhgb quiet selinux=0 init/bin/bash
然后再类似的地方加入selinux=0 init=/bin/bash(如上图)
7.创建目标主机根文件系统
mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}
8.拷贝需要的bash(也可以拷贝你需要的指令)和库文件给新的系统使用
cp /lib64/. /mnt/sysroot/lib64/
cp /bin/bash /mnt/sysroot/bin/
9.现在我们也可以创建一个新的虚拟机,然后将默认分配的磁盘,溢出的,指向我们新建的磁盘即可
shutdown -h now
10.创建一个虚拟机,然后成功
阅读1.0 懂C语言 进程管理 内存管理文件系统 驱动程序网络
内核最新 https://www.kernel.org/查看
可以用wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.8.16.tar.gz
tar -zxvf xxxxx 解压
检查内核版本:
yum info kernel -q
uname -a 查看当前内核的指令
yum update kernel 升级内核
yum list kernel -q查看已经安装的内核
虚拟机可以做快照。 实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统,还会造成数据丢失。 所以我们可以使用备份和恢复技术 linux 的备份和恢复很简单,有两种方式: (1) 把需要的文件(或者分区)用 TAR 打包就行,下次需要恢复的时候,再解压开覆盖即可 (2) 使用 dump 和 restore 命令
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 安装 dump 和 restore
如果 linux 上没有 dump 和 restore 指令,要先安装
yum -y install dump
yum -y install restore
- 使用 dump 完成备份
1.基本介绍: dump 支持分卷和增量备份(所谓增量备份是指备份 上次备份后,修改/增加过的文件,也称差异备份) 2.语法说明: dump [-cu] [-123456789] [-f <备份后文件名>] [-T <日期>] [要备份的目录或文件系统] dump [] -wW 选项说明: -c 创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头。 -0123456789 备份的层级。0 为最完整备份,会备份所有文件。若指定 0 以上的层级,则备份至上一次备份以来修改或新增的文件,到 9 后,可以再次轮替. -f <备份后文件名> 指定备份后文件名 -j 调用 bzlib 库压缩备份文件,也就是将备份后的文件压缩成 bz2 格式,让文件更小 -T <日期> 指定开始备份的时间与日期 -u 备份完毕后,在/etc/dumpdares 中记录备份的文件系统,层级,日期与时间等。 -t 指定文件名,若该文件已存在备份文件中,则列出名称 -W 显示需要备份的文件及其最后一次备份的层级,时间,日期。 -w 与-W 类似,但仅显示需要备份的文件。 进行增量备份/备份层级要加-u,因为-u可以记录层级 3.案例 案例 1:将/boot 分区所有内容备份到/opt/boot.bak0.bz2 文件中,备份层级为“0” dump -0uj -f /opt/boot.bak0.bz2 /boot/ /boot 要备份的分区 案例 2:在/boot 目录下增加新文件,备份层级为“1”(只备份上次使用层次“0”备份后发生过改变的数据), 注意比较看看这次生成的备份文件 boot1.bak 有多大 dump -1uj -f /opt/boot.bak1.bz2 /boot 注意:通过 dump 命令在配合 crontab 可以实现无人值守备份 写一个脚本 4. 显示需要备份的文件及其最后一次备份的层级,时间,日期 dump -W 5.查看备份时间文件 cat /etc/dumpdates 6.dump 备份文件或者目录 前面我们在备份分区时,是可以支持增量备份的, 如果备份文件或者目录,不再支持增量备份, 即只能使用 0 级别备份(-u不能写) 案例:使用 dump 备份 /etc 整个目录 dump -0j -f /opt/etc.bak.bz2 /etc/ #下面这条语句会报错,提示 DUMP: Only level 0 dumps are allowed on a subdirectory dump -1j -f /opt/etc.bak.bz2 /etc/ 注意:如果要备份重要的文件,比如数据区,建议将文件上传到其它服务器保存,不要将鸡蛋放在同一个篮子。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
使用 restore 完成恢复
1.基本介绍: restore 命令用来恢复已备份的文件,可以从 dump 生成的备份文件中恢复原文件 2.基本语法: restore [模式选项] [选项] 模式选项说明:不能混用,在一次命令中,只能指定一种。 -C 使用对比模式,将备份的文件与已存在的文件相互对比,看看是否存在差异 -i 使用交互模式,在进行还原操作时,restore 指令将依序询问用户 -r 进行还原模式 (一般用这个) -t 查看模式,看备份文件有哪些文件 选项 -f <备份设备> 从指定的文件中读取备份数据,进行还原操作 3.案例: 案例 1:restore 命令比较模式,比较备份文件和原文件的区别测试 mv /boot/hello.java /boot/hello100.java restore -C -f boot.bak1.bz2 //注意和 最新的文件比较 mv /boot/hello100.java /boot/hello.java restore -C -f boot.bak1.bz2 案例 2:restore 命令查看模式,看备份文件有哪些数据/文件 restore -t -f boot.bak0.bz2 案例 3:restore 命令还原模式 注意细节:如果你有增量备份,需要把增量备份文件也进行恢复,有几个增量备份文件,就要恢复几个,按顺序来恢复即可。 mkdir /opt/boottmp cd /opt/boottmp restore -r -f /opt/boot.bak0.bz2 //恢复到第 1 次完全备份状态 restore -r -f /opt/boot.bak1.bz2 //恢复到第 2 次增量备份状态 案例 4:restore 命令恢复备份的文件,或者整个目录的文件 基本语法: restore -r -f 备份好的文件 [root@hspedu100 opt]# mkdir etctmp [root@hspedu100 opt]# cd etctmp/ [root@hspedu100 etctmp]# restore -r -f /opt/etc.bak0.bz2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
``Webmin 是功能强大的基于Web 的Unix/linux 系统管理工具。管理员通过浏览器访问Webmin 的各种管理功能并完
成相应的管理操作。除了各版本的linux 以外还可用于:AIX、HPUX、Solaris、Unixware、Irix 和FreeBSD 等系统
下载安装
1.下载地址: http://download.webmin.com/download/yum/ 用下载工具下载即可 2.也可以使用 wget http://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm 3.安装: rpm -ivh webmin-1.700-1.noarch.rpm 4.重置密码/usr/libexec/webmin/changepass.pl /etc/webmin root test root 是webmin 的用户名,不是OS 的, 这里就是把webmin 的root 用户密码改成了test 5.修改webmin 服务的端口号(默认是10000 出于安全目的) vim /etc/webmin/miniserv.conf # 修改端口 将port=10000 修改为其他端口号,如port=6666 > 注意listen=6666 也要修改 6.重启webmin /etc/webmin/restart # 重启 /etc/webmin/start # 启动 /etc/webmin/stop # 停止 7.防火墙放开6666 端口 firewall-cmd --zone=public --add-port=6666/tcp --permanent # 配置防火墙开放6666 端口 firewall-cmd --reload # 更新防火墙配置 firewall-cmd --zone=public --list-ports # 查看已经开放的端口号 >
提示如果6666不行是端口问题,注意避开这些端口,我用5555端口成功 1, // tcpmux 7, // echo 9, // discard 11, // systat 13, // daytime 15, // netstat 17, // qotd 19, // chargen 20, // ftp data 21, // ftp access 22, // ssh 23, // telnet 25, // smtp 37, // time 42, // name 43, // nicname 53, // domain 77, // priv-rjs 79, // finger 87, // ttylink 95, // supdup 101, // hostriame 102, // iso-tsap 103, // gppitnp 104, // acr-nema 109, // pop2 110, // pop3 111, // sunrpc 113, // auth 115, // sftp 117, // uucp-path 119, // nntp 123, // NTP 135, // loc-srv /epmap 139, // netbios 143, // imap2 179, // BGP 389, // ldap 465, // smtp+ssl 512, // print / exec 513, // login 514, // shell 515, // printer 526, // tempo 530, // courier 531, // chat 532, // netnews 540, // uucp 556, // remotefs 563, // nntp+ssl 587, // stmp? 601, // ?? 636, // ldap+ssl 993, // ldap+ssl 995, // pop3+ssl 2049, // nfs 3659, // apple-sasl / PasswordServer 4045, // lockd 6000, // X11 6665, // Alternate IRC 6666, // Alternate IRC 6667, // Standard IRC 6668, // Alternate IRC 6669, // Alternate IRC
比如修改语言设置,IP 访问控制,查看进程, 修改密码, 任务调度,mysql 等.
1.webmin-webmin configue-langage-simplechineseutf-8
刷新之后,全部都是中文
2.改用户名字 系统-change passworlds 然后可以修改各个用户的密码
3.在系统-cron任务调度
4.系统—进程管理器
bt 宝塔Linux 面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA 等
多项服务器管理功能。
安装和使用
cd /opt mkdir bt cd /bt
安装: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
先执行指令1,指令2 ,指令3
完成后拥有
外网面板地址: http://116.169.4.13:8888/8a823580
内网面板地址: http://192.168.8.130:8888/8a823580
username: lwq65vat
password: 66d39a79
安装成功后控制台会显示登录地址,账户密码,复制浏览器打开登录
如果忘记密码 > bt default
1
http://192.168.200.10/index1.html
http://192.168.200.10/index2.html
http://192.168.200.20/index1.html
http://192.168.200.30/index1.html
http://192.168.200.40/index1.html
http://192.168.200.30/order.html
http://192.168.200.10/order.html
cat t.txt | cut -d '/' -f 3 | sort |uniq -c |sort -nr
以/为分割的第三段排序uniq -c 统计 sort -nr排序
统计链接到服务器的各ip情况,按照连接数从大到小排序
netstat -an |grep ESTABLISHED |awk -F " " '{print $5}' |awk -F ":" '{print $1}' | sort | uniq -c | sort -nr
因为是空格用awk " "空格分割取出第五部分
[root@shell38 ~]# systemctl status mysqld
----- 忘记密码了,登录不了MySQL5.7
[root@shell38 ~]# mysql -u root -p
#1step2 进入 /etc/my.cnf 文件 加入一条指令 skip-grant-tables [root@shell38 ~]# vim /etc/my.cnf ... ... datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock pid-file=/var/run/mysqld/mysqld.pid # and the blow to skip password skip-grant-tables ------增加这句话 #step 3 重启 MySQL 服务 ,验证可以用空密码登录 [root@shell38 ~]# systemctl restart mysqld [root@shell38 ~]# mysql -u root -p Enter password: ------此时输入一个空密码就进入mysql 里面了 #step4 用空密码登录后进入 mysql 库 user 表 更改 root 用户的authentication_string 密码值 [root@shell38 ~]# mysql -u root -p Enter password: ------此时输入一个空密码就进入mysql 里面了 mysql> show databases;--------------显示库列表 mysql> use mysql;-------------------进入mysql库 mysql> show tables;--------------------显示mysql库下面的表的个数 mysql> desc user;-------------显示user字段 -------------------------------------倒数第五个authentication_string字段放的是密码 ,更新 root 密码为 root 我的user表格为 authentication_string | text | YES | | NULL mysql> update user set authentication_string=password("mysqlyangpwd") where user='root'; 返回 Query OK, 1 row affected, 1 warning (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 1 mysql> flush privileges; -------------------------刷新权限 Query OK, 0 rows affected (0.00 sec) mysql> exit ----------------------退出
step5 重新进入 /etc/my.cnf 文件 不再跳过密码 [root@shell38 ~]# vim /etc/my.cnf ... # and the blow to skip password # skip-grant-tables ... [root@shell38 ~]# [root@shell38 ~]# systemctl restart mysqld -----重启mysql服务 [root@shell38 ~]# mysql -u root -p ------用root 登录 Enter password: ----------------------输入密码 root mysql> show databases;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
vim meituan.txt
统计ip 访问情况,找出访问页面数前两位的ip
192.168.200.50 index.html
192.168.200.40 index.html
192.168.200.40 index.html
192.168.200.30 index.html
192.168.200.20 index.html
192.168.200.20 index.html
192.168.200.70 index.html
cat access.log | awk -F " " '{print $1}' | sort|uniq -c|sort -nr | head -2
显示头两行
#1.先输入查看是否安装tcpdum
tcpdum
#监听ens33这个设备 主机 端口
#tcpdump -i ens33 host 192.168.8.130 and port 22
#2.追加到上面
tcpdump -i ens33 host 192.168.8.130 and port 22 >> /opt/iw/tecpdump.log
rewrite重写
access模块:来源控制
ssl模块:安全加密
ngx_http_gizp_Moudle 网络传输压缩模块
ngx_http_proxy_Moudle 模块实现代理
ngx_http_upstream_Moudle模块实现定义后端服务器列表
ngx_cache_purge实现缓存清除功能
ls -l 文件的权限含义: r w(编辑不包括删除) x 目录权限含义 r(目录内文件列表的查看ls) w:目录捏文件的增删复制剪切 x:能否进入目录的权限(cd) 权限修改 chmod
- 1
- 2
- 3
- 4
- 5
- 6
- 规则:r=4 w=2 x=1 rwx=4+2+1=7
- chmod u=rwx,g=rx,o=x 文件目录名 等价于
- chmod 751 文件目录名
权限分离:系统和数据库权限要分开
权限最小原则:满足使用情况下最少优先
减少使用root用户:尽量使用普通用户+sudo提权进行日常操作
重要的系统文件,比如/etc/passwd可以用chattr锁定,需要的时候打开
chattr +i /etc/passwd #此时不能添加用户 [root@yangvm01 ~]# which chattr /usr/bin/chattr #可以该文件移动走 [root@yangvm01 ~]# mv /usr/bin/chattr /opt #可以通过find找到这个指令 find / -name chattr /opt/chattr #可以把这个名字改其他 mv /opt/chattr /opt/hh 然后还原之后(逆向) chattr -i /etc/passwd
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
利用工具比如chkrootkit/rootkit hunter来检测rootkit脚本
#1 mkdir /opt/chkrootkit #2下载 wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz #此时无法解析主地址 #可以选择下载地址 http://www.chkrootkit.org/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
#解决(没解决) wget: 无法解析主机地址…解决 网络正常的情况下,查看resolv.conf文件 cd /etc vim resolv.conf 如果配置文件里没有nameserver,那么说明没有配置好DNS。 由于resolv.conf是read-only,因此需要先修改权限: sudo chmod a+w resolv.conf 再修改resolv.conf文件: vim resolv.conf 按i键切换为插入模式,再添加如下代码: nameserver 8.8.8.8 nameserver 8.8.4.4 按Esc键,再按:键,输入wq保存并关闭文件。 再次使用wget语句下载,发现依然报错。 进如 /etc/sysconfig/network-scripts目录 cd /etc/sysconfig/network-scripts 修改目录下对应网卡的配置文件(如ifcfg-ens33)权限: sudo chmod a+w ifcfg-ens33 修改ifcfg-ens33文件: vim ifcfg-ens33 按i键切换为插入模式,再添加如下代码: ONBOOT=yes DNS1=8.8.8.8 DNS2=8.8.4.4 按Esc键,再按:键,输入wq保存并关闭文件。 重启网络: service network restart 切换目录: cd ~ 使用wget语句下载成功!
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
类似的有
wget http://jaist.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz
- 1
- 2
局域网内计算机访问FTP服务器时,提示“无法访问服务器名称或地址”,一般由三个原因造成:
一、防火墙未关闭
解决方法如下:
1、单击屏幕左下角的”开始“菜单
2、在弹出菜单中单击”控制面板“
3、点击”系统和安全“
4、点击”Winsows 防火墙“
5、单击左侧的”打开或关闭Windows防火墙“
6、在”家庭或工作网络位置设置“和”公用网络位置设置“两项里选择关闭防火墙,单击”确定“即可。
二、设置有误,FTP被动模式没有禁止。
解决方法如下:
1、打开浏览器,点击”工具“
2、在下拉菜单中点击”Internet选项“
3、单击”高级“,然后上下拉动滚动条查找”FTP被动模式“选项
4、去掉”使用被动FTP(为防火墙和DSL调制解调器兼容性)“前面的对号,然后单击“确定”即可。
三、FTP服务器设置了权限限制
解决方法如下:
1、在桌面“计算机”图标上单击鼠标右键,在弹出菜单中单击“管理”
2、然后在“本地用户和组”里面添加访问FTP服务器的用户,假设用户为js
3、在FTP服务器的主目录根文件夹上右键,选择“属性”。在“安全标签”下,单击“编辑”,然后选择“添加”,输入刚才添加的用户js单击“确定”
4、选择js,设置该用户的权限
5、打开“授权规则”
6、从右边选择“添加允许规则”,再设置一下js的权限即可。
然后解压启动 ./rootkit
还可利用工具Tripwire
注意第一级别是目录必须要有x,然后看文件确定w和r
删除看目录的权限
第一步:硬件启动阶段 这一步和CentOS6差不多,详细请看CentOS6启动流程(含详细流程图) 第二步:GRUB2引导阶段 从这一步开始,CentOS6和CentOS7的启动流程区别开始展现出来了,CentOS7的主引导程序使用的是grub2。 本步的流程: 1. 先加载两个镜像; 2. 再加载MOD模块文件,把grub2程序加载执行; 3. 接着解析配置文件/boot/grub/grub.cfg,根据配置文件加载内核模块到内存; 4. 之后构建虚拟根文件系统,最后转到内核。 在这里grub.cfg配置文件已经比较复杂了,但并不用担心,到了CentOS7中一般是使用命令进行配置,而不直接去修改配置文件了。不过我们可以看到grub.cfg配置文件开头注释部分说明了由/etc/grub.d/目录下文件和/etc/default/grub文件组成。一般修改好配置后都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,将配置文件重新生成。 第三步、内核引导阶段 这一步与CentOS6也差不多,加载驱动,切换到真正的根文件系统,唯一不同的是执行的初始化程序变成了/usr/lib/systemd/systemd 第四步、systemed初始化阶段(又叫系统初始化阶段) CentOS7中我们的初始化进程变为了systemd。 本步的流程: 1. 执行默认target配置文件/etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关); 2. 然后执行sysinit.target来初始化系统和basic.target来准备操作系统; 3. 接着启动multi-user.target下的本机服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动; 4. 最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动。 注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目录下的graphical.target或multiuser.target。而graphical.target依赖multiuser.target,multiuser.target依赖basic.target,basic.target依赖sysinit.target,所以倒过来执行。 System概述(了解):systemd即为system daemon,是Linux下的一种init软件,开发目标是提供更优秀的框架以表示系统服务间的往来关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell系统开销的效果,最终代替现在常用的System V与BSD风格的init程序。 与多数发行版使用的System V风格的init相比,systemd采用了以下的新技术: A.采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能; B.用Cgroup代替PID来追踪进程,即使是两次fork之后生成的守护进程也不会脱离systemd的控制。 unit对象:unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其他与init相关的信息。(也就是CentOS6中的服务器启动脚本) (1)./etc/systemd/system/default.target 这是一个软链接,和默认运行级别相关 [root@localhost ~]# ll /etc/systemd/system/default.target lrwxrwxrwx. 1 root root 37 11月 4 2019 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target [root@localhost ~]# cd /lib/systemd/system/ [root@localhost system]# ls *.target basic.target graphical.target kexec.target nss-user-lookup.target rescue.target shutdown.target sysinit.target bluetooth.target halt.target local-fs-pre.target paths.target rpcbind.target sigpwr.target system-update.target cryptsetup-pre.target hibernate.target local-fs.target poweroff.target runlevel0.target sleep.target timers.target cryptsetup.target hybrid-sleep.target machines.target printer.target runlevel1.target slices.target time-sync.target default.target initrd-fs.target multi-user.target rdma-hw.target runlevel2.target smartcard.target umount.target emergency.target initrd-root-fs.target network-online.target reboot.target runlevel3.target sockets.target final.target initrd-switch-root.target network-pre.target remote-cryptsetup.target runlevel4.target sound.target getty-pre.target initrd.target network.target remote-fs-pre.target runlevel5.target suspend.target getty.target iprutils.target nss-lookup.target remote-fs.target runlevel6.target swap.target 这里可以看到runlevel开头的target文件,对应着CentOS6的启动级别,不过一样是软链接,指向了同目录下的其他文件,也算一种向下兼容吧 [root@localhost system]# ll runlevel*.target lrwxrwxrwx. 1 root root 15 6月 1 2020 runlevel0.target -> poweroff.target lrwxrwxrwx. 1 root root 13 6月 1 2020 runlevel1.target -> rescue.target lrwxrwxrwx. 1 root root 17 6月 1 2020 runlevel2.target -> multi-user.target lrwxrwxrwx. 1 root root 17 6月 1 2020 runlevel3.target -> multi-user.target lrwxrwxrwx. 1 root root 17 6月 1 2020 runlevel4.target -> multi-user.target lrwxrwxrwx. 1 root root 16 6月 1 2020 runlevel5.target -> graphical.target lrwxrwxrwx. 1 root root 13 6月 1 2020 runlevel6.target -> reboot.target 可以看到我的default.target与runlevel3.target指向的是同一个文件,可以看出我的默认运行级别是3。 (2)./usr/lib/systemd/system/ 这个目录存储每个服务的脚本,类似CentOS6的/etc/init.d/ (3)./run/systemd/system/ 系统执行过程中产生的脚本 (4)./etc/systemd/system/ 类似于CentOS6的/etc/rc.d/rc#.d/SXX类文件的功能,管理员建立的执行脚本,大部分是软链接
netstat/网络状态监控 top//系统运行状态 lsblk/查看硬盘分区
ps -aux查看运行进程 chkconfig/查看服务系统启动状态 systemctl /管理系统服务器
查看内存,io读写, 磁盘存储, 端口占用 进程查看
top iotop先安装yum install iotop df -lh netstat -tunlp ps -aux | grep sshd
张三 40
李四 50
五五 60
cat t2.txt | awk -F " " '{sum+=$2} END {print sum}'
输出150
if [ -f 文件名 ] then echo "存在" else echo "不在" fi
sort -nr t3.txt/倒叙
sort -n t3.txt、正序
sort -nr t3.txt| awk '{sum+=$0} END {print sum}' 输出最后
sort -nr t3.txt| awk '{sum+=$0;print $0} END {print sum}' //每条完成后输出
复习 find /home -name hello.txt
grep -r "cat" /home grep -r "cat" /home | cut -d ":" -f 1 //取出名字
- 1
- 2
ls -al 显示所有
find /home/test -name "*.*" | wc -l
find /home/test -name "*.*" | xargs wc -l
Ngix
Haproxy
Keepalived
LVS
TIME=$(date "+ %Y%m%d%H:%M:%S")
#!/bin/bash
cd /var/spool/
#打包
/bin/tar -zcf /home/mail- `date` .tar.gz mail/
如果脚本 没有执行权限可以***** * * * * /bin/sh /xxxx.sh
1.对Linux的架构优化
2.对linux系统本身的优化
(1)不用root用sudo提示权限
(2)定时的自动更新服务时间:nptdate npt1.aliyun.com让croud定时更新
(3)配置yum源,指向国内镜像
(4)配置合理的防火墙策略打开必要端口,关闭不要的端口
(5)打开最大文件数(调正文件的描述数量 vim /etc/profile ulimit -Shn 655535
(6) 配置合理的监控cl
(7) 对安装的软件进行优化如nginx,apache
(8)配置合理的系统文件的备份策略
(9)内核参数的优化 /etc/sysctl.conf
(10)锁定一些重要的文件 chattr /rtc/passwd
(11) 禁用不必要的服务 setup
状态 :睡眠中,进程ID:2833
解决办法: 1|rm -f /var/run/yum.pid 然后重新运行yun命令即可 1.使用kill命令杀掉 ps aux | grep yum(查询有关yum的进程,找到那个更新进程) kill -s 9 pid (上一步找到pid后直接杀掉) 2.有可能杀不掉 可以通过强制关掉yum的进程 rm -f /var/run/yum.pid 然后你再试试你的yum源就可以使用了! 注:以后更新yum的时候尽量别中断哈,要不就找个最新的yum源文件。 yum install lrzsz.x86_64
xshell中出现中文乱码解决方法
一、问题原因:
1、远程登录的Linux系统服务器编码问题;
2、本地的系统的编码问题;
3、远程服务器和本地系统编码不一致导致。
二、解决方法:
1、Linux系统编码问题,服务器主机一般不能随便修改配置,甚至普通人都没有权限修改配置。一般不推荐!
(1) 执行locale命令查看系统语言,如下图;
(2)设置系统环境变量LANG为zh_CN.UTF-8,export LANG=zh_CN.UTF-8
或者编辑文件:vim /etc/sysconfig/i18n
2、本地的系统的编码问题;
设置为Unicode (UTF-8):File->Properties
点击选择UTF-8
3、远程服务器和本地系统编码不一致导致:
查看远程服务器的编码和本地系统的编码是什么格式,调整一致即可。
要么修改Linux环境变量LANG,要么修改Xshell终端编码。
https://www.cnblogs.com/xisheng/p/14690282.html
level开头的target文件,对应着CentOS6的启动级别,不过一样是软链接,指向了同目录下的其他文件,也算一种向下兼容吧
[root@localhost system]# ll runlevel*.target
lrwxrwxrwx. 1 root root 15 6月 1 2020 runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 6月 1 2020 runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 6月 1 2020 runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 6月 1 2020 runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 6月 1 2020 runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 6月 1 2020 runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 6月 1 2020 runlevel6.target -> reboot.target
可以看到我的default.target与runlevel3.target指向的是同一个文件,可以看出我的默认运行级别是3。
(2)./usr/lib/systemd/system/
这个目录存储每个服务的脚本,类似CentOS6的/etc/init.d/
(3)./run/systemd/system/
系统执行过程中产生的脚本
(4)./etc/systemd/system/
类似于CentOS6的/etc/rc.d/rc#.d/SXX类文件的功能,管理员建立的执行脚本,大部分是软链接
##### P149Linux高级命令
netstat/网络状态监控 top//系统运行状态 lsblk/查看硬盘分区
ps -aux查看运行进程 chkconfig/查看服务系统启动状态 systemctl /管理系统服务器
查看内存,io读写, 磁盘存储, 端口占用 进程查看
top iotop先安装yum install iotop df -lh netstat -tunlp ps -aux | grep sshd
张三 40
李四 50
五五 60
cat t2.txt | awk -F " " ‘{sum+=$2} END {print sum}’
输出150
##### P150写脚本查询一个文件是否存在
if [ -f 文件名 ] then echo “存在” else echo “不在” fi
##### 写脚本对t3.txt中无需的一列数字查询,并且将总和输出
sort -nr t3.txt/倒叙
sort -n t3.txt、正序
sort -nr t3.txt| awk ‘{sum+=$0} END {print sum}’ 输出最后
sort -nr t3.txt| awk ‘{sum+=$0;print $0} END {print sum}’ //每条完成后输出
##### 写出/home下所有的文本文件中包含字符Cat的文件
> 复习 find /home -name hello.txt
>
> ```
> grep -r "cat" /home
> grep -r "cat" /home | cut -d ":" -f 1 //取出名字
> ```
>
> ls -al 显示所有
##### 查询目录下所有的文件的个数,所有文件总行数
find /home/test -name “.” | wc -l
find /home/test -name “.” | xargs wc -l
##### P151了解web服务器负载架构
> Ngix
>
> Haproxy
>
> Keepalived
>
> LVS
###### 每天晚上10:30分 ,打包站点目录/var/spool/mail备份到/home下每次备份都按时间生成生成不同的备份包
TIME=$(date “+ %Y%m%d%H:%M:%S”)
#!/bin/bash
cd /var/spool/
#打包
/bin/tar -zcf /home/mail- date
.tar.gz mail/
> 如果脚本 没有执行权限可以***** * * * * /bin/sh /xxxx.sh ##### 如何优化Linux系统 1.对Linux的架构优化 2.对linux系统本身的优化 (1)不用root用sudo提示权限 (2)定时的自动更新服务时间:nptdate npt1.aliyun.com让croud定时更新 (3)配置yum源,指向国内镜像 (4)配置合理的防火墙策略打开必要端口,关闭不要的端口 (5)打开最大文件数(调正文件的描述数量 vim /etc/profile ulimit -Shn 655535 (6) 配置合理的监控cl (7) 对安装的软件进行优化如nginx,apache (8)配置合理的系统文件的备份策略 (9)内核参数的优化 /etc/sysctl.conf (10)锁定一些重要的文件 chattr /rtc/passwd (11) 禁用不必要的服务 setup # Another app is currently holding the yum lock; waiting for it to exit... ## 另一个应用程序是:PackageKit ## 内存: 31 M RSS (451 MB VSZ) 已启动: Wed Aug 17 09:08:40 2022 - 00:59之前 状态 :睡眠中,进程ID:2833 ```bash 解决办法: 1|rm -f /var/run/yum.pid 然后重新运行yun命令即可 1.使用kill命令杀掉 ps aux | grep yum(查询有关yum的进程,找到那个更新进程) kill -s 9 pid (上一步找到pid后直接杀掉) 2.有可能杀不掉 可以通过强制关掉yum的进程 rm -f /var/run/yum.pid 然后你再试试你的yum源就可以使用了! 注:以后更新yum的时候尽量别中断哈,要不就找个最新的yum源文件。 yum install lrzsz.x86_64
xshell中出现中文乱码解决方法
一、问题原因:
1、远程登录的Linux系统服务器编码问题;
2、本地的系统的编码问题;
3、远程服务器和本地系统编码不一致导致。
二、解决方法:
1、Linux系统编码问题,服务器主机一般不能随便修改配置,甚至普通人都没有权限修改配置。一般不推荐!
(1) 执行locale命令查看系统语言,如下图;
(2)设置系统环境变量LANG为zh_CN.UTF-8,export LANG=zh_CN.UTF-8
或者编辑文件:vim /etc/sysconfig/i18n
2、本地的系统的编码问题;
设置为Unicode (UTF-8):File->Properties
点击选择UTF-8
3、远程服务器和本地系统编码不一致导致:
查看远程服务器的编码和本地系统的编码是什么格式,调整一致即可。
要么修改Linux环境变量LANG,要么修改Xshell终端编码。
https://www.cnblogs.com/xisheng/p/14690282.html
c’s
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。