导读
- CentOS:http://mirrors.163.com/centos/
- root密码:root
- tom密码:tom
安装VMtools步骤
- install vmware tools
- 复制到
/opt
文件夹中 tar -zxvf xx.tar.gz
解压文件- 进入文件解压后的文件夹执行
./vmware-install.pl
目录结构
/bin
- 经常使用的命令
/home
- 存放普通用户的主目录,每个用户都有一个自己的目录
/root
- 该目录为管理员目录
/lost+found
- 这个目录一般都是空的,一般存放非法关机后的文件
/etc
- 存放需要的配置文件,比如mysql数据库 my.conf
/usr
- 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录
/boot
- 存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
/dev
- 类似于windows的设备管理器,把所有的硬件用文件的形式存储
/mnt
- 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上然后进入该目录就可以查看里的内容了
/opt
- 这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下
/media
- linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下
1、Vim快捷键
-
拷贝当前行 【yy】,拷贝多行 【数字+yy】,粘贴 【p】。
-
删除当前行【dd】,删除多行【数字+dd】
-
在文件中查询某个单词【命令行下/关键字,回车查询,输入 n 就是查询下一个】
-
设置文件的行号【: set nu】,取消文件的行号【: set nonu】
-
编辑 /etc/profile文件,使用快捷键到该文件的最末行【G】和最首行【gg】
-
撤回操作【u】
-
编辑 /stc/profile文件,并将光标移动到20行【先输入20 在输入Shift + g】
2、终端命令
关机重启
-
shutdown -h now :立刻关机
-
shutdown -h 1 :“hello,1分钟后会关机”
-
shutdown -r now :立刻重启
注意:如果只输入 “shutdown” 则会默认执行 “shutdown -h 1”
-
halt:立刻关机
-
reboot:重新启动
-
sync:将内存的输入同步到磁盘中
注意:所有的操作都会默认执行sync
用户登录和注销
-
su - 用户名:切换用户(高权限切换到普通用户不需要密码)
注意:权限高切换到低权限用户不需要输入密码,反之需要
-
logout:注销用户
## 在xshell中使用tom登录
tom -> root 【su - root】 切换用户
【logout】 注销用户 root -> tom
再次执行logout 则会退出系统
添加删除用户
方法 | 说明 |
---|---|
useradd | 添加用户 |
userdel | 删除 |
usermod | 修改用户配置 |
grouppadd | 添加组 |
-
useradd milan :添加用户(没有密码)
-
注意:默认该用户的家在/home/milan
-
useradd -d(directory):指定用户目录
-
useradd -g wudang zwj :添加用户并指定组名
注意:没有指定组名的用户,默认分到以自己的小组
-
-
userdel milan:删除用户(保留源文件)
- -r milan:删除用户并将所属目录的文件一并删除
-
passwd milan:设置密码
注意:password 会默认为root用户设置密码,需要指定用户
-
id root:查看用户信息
-
who am i:查看登录者是谁(最开始登录的那个人)
-
groupadd wudang:添加组
-
usermod(mod:modify)
-
usermod -g mojiao zwj :用户更换小组
-
usermod -d 目录名 用户名:修改该用户登录的初始目录
用户需要进入到新目录的权限
-
-
/etc/passwd文件:记录用户的各类信息
-
/etc/shadow文件:口令配置文件
-
/etc/group文件:记录Linux包含的组的信息
-
man ls:ls指令的各类参数
3、运行级别
运行级别说明
- 0:关机
- 1:单用户(找回密码)
- 2:多用户状态没有网络服务
- 3:多用户状态有网络服务 ✔
- 4:系统未使用保留给用户
- 5:图形界面 ✔
- 6:系统重新
设置运行级别
-
在centos7以前,/etc/inittab文件中进行了简化如下:
-
multi-user.target: analogous to runlevel 3 【工作中使用】
-
graphical.target: analogous to runlevel 5 【会占用一定的资源】
-
-
获取当前运行界别级别
- systemctl get-default
-
修改当前运行级别
- systemctl set-default multi-user.target
找回密码
1.Linux 系统开机进入引导画面,在启动 grub 菜单,选择编辑选项启动
2.进入到初始化脚本编辑页面
按 e 键,进入初始化脚本编辑页面(进入 Linux 内核模式进行编辑)。该脚本有两页,用下键向下拉,直到最后两行。找到 ro 位置
3.找到 Linux 16 的那一行,将 ro 改为 rw init=/sysroot/bin/sh
修改后:
4.现在按 Ctrl+x,使用单用户模式启动(进入救援模式)。
5.现在,可以使用 chroot /sysroot 命令访问系统
chroot /sysroot
6.输入 passwd 命令,接下来命令行提示改变 root 密码。#passwd root
7.更新 password 文件会导致 SELinux 安全上下文文件错误。键入以下命令在下次系统引导前重新标记所有文件
touch /.autorelabel
让 SELinux 生效,如果不执行,修改的密码是不会生效的。
8.退出 chroot exit
exit
9.重启你的系统# reboot
至此,密码修改成功,完成最后一步 exit 后会等待时间长一点,然后便会进入启动页面,输入 root 用户的密码后可以成功登陆了。在下面图形中要等候一个时间段(1 分钟),进入图形登录界面。root 用户可以使用新密码了!
4、文件目录类
-
pwd指令:显示当前工作目录的绝对路径
-
ls指令:查看当前路径的文件
-
ls -a:显示当前目录所有文件和目录,包括“隐藏”文件
-
ls -l:以列表得方式显示信息
-
-
cd指令:切换到指定目录
-
cd ~:回到佳目录。比如root 回到 /root;user回到 /user家目录下
-
cd …:回到上级目录
-
-
mkdir指令:创建目录
- mkdir /home/dog:创建单级目录
- mkdir -p /home/animal/cat:创建多级目录
-
touch指令:创建文件
- touch hello.txt
-
rmdir指令:删除目录
-
rmdir /home/dog:删除目录
注意:redir删除的是空母路,如果目录下有内容时无法删除的,则使用以下参数
-
rmdir -rf /home/animal/cat:可删除多级目录
-
-
cp指令:拷贝文件的指定目录
-
-r(recurrence):递归赋值整个文件夹
-
案例1:将/home/hello.txt拷贝到/home/bbb目录下
- cp /home/hello.txt /home/bbb
-
案例2:递归复制整个文件夹,比如将/home/bbb整个目录包括文件,拷贝到/opt目录下
- cp -r /home/bbb /opt(有提示)
-
案例3:强制覆盖不提示方法:
- \cp -r /home/bbb /opt
-
-
rm指令:移除
文件或目录
-
-r:递归删除整个文件夹
-
-f(force):强制删除不提示
-
案例1:将/home/hello.txt删除
- rm /home/hello.txt
-
案例2:递归删除整个文件夹/home/bbb
- rm -rf /home/bbb【删除整个文件夹不提示】
-
注意:强制删除不提示的方法:带上 -f 即可
-
-
mv指令:移动文件或重命名
-
案例1:将/home/cat.txt重命名为pig.txt
- mv /home/cat /home/pig.txt
-
案例2:将/home/pig.txt文件移动到/root目录下
- mv /home/pig.txt /root
-
安利3:移动整个目录,将/opt/bbb整体转移到/home
- mv /opt/bbb /home
-
-
cat指令:查看文件内容
-
-n:显示行号
-
案例1:/etc/profile 查看文件内容,并显示行号
-
使用细节:一般会带上 管道指令 | more
- cat -n /etc/profile | more 【进行交互】
-
-
more指令:基于VI编辑器的文本过滤器
-
空白键:代表向下翻一页
-
enter:代表向下翻一行
-
q:代表立刻离开more
-
ctrl + f:向下滚动一屏
-
ctrl + b:返回上一屏
-
=:输出当前行号
-
:f:输出文件名和当前行号
-
-
less指令:
动态
的查看文本信息(适合大文件的查看)- 空白键:向下翻动一页
- [pagedown]:向下翻动一页
- [pageup]:向上翻动一页
- /字串:n【向下查询】 N【向上查询】
- q:离开 less 这个程序
- 案例:查看文件【祥龙十八章】
- less 祥龙十八章.txt
less 和 more区别
1、less可以按键盘上下方向键显示上下文内容,more不能通过上下方向键控制显示(但是可以用b实现向上翻页,空格键实现向下翻页)
2、less不必读整个文件,加载速度会比more更快
3、less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容
-
“>“指令和”>>”:
-
“>”:重定向
-
“>>”:追加
-
ls -l > a.txt :列表内容写入到文件中,并覆盖a.txt的内容
-
ls -al >> a.txt:列表内容追加到文件中
-
cat a.txt > b.txt:将a的内容覆盖到b的文件
-
echo “内容” >> a.txt:将控制台的内容追加到a文件中
-
案例1:将/home 目录下的文件列表 写入到 /home/info.txt 中,覆盖写入
- ls -l /home > /home/info.txt【如果没有,则会创建】
-
案例2:将当前日历信息追加到/home/mycal.txt 文件中
- cal >> /home/mycal.txt
-
-
tail指令:输出文件中尾部的内容
-
tail 文件:查看文件尾10行的内容
-
tail -n 5 文件:查看文件尾5行内容
-
tail -f 文件:实时追踪文件的所有更新
-
案例1:查看/etc/profile最后5行代码
- tail -n 5 /etc/profile
-
案例2:试试监控mydate.txt
- tail -f /home/mydate.txt
-
-
echo指令:输出内容到控制台
-
案例1:输出环境变量(PATH)
- echo &PATH
-
案例2:输出Hello,world
- echo “Hello,World~”
-
-
head指令:显示文件的开头部分内容
-
head 文件:默认显示前十行
-
head -n 5 文件:显示文件头五行
-
-
ln指令:设置软连接
-
-s 源文件 软连接名
-
案例1:在/home目录下创建一个软连接 myroot,连接到/root
- ln -s /root /home/myroot
-
案例2:删除软连接myroot
- rm /home/myroot
-
-
history指令:查看执行过的指令
-
案例1:显示是所有的指令
- history
-
案例2:显示最近十条指令
- history 10
-
案例3:执行例是编号为5的指令
- !5
-
-
scp指令:进行远程拷贝指令
-
案例:将远程服务器的文件拷贝到本机指定目录
scp root@129.168.66.66:/opt/software/firefall /opt/software
-
5、时间日期指令
date指令
-
案例1:显示当前时间信息
- date
-
案例2:显示当前时间年月日
- date “+%Y-%m-%d”
-
案例3:显示当前时间年月日时分秒
- date “+%Y-%m-%d %H:%M:%S”
-
案例4:设置系统当前时间
- date -s “2020-11-03 20:02:10”
cal指令
-
案例1:显示当前日历
- cal
-
案例2:显示2020日历
- cal 2020
6、搜索查找类
find指令
- find指令:查询某个文件的位置
参数 | 说明 |
---|---|
-name/-iname | 根据文件的名查询/忽略大小写 |
-size | 根据文件的大小查询 |
-user | 根据用户名查询 |
-maxdepth N | 根据目录的深度寻找 |
-type | 根据类型 |
-perm | 根据文件权限查询 |
-
案例1:按照文件名查询/home目录下的hello.txt
- find /home -name hello.txt
- find /home -name he*
-
案例2:按照拥有者:寻找/opt目录下的,用户名为nobody的文件
- find /opt -user nobody
-
案例3:查找这个歌linux系统下大于200M的文件(+n 大于,-n小于,n等于)
- find / -size +200M
-
案例4:找深度为4的文件
- find / -maxdepth 4 -a -name ifconf*
-
案例5:只查询/dev下的设备文件
- find /dev -type b
-
案例6:按权限查询文件
- find . -perm 644 -ls
-
案例7:找到目标文件后删除
- find /tmp -name temp* -delete
-
案例8:找到文件后复制到目标文件夹中
-
find /etc -name ifcfg* -ok cp -rf {} /temp ;
{}:代表找到文件的引用
\:代表结束符
-ok:连接符
-
locate指令
loacate 跟 find 区别:
locate命令与find命令的区别一:locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作(crontab)程序来建立。 即先运行:updatedb(无论在那个目录中均可,可以放在crontab中 )后在
/var/lib/slocate/
下生成 slocate.db 数据库即可快速查找。
-
locate指令:用于查询某个文件的位置,无需遍历整个文件系统,查询速度快
-
案例1:请使用locate指令快速定位 hello.txt 文件所在目录
-
locate hello.txt
注意:在一次执行之前使用update指令创建locate数据库
-
grep指令
-
grep指令:过滤查找
- -n:显示匹配行和行号
- -i:忽略大小写
- -v:反向
-
案例1:请在hello.txt文件中,查询"yes"所在行,并且显示行号
-
第一种写法:cat /home/hello.txt | grep “yes”
-
第二种写法:grep “yes” /home/hello.txt
-
7、压缩和解压类
tar指令
-
tar指令:是打包指令,最后打包后的文件 .tar.gz 的文件
- -c:产生.tar打包文件
- -v:显示详细信息
- -f:指定压缩后的文件名
- -z:打包同时压缩
- -x:解压.tar文件
- -C:指定目录
-
案例1:压缩多个文件,将/home/pig.txt和/home/cat.txt 压缩成 pc.tar.gz
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
-
案例2:将/home的文件夹压缩成myhome.tar.gz
tar -zcvf myhome.tar.gz /home
-
案例3:将 pc.tar,gz 解压到当前目录
tar -zxvf pc.tar.gz
-
案例4:将myhome.tar.gz 压缩到/opt/tmp2目录下
tar -zxvf /home/myhome.tar.gz -C /opt/tmp2
zip/unzip 指令
- zip指令用于压缩文件,unzip用于解压的,这个在
项目打包发布中很有用
- -r(压缩):递归压缩,即压缩目录
- -d(解压):指定解压的目录
- 案例1:将/home下的所有文件/文件夹进行压缩成 myhome.zip
zip -r myhome.zip /home
- 案例2:将myhome.zip 解压到 /opt/tmp 目录下
- mkdir /opt/tmp
- unzip -d /opt/tmp /home/myhome.zip
gzip/gunzip指令
- 案例1:gzip压缩,将/home下的hello.txt文件进行压缩
- gzip /home/hello.txt
- 案例2:gunzip压缩,将/home下的hello.txt.gz文件进行解压缩
- gunzip /home/hello.txt.gz
压缩区别
# | gzip | zip | tar |
---|---|---|---|
文件大小 | 单个文件 | 多文件 | 多文件 |
后缀名 | .gz | .zip | .tar |
压缩率 | 高 | 慢 | 慢 |
文件类型 | 文本文件 | 所有 | 所有 |
- gzip只能压缩单个文件,而tar和zip可以压缩多个文件成一个归档文件。
- gzip压缩出来的文件后缀名为.gz,而tar压缩出来的文件后缀名为.tar,zip压缩出来的文件后缀名为.zip。
- gzip只能压缩文本文件,而tar和zip可以压缩所有类型的文件。
8、文件所有者
修改文件所有者
-
chown 用户名 文件
查看文件的所有者:
1、ls -ahl
2、ll
-
案例1:使用root 创建一个文件apple.txt,然后将其所有者修改成tom
-
① touch apple.txt
-
② chown tom apple.txt
-
修改文件所在组
文件属于创建该文件的用户的组
- tom(属于master组)创建了apple.txt,则apple.txt的组就是master
-
查看文件所在组
- ls -ahl
- ll
-
修改文件所在的组
- chgrp 组名 文件名
-
递归的修改文件及目录下的所有文件
- chgrp -R 组名 文件名
-
案例1:使用root用户创建 orange.txt 看看当前这个文件属于哪个组,然后将这个文件所在组,修改成fruit组
-
groupadd fruit
-
touch orange.txt
-
ls -ahl orange.txt
-
chgrp fruit orange.txt
-
-
案例2:将/home/test目录下所有的文件和目录的所在组都修改成shaolin
-
groupadd shaolin
-
chgrp -R shaolin /home/test
-
权限的基本介绍
-
-rw-r–r–. 1 root root 97 10月 22 20:06 hello.java
-
0-9位说明
-
1、第0位确定文件类型(d,-,l,c,b)
-
d:directory 目录
-
-:普通文件
-
l:link 软链接
-
c:char 字符 鼠标、键盘文件
-
b:block 块文件 硬盘
-
-
2、第1-3位确定所有者拥有该文件的权限, --User
-
3、第4-6位确定所属组拥有该文件的权限,–Group
-
4、第7-9位确定其他用户拥有该文件的权限,–Other
-
-
rwx作用到文件
-
【r】代表可读,可以读取查看
-
【w】代表可写,可以修改
- 注意:但并不代表可以删除文件,删除一个文件的提前条件是该用户对所在目录也同时拥有写的权限
-
【x】代表可执行(execute) 可以被执行
-
-
rwx作用在目录
-
【r】代表可读
-
【w】代表可以写,可以修改,对目录内创建+删除+重命名文件
-
【x】代表可执行(execute)可以进入该目录
-
修改权限
1、修改用户的分组:usermod -g mojiao robber
2、修改文件权限:chmod u=rwx,g=rx,o=x
3、修改文件的所在组:chgrp fruit orange.txt
4、修改文件所有者:chown tom apple.txt
-
chmod修改权限
-
第一种方式
-
u:所有者 g:所在组 o:其他人 a:所有人
-
chmod u=rwx,g=rx,o=x 文件/目录名 :设置文件权限
-
chmod o+w 文件/目录名 :给其他人添加写的权限
-
chmod a-x 文件/目录名: 消除所有人的执行权限
-
-
案例1:给abc文件的所有者读写执行的权限,给所有组读执行权限,给其他组读执行权限。
- chmod u=rwx,g=rx,o=x
-
案例2:给abc文件的所有者除去执行的权限,增加组写的权限
- chmod u-x,g+w abc
-
案例3:给abc文件的所有用户添加读的权限
- chmod a+r abc
-
第二种方式
r=4 w=2 x= 1 rwx=4+2+1=7
-
chomd u=rwx,g=rx,o=x 文件目录名
-
相当于chomd 751文件名
-
-
案例1:将/home/abc.txt文件的权限修改成 rwxr-xr-x, 使用数字的方式实现
- chomd 755 /home/abc.txt
注意:文件中绿色高亮的文件是
可执行文件
最佳实践1-警察抓小偷
-
组:prolice,bandit
-
警察:jack,jerry
-
土匪:xh,sq
-
创建组
- groupadd prolice;groupadd bandit
-
创建用户
-
useradd -g police jack;useradd -g police jerry
-
useradd -g bandit xh;useradd -g bandit xq
-
-
jack创建一个文件,可以自己读写,本组可以读,其他组没有任何权限,
- ①touch abc.txt
- ②chmod 640 abc.txt
-
jack修改该文件,让其他组人可以读,本组人可以读写
- chmod o=r,g=r abc.txt
-
xh 投靠警察,看看是否可以读写
- usermod -g police xh
最佳实践2-西游记
- 建立两个组(神仙(sx),妖怪(yg))
-
groupadd sx
-
groupadd yg
-
建立四个用户(唐僧,悟空,八戒,沙僧)
-
useradd -g sx tx
-
useradd -g yg wk
-
useradd -g yg bj
-
useradd -g sx ss
-
-
设置密码
-
把悟空,八戒放入妖怪,唐僧,沙僧放进神仙
-
用悟空建立一个文件(monkey.txt 该文件输出I am monkey)
- vim monkey.txt
-
给八戒一个可以rw的权限
- chmod 760 monkey.txt
-
八戒修改monkey.txt 加入一句话
-
唐僧 沙僧对该文件没有权限
-
把 沙僧 放入妖怪组
- usermod -g yg sx
-
让沙僧 修改 该文件 monkey 加入一句话
-
对目录的细节讨论
细节:在修改用户的用户组以后记得要重启
- x:表示可以进入到该目录,比如cd
- r:表示可以ls,讲目录的内容显示
- w:表示可以在该目录,删除或者创建文件
9、定时任务调度
概述:
- 任务调度:是指系统在某个时间执行的特定的指令或程序
- 任务调度分类:
- 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
- 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份
crond 跟 at区别
- at单一执行的例行性任务: 单一执行的例行性工作:仅处理执行一次就结束了;
- crond循环执行的例行性任务:每隔一定的周期就需要执行一次。
crond任务调度
-
crond 任务调度
-e 编辑定时任务 -l 查询crontab任务 -r 删除当前用户所有的crontab任务 service crond restart 重启任务调度 - 设置任务调度文件:/etc/crontab
- 设置个人任务调度。执行crontab -e命令
- 接着输入任务到调度文件
- 如:crondtab -e */1 * * * * ls -l /etc/ > /tmp/to.txt
- 意思:每小时的每分钟执行一次
项目 含义 范围 第一个 * 一个小时当中的第几分钟 0-59 第二个 * 一天当中的第几小时 0-23 第三个 * 一个月当中的第几天 1-32 第四个 * 一年当中的第几月 1-12 第五个 * 一周当中的星期几 0-7 -
含义
-
45 22 * * * 命令:每天22:45执行命令
-
0 17 * * 1 命令:每周一再17:00执行命令
-
0 5 1,15 * * 命令:1日和15日的5:00执行命令
-
40 4 * * 1-5 命令:周一至周五的4:40执行命令
-
*/10 4 * * * 命令:每天的4:00,每隔10分钟执行一次命令
-
0 0 1,15 * 1命令:每月的1号和15号,周一00:00都会执行命令,
注意:星期几和几号最好不要同时出现,因为她们定义的都是天。非常容易让管理员混乱
-
-
案例:每个一分钟,就将当前的日期信息,追加到
/temp/mydate
文件中*/1 * * * * date >> /tmp/mydate
-
案例:每隔1分钟,讲档期那的日期和日理都追加到
/home/mycal
文件中- vim /home/my.sh 写入
data >> /home/mycal 和 cal >> /home/mycal
- crontab -e 添加
*/1 * * * * /home/my.sh
- vim /home/my.sh 写入
-
案例:每天凌晨两点将mysql模块testdb,备份到文件中,
1、crontab -e 2、0 2 * * * mysqldump -u root -proot testdb > /home/db.bak
at定时任务
- at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
- 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
- at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
- 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
- ps -ef | grep atd
- at命令格式
- at [选项] [时间]
- 结束命令:Ctrl + D
- at命令选项
选项 | 含义 |
---|---|
-m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-I | atq的别名 |
-d | atrm的别名 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q | 使用指定的队列 |
-f | 从指定文件读入任务而不是从标准输入读入 |
-t | 以时间参数的形式提交要运行的任务 |
-
案例:2天后的下午5点执行 /bin/l /home案例
at 5pm + 2days at> /bin/ls/home
-
案例:atq命令来查看系统中没有执行的工作任务
atq
-
案例:明天17点钟,输出时间到指定文件内 比如 /root/date100.log
at 5pm tomorrow at> date > /root/date100.log
-
案例:2分钟后,输出时间到指定文件内 比如 /root/date200.log
at now + 2 minutes
-
案例:删除已经设置的任务,atrm 编号
atrm 5
10、存储管理
1.基本分区
添加磁盘
- 数据安全
- 主要方面:只用一个分区,若遇到系统需要重装或者分区需要进行格式化等,原有的重要文件无法在本硬盘保留,而若提前进行了合理分区,则用户数据不会收到影响
- 次要方面,同等外部条件下,读取越频繁,磁盘越容易受损,我们把读写频繁的目录挂载到一个单独的分区,可以把磁盘的损伤控制在一个集中的区域。
- 效率:当有数据要读取自该分区时, 硬盘只会搜寻相应区段,有助于数据读取的速度与效能的提升!
- 注意:最多分为四个分区
-
查看所有设备的挂在的情况
- lsblk 或者 lsblk -f
[root@Centors01 home]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda【分区情况】 8:0 0 20G 0 disk
├─sda1 8:1 0 976M 0 part /boot
└─sda2 8:2 0 17.8G 0 part
├─centos-root 253:0 0 15.9G 0 lvm /
└─centos-swap 253:1 0 1.9G 0 lvm [SWAP]
sr0 11:0 1 4.4G 0 rom /run/media/root/CentOS 7 x86_64
-
例如:毛坯房的建造:隔间 -> 放家具/打造格子柜 -> 加个门/目录
-
添加硬盘步骤一(添加硬盘)
-
通过虚拟机手动添加硬盘
-
reboot:重启
-
-
添加硬盘步骤二(添加分区)
-
fdisk /dev/sdb
[root@Robber2000 ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0x2eca6da6 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1):1 起始 扇区 (2048-10485759,默认为 2048):+2G Last 扇区, +扇区 or +size{K,M,G} (4194304-10485759,默认为 10485759): 将使用默认值 10485759 分区 1 已设置为 Linux 类型,大小设为 3 GiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@Robber2000 ~]# 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 19G 0 part ├─centos-root 253:0 0 17G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 5G 0 disk └─sdb1 8:17 0 3G 0 part sr0 11:0 1 4.3G 0 rom /run/media/Robber/CentOS 7 x86_64 [root@Robber2000 ~]# partprobe /dev/sdb
-
-
添加硬盘步骤三(初始化)
- mkfs.ext4 /dev/sdb1
- make:创建
- file:文件
- system:系统
- extend4:拓展
- mkfs.ext4 /dev/sdb1
-
添加硬盘步骤四(挂载mount)
-
创建挂载文件
- mkdir /mymout.txt
-
将分区挂载到目录文件newdish
- mount -t ext4 /dev/sdb1 /mnt/disk1
-
卸载挂载分区
- umout /dec/sdb1
-
-
添加磁盘步骤五(刷新磁盘)
- partprobe /dev/sdb
注意:用命令行挂载,重启后失效
-
解决方法
- 永久挂载:通过修改/etc/fstab文件实现挂载
逻辑分区
需要删除第四块主分区,将其扩展为分区
命令(输入 m 获取帮助):d //输入d删除分区
分区号 (1-4,默认 4):4 //选择删除4号分区
分区 4 已删除
命令(输入 m 获取帮助):n //现在可以创建分区了
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): e //选择创建扩展分区
已选择分区 4 //自动选择最后4号分区
起始 扇区 (5015552-10485759,默认为 5015552):
将使用默认值 5015552
//直接回车表示将剩余所有空间分给扩展分区
Last 扇区, +扇区 or +size{K,M,G} (5015552-10485759,默认为 10485759):
将使用默认值 10485759
分区 4 已设置为 Extended 类型,大小设为 2.6 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x6928af85
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 4605951 204800 83 Linux
/dev/sdb3 4605952 5015551 204800 83 Linux
/dev/sdb4 5015552 10485759 2735104 5 Extended
磁盘情况查询
-
查询系统整体磁盘使用情况
df -hT
- d:disk(磁盘);
- f:free(磁盘空间);
- h:人性化显示单位;
- T:类型
-
查看指定目录的磁盘占用情况
du -h
-
查看指定目录的磁盘占用情况,默认当当前目录
-
-s 指定目录占用大小汇总
-
-h 带计量单位
-
-a 含文件
-
–max-depth=1 子目录深度
-
-c 列出明细的同时,增加汇总值
-
磁盘情况-工作实用指令
-
统计/opt文件文件个数
ls -l /opt | grep "^-" | wc -l
-
统计/opt 文件夹下的个数
ls -l /opt | grep "^d" | wc -l
-
统计/opt 文件夹下为念的个数,包括子文件夹
ls -lR /opt |grep "^d" | wc -l
-
统计/opt文件夹下目录的个数,包括子文件夹里的
ls -lR /opt | grep "^d" | wc -l
-
以树状图显示目录结构
-
yun install tree 安装
-
tree /opt
-
2.逻辑卷 LVM
特点:随意扩张大小(卷组中的内存不够时,可以购买硬盘加入到物理卷,加入卷组,不需要分区可以直接加内存)
创建LVM
-
术语
- PV:物理卷(Physical volume)
- VG:卷组(Volume Group)
- LV:逻辑卷(Logincal Volume)
-
LVM操作步骤
-
变成物理卷
pvcreate /dev/sdc
-
添加卷组
vgcreate vg1 /dev/sdc
-
加入卷组(分区)
lvcreate -L 200M -n lv1 vg1 指定大小单位M,G 创建逻辑卷 -L大小 -n卷名 vg1组名
-
格式化
mkfs.ext4 /dev/vg1/lv1
-
挂载
mount /dev/vg1/lv1 /mnt/lv1
-
查看pv
pvs
-
VG 管理
- 环境:/dev/vg1 容量由5G扩容到10G
-
创建PV,然后使用第二部,将PV增加到VG中
pvcreate /dev/sdd1
-
扩容VG,同时包括方法1
vgextend vg1 /dev/sdd1
-
查看VG状态:
vgs
LV 扩容
-
查看vg空间
vgs
-
扩容LV
lvextend -L +200M /dev/vg1/lv1
-
调整文件系统的大小
resize2fs /dev/vg1/lv1
-
查看文件系统
df -hT
3.交换区 Swap
操作步骤:
- 准备分区
- 划分分区后,讲类型设置为8e(按t)
- fdisk /dev/sde
- partprobe /dev/sde
- 格式化
mkswap /dev/sde1
- 激活设备
swapon /dev/sde1
- 验证
free -m
4.RAID
①为什么要用raid?
硬盘是个很脆弱的东西,它经常会坏掉。所以,为了保证服务器可靠耐用,硬盘必须一直保持可用。所以有了RAID这个东西。它可以组合成多种形式变成一个硬盘组(逻辑硬盘),多块盘放在一起可以有冗余(备份),从而提供比单个硬盘更高的存储性能和提供数据备份技术
②什么情况下用?
RAID 分为不同的等级,各个不同的等级均在数据可靠性及读写性能上做了不同的权衡。在实际应用中,可以依据自己的实际需求选择不同的 RAID 方案
-
RAID 0:
- 等量模式,性能最佳,不安全。
- 性能最佳:多块磁盘读取可以并行执行,越多块磁盘组成的RAID 0性能越好
- 不安全:只要有一块磁盘损坏,所有数据都会遗失无法读取。
- 等量模式,性能最佳,不安全。
-
RAID 1:
- 即镜像模式,安全性高(数据备份),性能差。
- 安全性高:同一份数据,完整的保存在2块磁盘上。
- 性能差:也需要相同磁盘容量,不同容量将会以小的容量为主。
- 即镜像模式,安全性高(数据备份),性能差。
-
RAID 5:
- 均衡模式。
- 至少三块磁盘
- 每次将数据(N-1)份分别存入各个磁盘中,产生奇偶校验值存入到【-1】的那块磁盘中
- 利用率(n - 1)/ n
- 支持1块磁盘损坏的情况下,保证数据的正常存储。
- 热备盘:不存放数据,当数据盘损坏时可以直接替代。
-
RAID 6:
- 特点:安全可靠
- 安全:会产生2种不同算法的奇偶校验值。
- 可靠:需要4块以上,但是允许出错的磁盘变为了2块
- 代价:损失两块硬盘的控件
- 特点:安全可靠
-
Raid1+0(最少4块):
- 是RAID1和RAID0的结合,先做镜像(1),再做条带(0),
- 兼顾了raid1的容错能力与raid0的条带化读写数据的优点,性能好、可靠性高。属于混合型RAID。
RAID1+0两边的RAID1中可以同时各坏一块硬盘,但不能同时坏掉单边的两个硬盘。
③应用场景
单台服务器:很重要盘不多,系统盘,RAID1
数据库服务器:主库:RAID10 从库 RAID5\RAID0(为了维护成本,RAID10)
WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
有多台,监控、应用服务器,RAID0 RAID5
我们会根据数据的存储和访问的需求,去匹配对应的RAID级别
- 实验
- 准备四块磁盘
- 创建RAID
- 格式化,挂碍
- 查看raid信息
mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{b,c,d,e}
为什么我四块磁盘结果只有2G能用呢?
- 有两块磁盘做数据,一块磁盘做校验,最后一快磁盘做热备份
11、网络环境配置
网络三种连接
- 桥接模式: 桥接模式下默认是可以访问互联网,并且需要注意的是桥接网络的虚拟机ip地址和物理真机在一个网段里,在桥接模式下,虚拟机和真实主机地位都一样。
- 优点:在桥接模式下,所有的虚拟机、真实主机之间都可以互相通信 。
- 缺点:因为虚拟机也需要占用主机下的同一个网段的ip,因此容易出现冲突,且当主机切换网络之后,虚拟机的ip也会随时发生变化。
- Nat模式:虚拟机通过VMware8这块网卡和你的本机进行通讯,虚拟机访问主机所在的同一个局域网内的其他真实主机时,需要经过VMware8网卡转换地址才能通信,反过来,其他真实主机不能访问该虚拟机。除此之外,同一个VMware8网卡虚拟出来的虚拟机因为在同一个网段因此可以互相通信。
- 仅主机模式:虚拟机通过VMware1网卡和你的本机进行通讯,虚拟机不会占用一个ip地址,只能和你的本机进行通讯。
静态网络
放置随机分配ip导致无法做服务器
-
配置静态ip地址
-
编辑vi /etc/sysconfig/netword-scripts/ifcfg-ens33
-
输入参数
-
#系统启动的时候网络接口是否有些 ONBOOT=yes
-
#ip的配置方法 BOOTPROTO=static
-
#IP地址 IPADDR=192.168.200.130
-
#网关 GATEWAY = 192.168.200.2
-
#域名解析器 DNS1 = 192.168.200.2
-
-
重启系统 reboot
-
设置主机名和hosts映射
为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名
-
设置主机名
-
查看主机名:hostname
-
修改文件 /etc/hostname 指定
-
修改后重启
-
-
设置host映射(用来记录ip和hostname的映射关系的文件)
-
window
-
C:\Windos\System32\drivers\etc\hosts
-
192.168.200.130 psk
-
-
linux
-
在/etc/hosts文件修改
-
192.168.200.1 ThinkPad
-
-
12、显示系统的进程
- 在LINUX中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号).
ps 查看进程
<img src=“D:\01_Software\03-markdownImages\image-20230403203711284.png” alt=“image-20230403203711284” style=“zoom:50%;” /
-
ps指令:用来查看当前系统中的进程
- ps -a :显示当前终端的所有进程信息
- ps -u:以用户的格式显示进程信息
- ps -x:显示后台进程运行的参数
-
指令说明
-
user:用户名称
-
pid:进程号
-
ppid:父进程
-
cpu:进程占用cpu的百分比
-
mem:进程占用物理内内存的百分比
-
vsz:进程占用的虚拟内存大小
-
rss:进程占用物理内存大小
-
TT:终端名称,缩写
-
stat:进程状态
- S:休眠
- s:进程是会话的先到进程
- N:进程拥有比普通优先级更低的优先级
- R:正在云习性
- D:短期等待
- Z:僵死进程
- T:被更重
-
time:进程使用时间
-
command:启动进程所用的命令
-
started:进程的启动时间
-
-
查看父进程
删除父进程,子进程也会被杀死
-
ps -ef是以全格式显示当前所有的进程
-
-e 显示所有进程 -f全格式
-
ps -ef | grep xxx
-
终止进程
kill:通过进程号杀死进程
killall:可以支持通配符,系统因负载过大边得很慢就很有用
-
kill 【选项】进程号
-
killall 进程名称
-
常用选项
- -9:表示强迫进程立即停止
-
案例1:踢掉某个非法登录用户
- ps -ef | grep sshd
- kill 进程号
-
案例2:终止远程登录服务sshd,再重启sshd服务
-
kill sshd对应的进程号;
-
/bin/systemctl start
-
-
案例3:终止多个进程
- killall gedit
-
案例4:强制杀死一个终端
- kill -9 进程号
kill -9 和kill的区别
1.kill命令默认的信号就是15,也就是 kill -15 ,被称为优雅的退出。
当使用kill -15时,系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该信号后,具体要如何处理由程序自己来决定。
应用程序的选择有三种:
a. 立即停止程序
b. 释放响应资源后停止程序
c. 忽略该信号,继续执行程序
如果在准备工作进行过程中,遇到阻塞或者其他问题导致无法成功,SIGTERM(15)的信号是可以被阻塞和忽略的。2.kill -9
我们在处理java项目或程序时经常会遇到kill不掉或几十秒后才退出的情况,换做我能给他等会儿,换做同事侨总的暴脾气就忍不了了,每次都直接kill -9。
所以,相比于kill命令,kill -9在执行时,应用程序是没有时间进行准备工作的,立即杀掉程序,所以这通常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态等
进程树
pstree可以更加直观的查看进程信息
-
常用选项
- -p:显示进程的PID
- -u:显示进程的所属用户
-
案例
-
请用树状的形式显示进程信息
pstree -p
-
请用树状的形式进程的用户id
pstree -u
-
jobs 查看后台运行程序
jobs
命令主要用于显示系统中的任务列表及其运行状态。
命令参数 | 参数含义 |
---|---|
-l | 显示作业列表时包括进程号 |
-n | 显示上次使用 jobs 命令后状态发生变化的作业 |
-p | 仅显示作业对应的进程号 |
-r | 仅显示运行中的作业 |
-s | 仅显示已暂停的作业 |
13、服务管理
概述:访问某端口,本质是访问监听该端口的系统服务(守护进程)
-
service指令
- service 服务名 [start | stop | restart | reload | status]
- 很多服务不在使用service,而是使用systemctl
- 查看service指令管理的服务在
ls -l /etc/init.d
查看
-
chkconfig指令(可以给服务在运行级别中默认开启还是关闭)
-
查看服务:chkconfig --list | grep network:
-
chkconfig network --list
-
设置启动状态:chconfig --level 5 服务名 on/off
-
案例:对network服务进行各种操作
- chkconfig --level 3 network off
- chkconfig --level 3 network on
注意:chkconfig重新设置服务后自启动或关闭,需要重启机器reboot生效
-
-
systemctl管理指令
注意:
- 关闭或者启动防火墙后,立即生效
- 这种开启只是临时生效
- 要永远生效则使用systemctl enable/disable 服务名
-
systemctl指令管理的服务在
/usr/lib/systemd/system
查看 -
查看服务开机启动状态:systemctl list-unit-files | grep 服务名
-
设置服务开机启动:systemctl enable 服务名
-
关闭服务开机启动:systemctl disable 服务名
-
查询某个服务是否自启动:systemctl is-enabled 服务名
-
案例:查看防火墙状态,关闭防火墙和重启防火墙
1、systemctl status firewalld 2、systemctl stop firewalld // 临时关闭 3、systemctl start firewalld // 临时开启
-
firewall指令:
- 查看端口:netstat -tnlp
- 打开端口:
firewall-cmd --permanent --add-port=端口号/协议
- 关闭端口:
firewall-cmd --permanent --remove-port=端口号/新协议
- 重新载入,才能生效:
firewall-cmd --reload
- 端口是否开放:
firewall-cmd --query-port=端口/协议
- 案例:启动防火墙,测试111端口是否telnet,开放111端口,再次关闭111端口
firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --reload
firewall-cmd --permanent --remove-port=111/tcp
14、动态监控
概述:top与ps指令相似,他们都用来显示正在执行的进程,top与ps最大的不同指出,在于top在执行一段时间可以跟新正在运行的进程
-
top指令
选项 功能 -d秒数 指定top指令默认三秒更新一次 -i 使top不显示任何限制或者僵死进程 -p 通过指定监控进程ID来仅仅监控某个进程的状态 -
交互操作
操作 功能 P 以cpu占用率排序(默认) M 以内存的使用率排序 N 以pid排序 q 退出top u 监控指定用户 k 终止指定的进程 -
案例:监控tom用户
top:查看执行进程 u:输入用户名即可
-
案例:结束tom登录
top:输入指令回车 k:然后输入此指令,按回车,查看执行的进程
-
案例指定系统状态更新时间
top -d 10
监控网络状态
-
netstat
选项 说明 -an 按一定顺序排列输出 -p 显示哪个进城在调用 -
案例:查看服务名为 sshd 的服务的信息
netstat -anp | grep sshd
15、安装软件
安装JDK
-
安装步骤
-
mkdir /opt/jdk
-
通过xftp6上传到/opt/jdk下
-
cd /opt/jdk
-
tar -zxvf jdk-8u261-linux-x64.tar.gz
-
mkdir /usr/local/java
-
mv /opt/jdk/jdk1.8.0_261 /usr/local/java
-
配置环境变量文件 vim /etc/profile
-
export JAVA_HOME=/usr/local/java/jdk1.8.0_261
-
export PATH=%JAVA_HOME/bin:$PATH
-
source /etc/profile刷新环境变量
-
安装Tomcat
-
安装步骤
-
mkdir /opt/tomcat
-
通过xftp6上传文件
-
tar -zxvf apache-tomcat-8.5.59.tar.gz 解压文件
-
cd apache-tomcat-8.5.59/bin
-
./startup.sh
-
-
打开防火墙
-
firewall-cmd --permanent --add-port=8080/tcp
-
firewall-cmd --reload
-
firewall-cmd --query-port=8080/tcp
-
16、包管理工具
rpm包的管理
-
查询所安装的所有rpm软件包:
rpm -qa
-
rpm -qa | more:分页
-
rpm -qa | grep X
-
-
查询软件包是否安装:
rpm -q fixfox
-
案例:rpm -q firefox
-
rpm -qi 软件包:查询软件包的信息(query info)
-
案例:rpm -qi firefox
-
-
rpm -ql 软件包:查询软件包中的文件(生成的文件)
- 案例:rpm -ql firefox
-
查询文件所属的软件:
rpm -qf 文件全路劲名
-
rpm -qf /etc/passwd
-
rpm -qf /root/install.log
-
-
卸载rpm包:
-
rpm -e RPM包的名称
-
案例:删除firefox 软件包
-
rpm -e firefox
-
强制删除:rpm -e --nodeps foo
-
-
安装rpm包:
在哪里找需要下载软件的rpm包:在桌面的centos 7里面的packages里面就有rpm包
-
rpm -ivh RPM包全路径名称
-
i=install 安装
-
v=verbose 提示
-
h=hash 进度条
-
yum
概述:yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的而服务器自动下载RPM包并且安装。
-
yum基本指令
- yum list | grep xx:软件列表
-
安装指定的yum包
- yum install xxx 下载安装
-
案例:请使用yum的方式安装firefox
- rpm -e firefox
- yum list | grep firefox
- yum install firefox
yum跟rpm区别
-
rpm 只能安装已经下载到本地机器上的rpm 包,yum能在线下载并安装rpm包。
-
rpm适用于所有环境,而yum要搭建本地yum源才可以使用!
-
yum是上层管理工具,rpm是底层管理工具。
yum命令:在安装软件时如果碰到了依赖性的问题,yum会去主动尝试解决依赖性,如果解决不了才会反馈给用户。
rpm命令:一旦遇到了依赖性的问题不会去解决依赖性,而是直接反馈给用户,让用户自行解决。
18、Shell脚本
脚本执行方式
-
脚本格式要求
- 脚本要以
#!/bin/bash
开头 - 脚本需要有可执行权限
- 脚本要以
-
编写第一个脚本
-
#!/bin/bash echo "hello,world~"
-
-
常用执行方式
-
输入脚本的绝对路径
1、chmod u+x hello.sh 2、/root/shcode/hello.sh
-
sh+脚本
sh hello.sh
-
Shell变量
注意:
-
基本语法
- 定义变量:
变量名=值
(注意不能空格) - 删除变量:
unset 变量
- 静态变量:
readonly 变量
(不能删除)
- 定义变量:
-
快速入门
-
案例:定义变量A
A=123 echo $A
-
案例:删除变量A
unset A
-
案例:声明静态变量B=2,不能unset
readonly B=2 echo "B=$B"
-
环境变量
-
基本语法
- 将shell变量输出为环境变量/全局变量:
export 变量名=变量值
- 让修改后的配置文件立即生效:
source 配置文件
- 查看环境变量:
echo $变量名
- 将shell变量输出为环境变量/全局变量:
-
快速入门
-
在
/etc/profile
文件中定义 TOMCAT_HOME 环境变量export TOMCAT_HOME=/opt/tomcat
-
查看环境变量TOME_HOME的值
echo $TOMCAT_HOME
-
另外一个shell程序中使用 TOMCAT_HOME
echo "tomcat_home=$TOMCAT_HOME"
-
多行注释
<<! 内容 !
-
位置参数变量
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如: ./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息类似于实参
-
基本语法
-
$n:
$1-$9代表第一个到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10}
-
$*:把所有参数看成一个整体
-
@ :这个变量也可以代表命令行中所有参数,不过 @:这个变量也可以代表命令行中所有参数,不过 @:这个变量也可以代表命令行中所有参数,不过@把每个参数区别对待
-
$#:参数个数
-
案例:编写一个position.sh
#!/bin/bash echo "0=$0 1=$1 2=$2" echo "所有的参数=$*" echo "$@" echo "参数的个数=$#" 执行 ./position.sh 100 200
-
预定义变量
- 基本语法
- $$:当前进程的进程号
- $!:后台运行的最后一个进程的进程号
- $?:
- 功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行
如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
运算符
-
基本语法
-
“ ( ( 运算式 ) ) " 或 " ((运算式))"或" ((运算式))"或"[运算式]” 或者 expr m + n
-
注意expr运算符间要有空格,如果希望将 expr 的结果赋给某个变量,使用``
-
expr m - n
-
expr \*,/,% 乘,除,取余
-
案例1 : 计算(2+3)X4的值
# 第一种方式 res1=(((2+3)*4)) # 第二种方式 res2=$[(3+4)*4] # 第三种 temp=`expr 2 + 3` res3=`expr $temp \* 4`
-
案例2 : 请求出命令行的两个参数[整数]的和
sum=$[$1+$2] echo "sum=$sum"
-
条件判断
-
基本语法
- [codition](注意condition前后有空格)
- 非空返回true,可以用$?验证(0为true,1>false)
-
快速入门
-
案例:“ok” 是否等于 “ok”
if [ "ok" = "ok" ] then echo "等于" fi
-
案例:23是否大于等于22
if [ 23 -ge 22 ] then echo "大于" fi
-
案例:/root/shcode/aaa.txt 文件是否存在
if [ -f /root/shcode/aaa.txt ] then echo "存在" fi
-
-
常用判断条件
- = 字符串比较
- 两个整数比较
- -lt 小于 less than
- -le 小于等于
- -eq 等于
- -gt 大于
- -ge 大于等于
- -ne 不等于
- 按照文件权限进行判断
- -r 有读的权限
- -w 有写的权限
- -x 有执行的权限
- 按照文件类型进行判断
- -f 文件存在并且是一个常规的文件
- -e 文件存在
- -d 文件存在并且是一个目录
流程控制
if 语句
注意:中括号和条件判断式之间必须有空格
-
基本语法
if [ 条件判断式 ] then 代码 elif [ 条件判断式 ] then 代码 fi
-
案例:如果输入参数,大于等于60输出及格
if [ $1 -ge 60 ] then echo "及格了" elif [$1 -lt 60 ] then echo "不及格" fi
case 语句
-
案例:当命令行参数是1 时,输出“周一”,是2 时,就输出”周二”,其它情况输出other"
case $1 in "1") echo "周一" "2") echo "周二" ;; *) echo "ohter..." ;; esac
for 循环
-
案例:打印命令行输入的参数
# $* 当作一个整体 for i in "$*" do echo "num is $i" done # $@ for i in "$@" do echo "num is $i" done
-
案例:语法二
for (( i=1; i<=100; i++ )) do sum=$[$sum+$i] done
while 循环
-
案例:统计1+…+n的数值是多少
sum=0 i=0 while [ $i -le $1 ] do sum=$[$sum+&i] i=$[$i+1] done
read读取控制台输入
-
read(选项)(参数)
-
-p:指定读取值时的提示符
-
-t:指定读取值时等待的时间,如果没有在指定的时间内输入,就不再等待
-
案例:读取控制台输入的NUM1值
read -p "请输入一个数值" NUM1
-
案例:读取控制台输入的NUM2值,在10秒内输入
read -t 10 -p "请输入一个数值,10秒后结束" NUM2
-
函数
-
basename [pathname]【suffix】:获取文件名
-
案例:返回
/home/aaa/test.txt
的"test.txt"部分basename /home/aaa/test.txt //输出:test.txt
-
-
dirname 【pathname】:获取文件路劲
-
案例:返回
/home/aaa/test.txt
的/home/aaa
部分dirname /home/aaa/test.txt
-
-
自定义函数
-
计算输入两个参数的和
function getSum(){ sum=$[$n1+$n2] echo "和是=$sum" } read -p "请输入一个数字n1=" n1 read -p "请输入一个数字n2=" n2 getSum $n1 $n2
-
综合案例
-
每天凌晨 2:30 备份 数据库 hspedu 到 /data/backup/db
30 2 * * *
-
备份开始和备份结束能够给出相应的提示信息
-
备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如 :2021-03.12 230201.tar.gz
-
在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除
19、日志管理
- 通常日志文件都是在
/var/log
目录下的
日志文件 | 说明 |
---|---|
/var/log/boot.log | 系统启动日志 |
/var/log/cron | 记录与系统定时任务的日志 |
/var/log/lasllog | 记录系统中所有用户最后一次登录时间的日志 |
/var/log/mailog | 记录邮件信息的文件 |
/var/log/message | 记录系统重要信息的日志如:系统出现问题 |
/var/log/secure | 记录验证和授权方面的信息,如:ssh登录、su切换、sudo授权,添加用户和修改用户密码 |
/var/tun/ulmp | 记录当前已经登录的用户信息,可以使用【w、who、users】命令查看 |
日志管理服务 rsyslogd
- 原理图
-
查看 rsyslogd 是否启动
ps aux | grep "rsyslog" | grep -v "grep"
-v:是不匹配输入的关键字
-
查询 rsyslogd 服务的自启动状态
systemctl list-until-files | grep rsyslog
日志轮替
作用:要是一年的日志有必要保存吗,显然是没有必要的对吧
基本介绍:日志轮替九十八旧的日志文件移动并改名,同时建立心得空日志文件,当旧日志文件超出保存得范围后就会进行删除
-
centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过 /etc/logrotate.conf 配置文件中“dateext”参数
-
如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如 “secure20201010”。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。
-
如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。当第一次进行日志轮替时当前的ecure”日志会自动改名为日志,用来保新的日志。当第二次公后新secure进行日志轮替时,会自动改名为当前的“secure日志会自动改名为secure.1secure.2”用来保存新的日志,以此类推。secure.1然后也会新建secure”日志
-
logrotate 配置文件
/etc/logrotate.conf 全局配置文件
# see "man logrotate" for details # 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 # RPM软件包将日志轮换信息放入此目录 include /etc/logrotate.d # no packages own wtmp and btmp -- we'll rotate them here # 没有包拥有wtmp和btmp——我们将在这里轮换它们 /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }
把自己的日志加入日志轮替
-
第一种:直接在
/etc/logrotate.conf
配置文件中写入该日志的论轮替策略 -
第二种:在目录
/etc/logrotate.d
目录中新建该日志的轮替文件robber.log
-
文件内容
/var/log/robber.log { missingok daily copytruncate rotate 7 notifempty }
日志轮替机制原理
日志轮替之所以可以在指定的时间备份日志,是依赖于系统定时任务,在/etc/cron.daily/目录,就会这个目录中是有 logrotate 可执行文件,logrotate通过这个我呢见依赖定时任务执行的
内存日志
- journalctl:可以查看内存日志,这里看看常用的指令
- -n 3 #查看最新3条
- –since 19:00 --until 19:10:10 # 查看期间的日志
- -p err #报错日志
- -o verbose #日志详细内容
- _PID=12345 _COMM=sshd #查看包括这些参数的日志
- 注意:journalctl 查看的内存日志,重启清空