Liunx管理员

导读

  • CentOS:http://mirrors.163.com/centos/
  • root密码:root
  • tom密码:tom

安装VMtools步骤

  1. install vmware tools
  2. 复制到 /opt 文件夹中
  3. tar -zxvf xx.tar.gz 解压文件
  4. 进入文件解压后的文件夹执行 ./vmware-install.pl

目录结构

  1. /bin
    • 经常使用的命令
  2. /home
    • 存放普通用户的主目录,每个用户都有一个自己的目录
  3. /root
    • 该目录为管理员目录
  4. /lost+found
    • 这个目录一般都是空的,一般存放非法关机后的文件
  5. /etc
    • 存放需要的配置文件,比如mysql数据库 my.conf
  6. /usr
    • 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录
  7. /boot
    • 存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
  8. /dev
    • 类似于windows的设备管理器,把所有的硬件用文件的形式存储
  9. /mnt
    • 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上然后进入该目录就可以查看里的内容了
  10. /opt
    • 这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下
  11. /media
    • linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下

1、Vim快捷键

  1. 拷贝当前行 【yy】,拷贝多行 【数字+yy】,粘贴 【p】。

  2. 删除当前行【dd】,删除多行【数字+dd】

  3. 在文件中查询某个单词【命令行下/关键字,回车查询,输入 n 就是查询下一个】

  4. 设置文件的行号【: set nu】,取消文件的行号【: set nonu】

  5. 编辑 /etc/profile文件,使用快捷键到该文件的最末行【G】和最首行【gg】

  6. 撤回操作【u】

  7. 编辑 /stc/profile文件,并将光标移动到20行【先输入20 在输入Shift + g】

2、终端命令

关机重启

  1. shutdown -h now :立刻关机

  2. shutdown -h 1 :“hello,1分钟后会关机”

  3. shutdown -r now :立刻重启

注意:如果只输入 “shutdown” 则会默认执行 “shutdown -h 1”

  1. halt:立刻关机

  2. reboot:重新启动

  3. sync:将内存的输入同步到磁盘中

注意:所有的操作都会默认执行sync

用户登录和注销

  1. su - 用户名:切换用户(高权限切换到普通用户不需要密码)

    注意:权限高切换到低权限用户不需要输入密码,反之需要

  2. 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

压缩区别

#gzipziptar
文件大小单个文件多文件多文件
后缀名.gz.zip.tar
压缩率
文件类型文本文件所有所有
  1. gzip只能压缩单个文件,而tar和zip可以压缩多个文件成一个归档文件。
  2. gzip压缩出来的文件后缀名为.gz,而tar压缩出来的文件后缀名为.tar,zip压缩出来的文件后缀名为.zip。
  3. 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-西游记

  1. 建立两个组(神仙(sx),妖怪(yg))
  • groupadd sx

  • groupadd yg

  1. 建立四个用户(唐僧,悟空,八戒,沙僧)

    • useradd -g sx tx

    • useradd -g yg wk

    • useradd -g yg bj

    • useradd -g sx ss

  2. 设置密码

  3. 把悟空,八戒放入妖怪,唐僧,沙僧放进神仙

  4. 用悟空建立一个文件(monkey.txt 该文件输出I am monkey)

    • vim monkey.txt
  5. 给八戒一个可以rw的权限

    • chmod 760 monkey.txt
  6. 八戒修改monkey.txt 加入一句话

  7. 唐僧 沙僧对该文件没有权限

  8. 把 沙僧 放入妖怪组

    • usermod -g yg sx
  9. 让沙僧 修改 该文件 monkey 加入一句话

  10. 对目录的细节讨论

细节:在修改用户的用户组以后记得要重启

  • x:表示可以进入到该目录,比如cd
  • r:表示可以ls,讲目录的内容显示
  • w:表示可以在该目录,删除或者创建文件

9、定时任务调度

概述:

  1. 任务调度:是指系统在某个时间执行的特定的指令或程序
  2. 任务调度分类:
    1. 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
    2. 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份

crond 跟 at区别

  1. at单一执行的例行性任务: 单一执行的例行性工作:仅处理执行一次就结束了;
  2. 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
  • 案例:每天凌晨两点将mysql模块testdb,备份到文件中,

    1、crontab -e
    20 2 * * * mysqldump -u root -proot testdb > /home/db.bak  
    

at定时任务

  1. at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
  2. 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
  3. at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
  4. 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
    1. ps -ef | grep atd
  • at命令格式
    • at [选项] [时间]
    • 结束命令:Ctrl + D
  • at命令选项
选项含义
-m当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-Iatq的别名
-datrm的别名
-v显示任务将被执行的时间
-c打印任务的内容到标准输出
-V显示版本信息
-q使用指定的队列
-f从指定文件读入任务而不是从标准输入读入
-t以时间参数的形式提交要运行的任务
  1. 案例:2天后的下午5点执行 /bin/l /home案例

    at 5pm + 2days
    at> /bin/ls/home
    
  2. 案例:atq命令来查看系统中没有执行的工作任务

    atq
    
  3. 案例:明天17点钟,输出时间到指定文件内 比如 /root/date100.log

    at 5pm tomorrow
    at> date > /root/date100.log 
    
  4. 案例:2分钟后,输出时间到指定文件内 比如 /root/date200.log

    at now + 2 minutes
    
  5. 案例:删除已经设置的任务,atrm 编号

    atrm 5
    

10、存储管理

1.基本分区

添加磁盘

  1. 数据安全
    1. 主要方面:只用一个分区,若遇到系统需要重装或者分区需要进行格式化等,原有的重要文件无法在本硬盘保留,而若提前进行了合理分区,则用户数据不会收到影响
    2. 次要方面,同等外部条件下,读取越频繁,磁盘越容易受损,我们把读写频繁的目录挂载到一个单独的分区,可以把磁盘的损伤控制在一个集中的区域。
  2. 效率:当有数据要读取自该分区时, 硬盘只会搜寻相应区段,有助于数据读取的速度与效能的提升!
  3. 注意:最多分为四个分区
  • 查看所有设备的挂在的情况

    • 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:拓展
  • 添加硬盘步骤四(挂载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

  1. 术语

    1. PV:物理卷(Physical volume)
    2. VG:卷组(Volume Group)
    3. LV:逻辑卷(Logincal Volume)
  2. LVM操作步骤

    1. 变成物理卷

      pvcreate /dev/sdc

    2. 添加卷组

      vgcreate vg1 /dev/sdc

    3. 加入卷组(分区)

      lvcreate -L 200M -n lv1 vg1
      
      指定大小单位M,G
      
      创建逻辑卷 -L大小 -n卷名 vg1组名
      
    4. 格式化

      mkfs.ext4 /dev/vg1/lv1

    5. 挂载

      mount /dev/vg1/lv1 /mnt/lv1

    6. 查看pv

      pvs

VG 管理

  • 环境:/dev/vg1 容量由5G扩容到10G
  1. 创建PV,然后使用第二部,将PV增加到VG中

    pvcreate /dev/sdd1

  2. 扩容VG,同时包括方法1

    vgextend vg1 /dev/sdd1

  3. 查看VG状态:vgs

LV 扩容

  1. 查看vg空间

    vgs

  2. 扩容LV

    lvextend -L +200M /dev/vg1/lv1

  3. 调整文件系统的大小

    resize2fs /dev/vg1/lv1

  4. 查看文件系统

    df -hT

3.交换区 Swap

操作步骤:

  1. 准备分区
    1. 划分分区后,讲类型设置为8e(按t)
    2. fdisk /dev/sde
    3. partprobe /dev/sde
  2. 格式化
    1. mkswap /dev/sde1
  3. 激活设备
    1. swapon /dev/sde1
  4. 验证
    1. free -m

4.RAID

①为什么要用raid?

​ 硬盘是个很脆弱的东西,它经常会坏掉。所以,为了保证服务器可靠耐用,硬盘必须一直保持可用。所以有了RAID这个东西。它可以组合成多种形式变成一个硬盘组(逻辑硬盘),多块盘放在一起可以有冗余(备份),从而提供比单个硬盘更高的存储性能和提供数据备份技术

②什么情况下用?
RAID 分为不同的等级,各个不同的等级均在数据可靠性及读写性能上做了不同的权衡。在实际应用中,可以依据自己的实际需求选择不同的 RAID 方案

  1. RAID 0:

    1. 等量模式,性能最佳,不安全。
      1. 性能最佳:多块磁盘读取可以并行执行,越多块磁盘组成的RAID 0性能越好
      2. 不安全:只要有一块磁盘损坏,所有数据都会遗失无法读取。
  2. RAID 1:

    1. 即镜像模式,安全性高(数据备份),性能差。
      1. 安全性高:同一份数据,完整的保存在2块磁盘上。
      2. 性能差:也需要相同磁盘容量,不同容量将会以小的容量为主。
  3. RAID 5:

    image-20230425200024374
    1. 均衡模式。
    2. 至少三块磁盘
    3. 每次将数据(N-1)份分别存入各个磁盘中,产生奇偶校验值存入到【-1】的那块磁盘中
      1. 利用率(n - 1)/ n
    4. 支持1块磁盘损坏的情况下,保证数据的正常存储。
    5. 热备盘:不存放数据,当数据盘损坏时可以直接替代。
  4. RAID 6:

    1. 特点:安全可靠
      1. 安全:会产生2种不同算法的奇偶校验值。
      2. 可靠:需要4块以上,但是允许出错的磁盘变为了2块
      3. 代价:损失两块硬盘的控件
  5. Raid1+0(最少4块):

  • 是RAID1和RAID0的结合,先做镜像(1),再做条带(0),
  • 兼顾了raid1的容错能力与raid0的条带化读写数据的优点,性能好、可靠性高。属于混合型RAID。

RAID1+0两边的RAID1中可以同时各坏一块硬盘,但不能同时坏掉单边的两个硬盘。

③应用场景
单台服务器:很重要盘不多,系统盘,RAID1
数据库服务器:主库:RAID10 从库 RAID5\RAID0(为了维护成本,RAID10)
WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
有多台,监控、应用服务器,RAID0 RAID5
我们会根据数据的存储和访问的需求,去匹配对应的RAID级别

  1. 实验
    1. 准备四块磁盘
    2. 创建RAID
    3. 格式化,挂碍
    4. 查看raid信息
mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{b,c,d,e}

为什么我四块磁盘结果只有2G能用呢?

  • 有两块磁盘做数据,一块磁盘做校验,最后一快磁盘做热备份

11、网络环境配置

网络三种连接

  1. 桥接模式: 桥接模式下默认是可以访问互联网,并且需要注意的是桥接网络的虚拟机ip地址和物理真机在一个网段里,在桥接模式下,虚拟机和真实主机地位都一样。
    1. 优点:在桥接模式下,所有的虚拟机、真实主机之间都可以互相通信 。
    2. 缺点:因为虚拟机也需要占用主机下的同一个网段的ip,因此容易出现冲突,且当主机切换网络之后,虚拟机的ip也会随时发生变化。
  2. Nat模式:虚拟机通过VMware8这块网卡和你的本机进行通讯,虚拟机访问主机所在的同一个局域网内的其他真实主机时,需要经过VMware8网卡转换地址才能通信,反过来,其他真实主机不能访问该虚拟机。除此之外,同一个VMware8网卡虚拟出来的虚拟机因为在同一个网段因此可以互相通信。
  3. 仅主机模式:虚拟机通过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、显示系统的进程

  1. 在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可以更加直观的查看进程信息

  1. 常用选项

    1. -p:显示进程的PID
    2. -u:显示进程的所属用户
  2. 案例

    1. 请用树状的形式显示进程信息

      pstree -p
      
    2. 请用树状的形式进程的用户id

      pstree -u
      

jobs 查看后台运行程序

  • jobs 命令主要用于显示系统中的任务列表及其运行状态。
命令参数参数含义
-l显示作业列表时包括进程号
-n显示上次使用 jobs 命令后状态发生变化的作业
-p仅显示作业对应的进程号
-r仅显示运行中的作业
-s仅显示已暂停的作业

13、服务管理

概述:访问某端口,本质是访问监听该端口的系统服务(守护进程)

  1. service指令

    1. service 服务名 [start | stop | restart | reload | status]
    2. 很多服务不在使用service,而是使用systemctl
    3. 查看service指令管理的服务在 ls -l /etc/init.d 查看
  2. chkconfig指令(可以给服务在运行级别中默认开启还是关闭)

    1. 查看服务:chkconfig --list | grep network:

    2. chkconfig network --list

    3. 设置启动状态:chconfig --level 5 服务名 on/off

    4. 案例:对network服务进行各种操作

      1. chkconfig --level 3 network off
      2. chkconfig --level 3 network on

      注意:chkconfig重新设置服务后自启动或关闭,需要重启机器reboot生效

  3. systemctl管理指令

    注意:

    1. 关闭或者启动防火墙后,立即生效
    2. 这种开启只是临时生效
    3. 要永远生效则使用systemctl enable/disable 服务名
    1. systemctl指令管理的服务在 /usr/lib/systemd/system 查看

    2. 查看服务开机启动状态:systemctl list-unit-files | grep 服务名

    3. 设置服务开机启动:systemctl enable 服务名

    4. 关闭服务开机启动:systemctl disable 服务名

    5. 查询某个服务是否自启动:systemctl is-enabled 服务名

    6. 案例:查看防火墙状态,关闭防火墙和重启防火墙

      1、systemctl status firewalld 
      2、systemctl stop firewalld // 临时关闭
      3、systemctl start firewalld // 临时开启
      
  4. firewall指令:

    1. 查看端口:netstat -tnlp
    2. 打开端口:firewall-cmd --permanent --add-port=端口号/协议
    3. 关闭端口:firewall-cmd --permanent --remove-port=端口号/新协议
    4. 重新载入,才能生效:firewall-cmd --reload
    5. 端口是否开放:firewall-cmd --query-port=端口/协议
    6. 案例:启动防火墙,测试111端口是否telnet,开放111端口,再次关闭111端口
      1. firewall-cmd --permanent --add-port=111/tcp
      2. firewall-cmd --reload
      3. firewall-cmd --permanent --remove-port=111/tcp

14、动态监控

概述:top与ps指令相似,他们都用来显示正在执行的进程,top与ps最大的不同指出,在于top在执行一段时间可以跟新正在运行的进程

image-20230404092332055
  1. top指令

    选项功能
    -d秒数指定top指令默认三秒更新一次
    -i使top不显示任何限制或者僵死进程
    -p通过指定监控进程ID来仅仅监控某个进程的状态
  2. 交互操作

    操作功能
    P以cpu占用率排序(默认)
    M以内存的使用率排序
    N以pid排序
    q退出top
    u监控指定用户
    k终止指定的进程
  3. 案例:监控tom用户

    top:查看执行进程
    u:输入用户名即可
    
  4. 案例:结束tom登录

    top:输入指令回车
    k:然后输入此指令,按回车,查看执行的进程
    
  5. 案例指定系统状态更新时间

    top -d 10
    

监控网络状态

  1. netstat

    选项说明
    -an按一定顺序排列输出
    -p显示哪个进城在调用
  2. 案例:查看服务名为 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包的管理

  1. 查询所安装的所有rpm软件包:rpm -qa

    • rpm -qa | more:分页

    • rpm -qa | grep X

  2. 查询软件包是否安装:rpm -q fixfox

    • 案例:rpm -q firefox

    • rpm -qi 软件包:查询软件包的信息(query info)

    • 案例:rpm -qi firefox

  3. rpm -ql 软件包:查询软件包中的文件(生成的文件)

    • 案例:rpm -ql firefox
  4. 查询文件所属的软件:rpm -qf 文件全路劲名

    • rpm -qf /etc/passwd

    • rpm -qf /root/install.log

  5. 卸载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区别

  1. rpm 只能安装已经下载到本地机器上的rpm 包,yum能在线下载并安装rpm包。

  2. rpm适用于所有环境,而yum要搭建本地yum源才可以使用!

  3. yum是上层管理工具,rpm是底层管理工具。

yum命令:在安装软件时如果碰到了依赖性的问题,yum会去主动尝试解决依赖性,如果解决不了才会反馈给用户。

rpm命令:一旦遇到了依赖性的问题不会去解决依赖性,而是直接反馈给用户,让用户自行解决。

18、Shell脚本

脚本执行方式

  1. 脚本格式要求

    1. 脚本要以#!/bin/bash 开头
    2. 脚本需要有可执行权限
  2. 编写第一个脚本

    1. #!/bin/bash
      echo "hello,world~"
      
  3. 常用执行方式

    1. 输入脚本的绝对路径

      1、chmod u+x hello.sh
      2/root/shcode/hello.sh
      
    2. sh+脚本

      sh hello.sh
      

Shell变量

注意:

  1. 基本语法

    1. 定义变量:变量名=值(注意不能空格)
    2. 删除变量:unset 变量
    3. 静态变量:readonly 变量 (不能删除)
  2. 快速入门

    1. 案例:定义变量A

      A=123
      echo $A
      
    2. 案例:删除变量A

      unset A
      
    3. 案例:声明静态变量B=2,不能unset

      readonly B=2
      echo "B=$B"
      

环境变量

  1. 基本语法

    1. 将shell变量输出为环境变量/全局变量:export 变量名=变量值
    2. 让修改后的配置文件立即生效:source 配置文件
    3. 查看环境变量:echo $变量名
  2. 快速入门

    1. /etc/profile 文件中定义 TOMCAT_HOME 环境变量

      export TOMCAT_HOME=/opt/tomcat

    2. 查看环境变量TOME_HOME的值

      echo $TOMCAT_HOME

    3. 另外一个shell程序中使用 TOMCAT_HOME

      echo "tomcat_home=$TOMCAT_HOME"

    4. 多行注释

      <<! 内容 !

位置参数变量

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如: ./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息

类似于实参

  1. 基本语法

    1. $n:$1-$9代表第一个到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10}

    2. $*:把所有参数看成一个整体

    3. @ :这个变量也可以代表命令行中所有参数,不过 @:这个变量也可以代表命令行中所有参数,不过 @:这个变量也可以代表命令行中所有参数,不过@把每个参数区别对待

    4. $#:参数个数

    5. 案例:编写一个position.sh

      #!/bin/bash
      echo "0=$0 1=$1 2=$2"
      echo "所有的参数=$*"
      echo "$@"
      echo "参数的个数=$#"
      
      执行
      ./position.sh 100 200
      

预定义变量

  1. 基本语法
    1. $$:当前进程的进程号
    2. $!:后台运行的最后一个进程的进程号
    3. $?:
    4. 功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行
      如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。

运算符

  1. 基本语法

    1. ( ( 运算式 ) ) " 或 " ((运算式))"或" ((运算式))""[运算式]” 或者 expr m + n

    2. 注意expr运算符间要有空格,如果希望将 expr 的结果赋给某个变量,使用``

    3. expr m - n

    4. expr \*,/,% 乘,除,取余

    5. 案例1 : 计算(2+3)X4的值

      # 第一种方式
      res1=(((2+3)*4))
      # 第二种方式
      res2=$[(3+4)*4]
      # 第三种
      temp=`expr 2 + 3`
      res3=`expr $temp \* 4`
      
      
    6. 案例2 : 请求出命令行的两个参数[整数]的和

      sum=$[$1+$2]
      echo "sum=$sum"
      

条件判断

  1. 基本语法

    1. [codition](注意condition前后有空格)
    2. 非空返回true,可以用$?验证(0为true,1>false)
  2. 快速入门

    1. 案例:“ok” 是否等于 “ok”

      if [ "ok" = "ok" ]
      then
      	echo "等于"
      fi
      
    2. 案例:23是否大于等于22

      if [ 23 -ge 22 ]
      then
      	echo "大于"
      fi
      
    3. 案例:/root/shcode/aaa.txt 文件是否存在

      if [ -f /root/shcode/aaa.txt ]
      then
      	echo "存在"
      fi
      
  3. 常用判断条件

    1. = 字符串比较
    2. 两个整数比较
      1. -lt 小于 less than
      2. -le 小于等于
      3. -eq 等于
      4. -gt 大于
      5. -ge 大于等于
      6. -ne 不等于
    3. 按照文件权限进行判断
      1. -r 有读的权限
      2. -w 有写的权限
      3. -x 有执行的权限
    4. 按照文件类型进行判断
      1. -f 文件存在并且是一个常规的文件
      2. -e 文件存在
      3. -d 文件存在并且是一个目录

流程控制

if 语句

注意:中括号和条件判断式之间必须有空格

  1. 基本语法

    if [ 条件判断式 ]
    then
    	代码
    elif [ 条件判断式 ]
    then
    	代码
    fi
    
  2. 案例:如果输入参数,大于等于60输出及格

    if [ $1 -ge 60 ]
    then
    	echo "及格了"
    elif [$1 -lt 60 ]
    then 
    	echo "不及格"
    fi
    

case 语句

  1. 案例:当命令行参数是1 时,输出“周一”,是2 时,就输出”周二”,其它情况输出other"

    case $1 in
    "1")
    echo "周一"
    "2")
    echo "周二"
    ;;
    *)
    echo "ohter..."
    ;;
    esac
    

for 循环

  1. 案例:打印命令行输入的参数

    # $* 当作一个整体
    for i in "$*"
    do
    	echo "num is $i"
    done
    
    # $@ 
    for i in "$@"
    do
    	echo "num is $i"
    done
    
  2. 案例:语法二

    for (( i=1; i<=100; i++ ))
    do
    	sum=$[$sum+$i]
    done
    

while 循环

  1. 案例:统计1+…+n的数值是多少

    sum=0
    i=0
    while [ $i -le $1 ]
    do 
    	sum=$[$sum+&i]
    	i=$[$i+1]
    done
    

read读取控制台输入

  1. read(选项)(参数)

    1. -p:指定读取值时的提示符

    2. -t:指定读取值时等待的时间,如果没有在指定的时间内输入,就不再等待

    3. 案例:读取控制台输入的NUM1值

      read -p "请输入一个数值" NUM1
      
    4. 案例:读取控制台输入的NUM2值,在10秒内输入

      read -t 10 -p "请输入一个数值,10秒后结束" NUM2
      

函数

  1. basename [pathname]【suffix】:获取文件名

    1. 案例:返回 /home/aaa/test.txt 的"test.txt"部分

      basename /home/aaa/test.txt
      //输出:test.txt
      
  2. dirname 【pathname】:获取文件路劲

    1. 案例:返回 /home/aaa/test.txt/home/aaa 部分

      dirname /home/aaa/test.txt
      
  3. 自定义函数

    1. 计算输入两个参数的和

      function getSum(){
      	sum=$[$n1+$n2]
      	echo "和是=$sum"
      }
      read -p "请输入一个数字n1=" n1
      read -p "请输入一个数字n2=" n2
      
      getSum $n1 $n2
      

综合案例

  1. 每天凌晨 2:30 备份 数据库 hspedu 到 /data/backup/db

    30 2 * * * 
    
  2. 备份开始和备份结束能够给出相应的提示信息

  3. 备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如 :2021-03.12 230201.tar.gz

  4. 在备份的同时,检查是否有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

  • 原理图
image-20230426204236272
  • 查看 rsyslogd 是否启动

    ps aux | grep "rsyslog" | grep -v "grep"

    -v:是不匹配输入的关键字

  • 查询 rsyslogd 服务的自启动状态

    systemctl list-until-files | grep rsyslog

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

日志轮替

作用:要是一年的日志有必要保存吗,显然是没有必要的对吧

基本介绍:日志轮替九十八旧的日志文件移动并改名,同时建立心得空日志文件,当旧日志文件超出保存得范围后就会进行删除

  1. centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过 /etc/logrotate.conf 配置文件中“dateext”参数

  2. 如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如 “secure20201010”。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。

  3. 如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。当第一次进行日志轮替时当前的ecure”日志会自动改名为日志,用来保新的日志。当第二次公后新secure进行日志轮替时,会自动改名为当前的“secure日志会自动改名为secure.1secure.2”用来保存新的日志,以此类推。secure.1然后也会新建secure”日志

  4. 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
    }
    
    image-20230426211059464

把自己的日志加入日志轮替

  1. 第一种:直接在 /etc/logrotate.conf 配置文件中写入该日志的论轮替策略

  2. 第二种:在目录 /etc/logrotate.d 目录中新建该日志的轮替文件 robber.log

  3. 文件内容

    /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 查看的内存日志,重启清空
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值