Centos 8 常用指令汇总

主要目录结构

/ #根目录
├── bin -> #(/usr/bin 、 /usr/local/bin) 目录存放着最经常使用的命令
├── boot #系统启动文件
├── dev #设备文件类似windows的设备管理器,把所有的硬件用文件的形式存储
├── etc #系统配置文件,所有的系统管理所需要的配置文件和子目录 my.conf
├── home #普通用户根目录,每个用户都有一个自己的目录,一般
该目录名是以用户的账号命名
├── lib -> usr/lib #系统共享库文件,服务程序等
├── lib64 -> usr/lib64 #64位系统库文件
├── media # linux会把识别的设备挂载到这个目录下
├── mnt #临时挂载目录,让用户临时挂载别的文件系统的
├── opt # 额外安装软件所摆放的目录
├── proc #此目录数据都在内存中,不占磁盘空间,是系统内存映射
├── root #目录为系统管理员,也称作超级权限者的用户主目录
├── run #程序进程pid存放目录
├── sbin -> usr/sbin #只有root才有权执行的命令,即存放的是系统管理员使用的 系统管理程序
├── srv # 该目录存放一些服务启动之后需要提取的数据。
├── sys #系统内核信息文件,和/proc相似
├── tmp #临时文件
├── usr #非系统程序,/usr/local是常见的系统级软件安装目录.用户的很多应用程 序和文件都放在这个目录下
└── var #目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件,

常用指令

Vi 和 Vim编辑器

正常模式

可以使用[上下左右]按键来移动光标,你可以使用[删除字符]或[删除整行]来处理档案内容,也可以使用[复制、粘贴]来处理你的文件数据

插入模式

按下i, I, o, O, a, A, r, R等任何一个字母之后才会进入编辑模式, 一般来说按i即可.

命令行模式

在这个模式当中, 可以提供你相关指令,完成读取、存盘、替换、离开 vim 、显示行号等的动作则是在此模式中达成的!

模式切换

在这里插入图片描述
说明:

wq:修改后 保存退出

wq!:修改后强制保存退出

q在vim中表示退出

q!表示强制不保存退出,不对文件进行保存

常用操作

1 拷贝当前行

一般模式下:
拷贝当前行 yy , 拷贝当前行向下的5行 5yy,并粘贴p

2 删除当前行

一般模式下:
删除当前行 dd , 删除当前行向下的5行 5dd

3 查找某个关键字

命令模式下:
/关键字 , 回车查找 , 输入 n 就是查找下一个

4 设置与取消显示行号

命令模式下:
显示行号 :set nu
取消显示行号 :set nonu

5 移动到首位置与尾部位置

命令模式下:
首位置 gg
尾位置 G

6 撤销动作

一般模式下 u

7 移动到指定位置

一般模式下
移动数值 shift+g

开机重启关机

  • shutdown –h now
    立该进行关机
  • shudown -h 1
    1 分钟后关机
  • shutdown –r now
    现在重新启动计算机
  • halt
    关机,作用和上面一样.
  • reboot
    重新启动计算机
  • sync
    把内存的数据同步到磁盘.

用户及用户组管理

  • 添加用户

    useradd 用户名

  • 删除用户
    userdel 用户名

  • 查询用户信息指令
    id 用户名

  • 切换用户
    su - 切换用户名

  • 使用超级管理员执行指令
    sudo 指令

  • 查看当前用户/ 登录用户
    whoami/ who am I

  • 新增组
    groupadd 组名

  • 删除组
    groupdel 组名

  • 增加用户时直接加上组
    useradd –g 用户组 用户名

  • 修改用户的组
    usermod –g 用户组 用户名

指定运行级别

运行级别说明

0 :关机
1 :单用户【找回丢失密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启

常用运行级别是3和5 ,要修改默认的运行级别可改文件
/etc/inittab的id:5:initdefault:这一行中的数字
命令:init [012356]

帮助指令

  • man 获得帮助信息
    man [命令或配置文件](功能描述:获得帮助信息)
  • help指令
    命令 --help (功能描述:获得shell内置命令的帮助信息)

文件目录类

Linux下的文件类型

• -:普通文件
• d: 目录文件
• b: 块设备
• c: 字符设备
• l: 符号链接文件
• p: 管道文件pipe
• s: 套接字文件sock

pwd 指令

显示当前工作目录的绝对路径

ls 指令

ls [选项] [目录或是文件]

常用选项

-a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同 -a ,但不列出 “.” (目前目录) 及 “…” (父目录)
-F 在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/”
-R 若目录下有文件,则以下之文件亦皆依序列出

cd 指令

cd [参数] (功能描述:切换到指定目录)

常用参数

绝对路径和相对路径
cd ~ 或者cd :回到自己的家目录
cd. . 回到当前目录的上一级目录

mkdir 指令

用于创建目录

mkdir [选项] 要创建的目录
• 常用选项
-p :创建多级目录 如:mkdir -p mydir
-m: 指定权限 如:mkdir -m 744 mydir
-v: 每次创建目录都显示信息。如: mkdir -v mydir

rmdir 指令

删除空目录

rmdir [选项] 要删除的空目录

常用选项

-p : 删除目录后,若该目录的上层目录已变成空目录,则将其一并删除。
–ignore-fail-on-non-empty: 此选项使rmdir命令忽略由于删除非空目录时导致的错误信息。
-v: 显示命令的详细执行过程。

删除非空目录

rm -rf 要删除的目录

touch 指令

创建空文件

touch 【选项】文件名称

常用选项

-a 改变档案的读取时间记录。
-m 改变档案的修改时间记录。
-c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
-r 使用参考档的时间记录,与 --file 的效果一样。
-d 设定时间与日期,可以使用各种不同的格式。

批量创建文件:

批量创建test1.txt test2.txt test3.txt 文件

touch test{1…3}.txt

举例

touch -a file : 可以更改最后访问时间
touch -m file :修改文件为当前系统时间
touch -d “09:08:07” file1 :将文件的日期修改为指定日期
touch -r file1 file2: 将file2的时间改为file1的时间。

stat 查看文件

stat 文件名

cp 指令

指令拷贝文件到指定目录

cp [选项] source dest

常用选项

-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;

rm 指令

移除文件或目录

rm [选项] 要删除的文件或目录
• 常用选项
-r :递归删除整个文件夹
-f : 强制删除不提示
-v: 详细显示进行的步骤

mv 指令

移动文件与目录或重命名

mv [选项] 源文件或目录 目标文件或目录

常用选项

-b :若需覆盖文件,则覆盖前先行备份。
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新(update)

mv  oldNameFile  newNameFile (功能描述:重命名)
mv  /temp/movefile  /targetFolder (功能描述:移动文件)

cat 指令

查看文件内容

cat [选项] 要查看的文件
• 常用选项
-n :显示行号

常用功能

1.一次显示整个文件:cat filename

2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.

3.将几个文件合并为一个文件:cat file1 file2 > file

cat 只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | more

more 指令

基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。
more指令中内置了若干快捷键

more 要查看的文件

操作说明
在这里插入图片描述

less 指令

less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支
持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是
根据显示需要加载内容, 对于显示大型文件具有较高的效率

less  要查看的文件

操作说明
在这里插入图片描述
echo 指令

输出内容到控制台

echo [选项] [输出内容]

head 指令

显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容

head [参数] [文件]

参数

-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数。

head -n 5 文件名

查看文件头5行内容,5可以是任意行数

tail 指令

输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容。

tail [参数] [文件]

参数:

-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

举例

  1. 要显示 current.log 文件的最后 10 行
    tail current.log

  2. 监控current.log的变化
    tail -f current.log

  3. 显示文件 current.log 的内容,从第 20 行至文件末尾
    tail -n +20 current.log

  4. 显示文件 current.log 的最后 10 个字符
    tail -c 10 current.log

>指令 和 >>指令

分别为输出重定向和 追加

  1. ls -l >文件 (功能描述:列表的内容写入文件a.txt中(覆盖写))
  2. ls -al >>文件 (功能描述:列表的内容追加到文件aa.txt的末尾)
  3. cat 文件1 > 文件2 (功能描述:将文件1的内容覆盖到文件2)

tr命令

用于转换文件中的字符

tr [参数选项] 字符串

file中的小写字母全部转换成大写字母 :

cat file|tr a-z A-Z

wc命令

计算文件的Byte数、字数、或是列数

语法格式

wc [参数选项] 文件名

参数

-c或–bytes或–chars 只显示Bytes数。
-l或–lines 显示行数。
-w或–words 只显示字数

ln 指令

给原文件创建一个软链接

ln -s [原文件或目录] [软链接名]

当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录。

history 指令

查看已经执行过历史命令,也可以执行历史指令

history(选项)(参数)

选项

n 显示n个最近的记录
-a 添加记录到history文件中
-c 将目前shell中的所有history命令清除
-d [n] 删除指定n条记录
-r 将history文件内容读入到目前shell的history记忆中
-w 将目前history记忆的内容写入到history文件中(直接覆盖方式)

history 5 – 显示5条使用过的指令记录
!5 —执行历史编号为5的指令

日期时间类

date 指令

  1. date (功能描述:显示当前时间)
  2. date +%Y (功能描述:显示当前年份)
  3. date +%m (功能描述:显示当前月份)
  4. date +%d (功能描述:显示当前是哪一天)
  5. date “+%Y-%m-%d %H:%M:%S”(功能描述:显示年月日时分秒)

设置日期

date -s 字符串时间
设置时间为:date -s “2019-4-12 11:21”

cal 指令

查看日历指令

cal [参数][月份][年份]

参数:

-1显示一个月的月历
-3 显示系统前一个月,当前月,下一个月的月历
-s 显示星期天为一个星期的第一天,默认的格式
-m 显示星期一为一个星期的第一天
-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y 显示当前年份的日历

搜索查找

find 指令

从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终
端。
find [查找目录] [查找规则] [查找完后的操作]

参数 :

-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件

-atime n : 在过去n天内被读取过的文件

-cmin n : 在过去 n 分钟内被修改过

-cnewer file :比文件 file 更新的文件

-ctime n : 在过去n天内被修改过的文件

-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name

-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写

-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写

-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。

-type c : 文件类型是 c 的文件。

删除10天前的/back 目录下的.tar.gz 文件

find /back -mtime +10 -name “*.tar.gz” -exec rm -rf {} \

locate 指令

locaate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径
的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。
为了保证查询结果的准确度,管理员必须定期更新locate时刻

locate 搜索文件

由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库

grep 指令和 管号 道符号 |

grep 过滤查找 , 管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。

grep [选项] 查找内容 源文件

常用选项

-n 显示匹配行及行号。
-i 忽略字母大小写
-a : 不要忽略二进制的数据。
-e : 使用PATTERN作为模式。这可以用于指定多个搜索模式,或保护以连字符( - )开头的图案。指定字符串做为查找文件内容的样式。

-f : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

-v: 反转匹配,选择没有被匹配到的内容。

-w:匹配整词,精确地单词,单词的两边必须是非字符符号(即不能是字母数字或下划线)

-x:仅选择与整行完全匹配的匹配项。精确匹配整行内容(包括行首行尾那些看不到的空格内容都要完全匹配)

常用举例

  1. 查找指定进程 :ps -ef|grep java

  2. 查找指定进程个数: ps -ef|grep -c java

  3. 从文件中读取关键词进行搜索,默认是显示的是行
    命令1:cat test.txt | grep -f test2.txt
    命令2(显示行号):cat test.txt | grep -nf test2.txt

  4. 反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。查找文件名中包含 test 的文件中不包含test 的行
    grep -v test *test*

  5. 以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi
    及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容
    grep -r update /etc/acpi

压缩和解压类

zip/unzip 指令

zip 用于压缩文件, unzip 用于解压的

zip 用法

zip [参数] [打包后的文件名] [打包的目录路径]

常用参数:

-a 将文件转成ASCII模式

-F 尝试修复损坏的压缩文件

-h 显示帮助界面

-m 将文件压缩之后,删除源文件

-n 特定字符串 不压缩具有特定字尾字符串的文件

-o 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间

-q 安静模式,在压缩的时候不显示指令的执行过程

-r 将指定的目录下的所有子目录以及文件一起处理

-S 包含系统文件和隐含文件(S是大写

unzip 用法

unzip [参数] [待解压缩文件]

常用参数:

-n 解压缩时不要覆盖原有的文件;

-o 不必先询问用户,unzip执行后覆盖原有的文件;

-P [密码] 使用zip的密码选项;

-q 执行时不显示任何信息;

-d [目录] 指定文件解压缩后所要存储的目录;

gzip gunzip指令

gzip 用于压缩文件, gunzip 用于解压的

gzip

gzip [选项] 压缩(解压缩)的文件名

选项

-c 将输出写到标准输出上,并保留原有文件。
-d 将压缩文件解压。
-l 对每个压缩文件,显示下列字段:
 (1)压缩文件的大小
 (2)未压缩文件的大小
 (3)压缩比
 未压缩文件的名字
-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。
-t 测试,检查压缩文件是否完整。
-v 对每一个压缩和解压的文件,显示文件名和压缩比。

gzip不能压缩整个目录。可以使用tar先打包,再压缩

gunzip

gunzip [选项]… [文件]…

选项

-a 使用 ASCII 文字模式
-c 把压缩后的文件输出到标准输出设备,保持原始文件不变。
-f 强行解压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
-l 列出压缩文件的相关信息
-n, 解压缩文件时,不保存或恢复原来的名字和时间戳
-N 解压缩文件时,保存或恢复原来的名字和时间戳
-q 不显示警告信息
-r 递归解压缩指定目录以及子目录下的所有文件
-S 更改压缩文件字尾字符串为 SUF
-t 检查压缩文档的完整性
-v 显示指令执行过程

tar 指令

tar 指令 是打包指令,最后打包后的文件是 .tar.gz 的文件。

tar [选项] XXX.tar.gz 打包的内容

常用选项

-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包.tar文件

组管理和权限管理

组管理

在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件
有所有者、所在组、其它组的概念。

  1. 所有者
  2. 所在组
  3. 其它组

文件/目录 所有者

  • 查看文件的所有者
    指令:ls –ahl

  • 修改文件所有者
    chown 用户名 文件名

  • 组的创建
    groupadd 组名

文件/目录 所在者

基本指令
ls –ahl

修改文件所在的组
chgrp 组名 文件名

其它组

除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。

改变用户所在组

  1. usermod –g 组名 用户名
  2. usermod –d 目录名 用户名 改变该用户登陆的初始目录。

权限的基本介绍

ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc

0-9位说明

  1. 第0位确定文件类型(d, - , l , c , b)
  2. 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User
  3. 第4-6位确定所属组(同用户组的)拥有该文件的权限,—Group
  4. 第7-9位确定其他用户拥有该文件的权限 —Other

10个字符确定不同用户能对文件干什么

第一个字符代表文件类型:文件 (-),目录(d),链接(l)
其余字符每3个一组(rwx) 读® 写(w) 执行(x)
第一组rwx : 文件拥有者的权限是读、写和执行
第二组rw-: 与文件拥有者同一组的用户的权限是读、写但不能执行
第三组r-- : 不与文件拥有者同组的其他用户的权限是读不能写和执行

权限管理

rwx作用到文件

  1. [ r ]代表可读(read): 可以读取,查看
  2. [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
  3. [ x ]代表可执行(execute):可以被执行

rwx 作用到目录

  1. [ r ]代表可读(read): 可以读取,ls查看目录内容
  2. [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
  3. [ x ]代表可执行(execute):可以进入该目录

修改权限

通过chmod指令,可以修改文件或者目录的权限

方式一
+ 、- 、= 变更权限
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)

  1. chmod u=rwx,g=rx,o=x 文件目录名
  2. chmod o+w 文件目录名
  3. chmod a-x 文件目录名

方式二

通过数字变更权限
r=4 w=2 x=1 rwx=4+2+1=7

chmod u=rwx,g=rx,o=x 文件目录名

修改文件所有者

chown newowner file 改变文件的所有者
chown newowner:newgroup file 改变用户的所有者和所有组
-R 如果是目录 则使其下所有子文件或目录递归生效

修改文 件所在组

chgrp newgroup file 改变文件的所有组

crond 任务调度

任务调度:是指系统在某个时间执行的特定的命令或程序。

任务调度分类:

  1. 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等

  2. 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。

crontab [选项]

 -u 指定一个用户

 -l 列出某个用户的任务计划

 -r 删除某个用户的任务

 -e 编辑某个用户的任务

举例:

  1. 查看crond.service的启动状态
    stemctl status crond.service

  2. 开启crond.service服务命令
    systemctl start crond.service

  3. 停止crond.service服务命令
    systemctl stop crond.service

  4. 每隔1 分钟, 到 将当前日期和日历都追加到 /home/mycal
    1 :vim /home/task.sh
    date >> /tmp/mycal
    cal >> /tmp/mycal
    2 :给 task.sh 执行权限
    chmod 744 /home/task.sh
    3 :crontab -e
    4: /1 * * * * /home/task.sh

  5. 每天凌晨2:00 将mysql 数据库 testdb ,备份到文件中
    1: vim /home/task.sh
    /usr/local/mysql/bin/sqdump -u root -proot testdb > /tmp/mydb.bak
    2 :给task.sh执行权限
    chmod 744 /home/task.sh
    3 :crontab -e
    4: 0 2 * * * /home/task.sh

任务调度参数说明

4 5 * * 2 /sbin/shutdown -r now
每个周二凌晨5点4分机器重启

占位符的说明
在这里插入图片描述
特殊符号的说明
在这里插入图片描述

0 5 1,10,15 * * /sbin/shutdown -r now
每个月的1 10 15 号的5时0分执行机器重启

特定时间执行任务案例
在这里插入图片描述

Linux 磁盘分区

查看所有设备挂载情况

lsblk 或者 lsblk -f

如何增加一块硬盘?

  1. 虚拟机添加硬盘

在这里插入图片描述

  1. 分区 fdisk /dev/sdb

    开始对/sdb分区
    • m 显示命令列表
    • p 显示磁盘分区同 fdisk –l
    • n 新增分区
    • d 删除分区
    • w 写入并退出
    说明: 开始分区后输入n,新增分区,然后选择p ,分区类型为主分区。两次回车 默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。

  1. 格式化 mkfs -t ext4(分区类型) /dev/sdb1

  2. 挂载 mount 设备名称 挂载目录

    1. 创建目录 /home/newdisk
    2. 开始挂载 mount /dev/sdb1 /home/newdisk

    取消挂载 umount 设备名称 或者 挂载目录

  1. 设置可以自动挂载 。

    设置永久挂载
    1 vim /etc/fstab
    2 /dev/sdb1 /home/newdisk ext4 defaults 0 0

  2. 添加完成使用mount -a 即刻生效

磁盘情况查询

df -h

查询指定目录的磁盘占用情况

du -h /目录

查询指定目录的磁盘占用情况,默认为当前目录

-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值

实用指令

  1. 统计/home文件夹下文件的个数

     ls -l /home |grep "^-" | wc -l
    
  2. 统计/home文件夹下目录的个数

    ls -l /home  | grep  "^d" | wc -l
    
  3. 统计/home文件夹下文件的个数,包括子文件夹里的

    ls -lR /home | grep "^-" | wc - l 
    
  4. 统计文件夹下目录的个数,包括子文件夹里的

    ls -lR /home | grep "^d" | wc - l 
    
  5. 以树状显示目录结构

    tree 
    

网络配置

测试主机之间网络连通性

ping 目的主机

linux网络环境配置 -指定固定ip

1 查看网卡 IP addr
在这里插入图片描述
2 编辑 new vim /etc/sysconfig/network-scripts/ifcfg-网卡名
在这里插入图片描述
3 重启网络服务

nmcli c reload

进程及服务管理

进程管理

在LINUX中,每个执行的 程序(代码)都称为一个进程。每一个进程都分配一
个ID号。
每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。

进程有5种状态

  1. 运行 ( 正在运行或在运行队列中等待 )
  2. 中断 ( 休眠中, 受阻, 在等待某个条件的形成或接受到信号 )
  3. 不可中断 ( 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生 )
  4. 僵死 ( 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放 )
  5. 停止 ( 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行 )

标识进程的 5 种状态码:

D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process

ps 指令
来查看目前系统中,有哪些正在执行,以及它们执行的状况

ps [选项]
在这里插入图片描述
常用选项

-a:显示当前终端的所有进程信息
-u 以用户显示进程的信息
-x :显示后台进程运行的参数

主要指令

  1. ps a 显示现行终端机下的所有程序,包括其他用户的程序。
  2. ps -A 显示所有进程。
  3. ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标
    示。
  4. ps -e 此参数的效果和指定"A"参数相同。
  5. ps e 列出程序时,显示每个程序所使用的环境变量。
  6. ps f 用 ASCII 字符显示树状结构,表达程序间的相互关系。
  7. ps -H 显示树状结构,表示程序间的相互关系。
  8. ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
  9. ps s 采用程序信号的格式显示程序状况。
  10. ps S 列出程序时,包括已中断的子程序资料。
  11. ps -t<终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。
  12. ps -u root  显示root用户信息
  13. ps x   显示所有程序,不以终端机来区分。

最常用指令

ps -aux 列出目前所有的正在内存当中的程序
常用grep 使用过滤指定进程

说明:

    USER:该 process 属于那个使用者账号的
    PID :该 process 的号码
    %CPU:该 process 使用掉的 CPU 资源百分比
    %MEM:该 process 所占用的物理内存百分比
    VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
    RSS :该 process 占用的固定的内存量 (Kbytes)
    TTY :该 process 是在那个终端机上面运作,若与终端机无关则显示 ?,另外,tty1-tty6 
          是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
    STAT:该程序目前的状态,主要的状态有
    R :该程序目前正在运作,或者是可被运作
    S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
    T :该程序目前正在侦测或者是停止了
    Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
    START:该 process 被触发启动的时间
    TIME :该 process 实际使用 CPU 运作的时间
    COMMAND:该程序的实际指令,如果过长会被截断显示

ps -ef 显示所有进程信息,连同命令行
ps -ef | grep xxx 与grep 组合用法,查找特定进程

说明:

 UID:用户ID
 PID:进程ID
 PPID :父进程ID
 C:  CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,
      执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
 STIME:进程启动的时间
 TTY:完整的终端名称
 TIME:CPU时间
 CMD:启动进程所用的命令和参数

ps -l 将目前属于您自己这次登入的 PID 与相关信息列示出来

说明:

       	F      代表这个程序的旗标 (flag), 4 代表使用者为 super user
       	S      代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
       	UID    程序被该 UID 所拥有
       	PID    就是这个程序的 ID !
       	PPID   则是其上级父程序的ID
       	C CPU  使用的资源百分比
       	PRI    这个是 Priority (优先执行序) 的缩写,详细后面介绍
       	NI     这个是 Nice 值,在下一小节我们会持续介绍
       	ADDR    这个是 kernel function,指出该程序在内存的那个部分。
                                     如果是个 running的程序,一般就是 "-"
       	SZ      使用掉的内存大小
       	WCHAN   目前这个程序是否正在运作当中,若为 - 表示正在运作
       	TTY     登入者的终端机位置
       	TIME    使用掉的 CPU 时间。
       	CMD     所下达的指令为何

终止进程 止进程kill 和killall

1 kill [选项] 进程号

通过进程号杀死进程

2 killall 进程名称

通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用

常用指令

  1. kill -stop pid

     停止一个进程,而并不消灭这个进程。
    
  2. kill -cont pid

     重新开始一个停止的进程。
    
  3. kill pid

     强迫进程立即停止,并且不实施清理操作。
    
  4. kill -9 pid

    强制终止某进程
    
  5. kill -9 -1

    终止你拥有的全部进程。
    

查看进程树

pstree [选项]

常用选项:

-p :显示进程的PID
-u :显示进程的所属用户

服务管理

服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程

systemctl [start | stop | restart | reload | status] 服务名

查看服务名

查看所有的服务状态

方式一
systemctl list-unit-files

方式二
ls -lh /usr/lib/systemd/system

服务的运行级别

Linux的运行级别(runlevel)

运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

在Centos8 中使用systemctl管理运行级别

Target 就是一个 Unit 组,包含许多相关的 Unit
启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit
默认的位置是 /etc/systemd/system/default.target

systemd运行级别的target有哪些?

可以理解成init的runlevel
poweroff.target (相当于runlevel 0) 关闭电源
rescue.target (相当于runlevel 1) 急救
multi-user.target (相当于runlevel 3) 多用户命令行
graphical.target(相当于runlevel 5) 图形界面
reboot.target(相当于runlevel 6) 重启

获取当前默认的运行级别

systemctl get-default

设置默认的运行级别

systemctl set-default xxx

切换运行级别命令

systemctl isolate multi-user.target #更改为命令模式启动
systemctl isolate graphical.target #更改为图形界面启动

常用指令

  1. systemctl start firewalld.service 开启防火墙
  2. systemctl status firewalld.service 查看防火墙状态
  3. firewall-cmd --state 查看防火墙状态
  4. systemctl stop firewalld.service 执行停止运行防火墙命令
  5. firewall-cmd --zone=public --list-ports 查看防火墙所有开放的端口
  6. firewall-cmd --zone=public --list-ports 查看防火墙所有开放的端口

停用、启用、查看当前启用的端口

  1. firewall-cmd --zone=public --add-port=5672/tcp #开放5672端口

  2. firewall-cmd --zone=public --remove-port=5672/tcp #关闭5672端

  3. firewall-cmd --reload # 配置立即生效

启动、终止、重启 httd服务

  1. systemctl start httpd.service #启动
  2. systemctl stop httpd.service #停止
  3. systemctl restart httpd.service #重启

设置httd服务 开机启动/关闭

  1. systemctl enable httpd.service #开机启动
  2. systemctl disable httpd.service #开机不启动

检查httpd状态

  1. systemctl status httpd.service

动态监控进程

top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。

top [选项]

常用选项

-d 秒数 指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的命令
-i 使top不显示任何闲置或者僵死进程。
-p 通过指定监控进程ID来仅仅监控某个进程的状态。
-q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
-S:指定累计模式。
-s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
-i:使top不显示任何闲置或者僵死进程。
-c:显示整个命令行而不只是显示命令名。
-o : sort 排序,-o fieldname ,指定要排序的字段 ,

  e.g: top -d 300  -o +PID  按照PID字段从小到大排序

  top -d 300  -o -PID  按照PID字段从大到小排序 

-b: 批处理模式,可以把top命令行的输出导入到一个文件中

在这里插入图片描述
对应的显示的各项参数说明

在这里插入图片描述
交互操作说明

在这里插入图片描述
常用操作

  1. 监视特定用户
    top 命令窗口下 按u 输入用户名监控

  2. 终止指定的进程
    top 命令窗口下 按k 输入需要结束的进程号id

  3. 指定系统状态更新的时间(每隔10秒自动更新,默认是3秒刷新)
    top -d 10

  4. 显示进程的绝对路径
    在top的命令行窗口下,按下c键即可。

  5. 按照cpu使用率进行排序显示
    top -o +%CPU

  6. 保存top命令行的输出到一个文件中
    top -n 1 -b > /data/top-output.txt

free 指令

查看当前系统已用和未使用内存的命令,还可以查看buff和cache。

free [选项]

选项:

-h:用辨识度较高的单位显示。

-m/g:用mB或者gB为单位显示。

在这里插入图片描述
具体参数说明:

otal:内存总大小。

used:使用了多少内存。

free:除了buff/cache剩余了多少内存。

shared:共享内存。

buff/cache:缓冲、缓存区内存数。

available:真实剩余的可用内存数。

其中:

total = used + free + buff/cache
available 包含 free 和 buff/cache 剩余部分,则是真实剩余内存。

iostat 指令

iostat 主要用于输出磁盘IO 和 CPU的统计信息。
iostat属于sysstat软件包。可以用yum install sysstat 直接安装。

iostat [选项] [<时间间隔>] [<次数>]

主要选项

-c: 显示CPU使用情况
-d: 显示磁盘使用情况
-N: 显示磁盘阵列(LVM) 信息
-n: 显示NFS 使用情况
-k: 以 KB 为单位显示
-m: 以 M 为单位显示
-t: 报告每秒向终端读取和写入的字符数和CPU的信息
-V: 显示版本信息
-x: 显示详细信息
-p:[磁盘] 显示磁盘和分区的情况

在这里插入图片描述
具体参数说明

%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。

device:磁盘名称
tps:每秒钟发送到的I/O请求数.
Blk_read/s:每秒读取的block数.
Blk_wrtn/s:每秒写入的block数.
Blk_read:读入的block总数.
Blk_wrtn:写入的block总数.

举例:

  1. iostat -d -k 1 1
    查看TPS和吞吐量信息
  2. iostat -d -x -k 1 1
    查看设备使用率(%util)、响应时间(await)
  3. iostat -c 1 2
    查看cpu状态
    间隔1秒显示一次,总共显示2次
  4. iostat -d sda
    显示指定硬盘信息
  5. iostat -d 2
    每隔2秒,显示一次设备统计信息.
  6. iostat -p sda 2 3
    每隔2秒显示一次sda及上面所有分区的统计信息,共输出3次.

vmstat 指令

对操作系统的虚拟内存、进程、分页、块I/O和CPU活动等进行监控。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。

vmstat [选项] [时间间隔] [次数]

主要选项

-a 显示活跃和非活跃内存统计信息
-f 显示从系统启动至今的fork数量
-m 显示slabinfo
-n 只在开始时显示一次各字段名称
-s 显示内存相关统计信息及多种系统活动数量
-d 显示磁盘相关统计信息
-p 显示指定磁盘分区统计信息
-S 使用指定单位显示。参数有k、K、m、M,分别代表1000、1024、1000000、1048576字节。默认单位为K
-t 输出时间

在这里插入图片描述
参数说明:

procs(进程)
r:当前运行队列中线程的数目,代表线程处于可运行状态,但CPU还未能执行.,这个值可以作为判断CPU是否繁忙的一个指标;当这个值超过了CPU数目,就会出现CPU瓶颈了;这个我们可以结合top命令的负载值同步评估系统性能;
b:等待IO的进程数量;如果该值一直都很大,说明IO比较繁忙,处理较慢;

memory(内存)
swpd:虚拟内存已使用的大小;如果swpd的值不为0,但是si,so的值长期为0,这种情况不会影响系统性能;

free:空闲的物理内存的大小;

buff:用作缓冲的内存大小;

cache:用作缓存的内存大小;如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小;

swap(交换空间,单位:KB);内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有时我们看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的;
si:每秒从交换区写到内存的大小;
so:每秒写入交换区的内存大小;
io(单位:块/秒)
bi:每秒读取的块数;
bo:每秒写入的块数;随机磁盘读写的时候,这2个值越大,能看到CPU在IO等待的值也会越大;

system(系统);这2个值越大,会看到由内核消耗的CPU时间会越大;
in:每秒中断数,包括时钟中断;
cs:每秒上下文切换数;
cpu(以百分比表示)
us:用户进程执行时间(user time);
sy:系统进程执行时间(system time);
id:空闲时间(包括IO等待时间);
wa:等待IO时间;wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈。

举例:

  1. 显示活跃和非活跃内存统计信息
    vmstat -a

  2. 显示从系统启动以来的fork数量
    vmstat -f

  3. 显示内存使用的详细信息
    vmstat -s

  4. 显示磁盘相关统计信息(磁盘的读/写情况)
    vmstat -d

  5. 查看/dev/sda1磁盘分区的读/写情况
    vmstat -p /dev/sda1

pidstat 指令

监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。

pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]

主要选项

-u:默认的参数,显示各个进程的cpu使用统计
-r:显示各个进程的内存使用统计
-d:显示各个进程的IO使用情况
-p:指定进程号
-w:显示每个进程的上下文切换情况
-t:显示选择任务的线程的统计信息外的额外信息
-T { TASK | CHILD | ALL }
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。

-h:在一行上显示了所有活动,这样其他程序可以容易解析。
-I:在SMP环境,表示任务的CPU使用率/内核数量
-l:显示命令名和所有参数

在这里插入图片描述
参数说明:

PID:进程ID
%usr:进程在用户空间占用cpu的百分比
%system:进程在内核空间占用cpu的百分比
%guest:进程在虚拟机占用cpu的百分比
%CPU:进程占用cpu的百分比
CPU:处理进程的cpu编号
Command:当前进程对应的命令

举例

  1. 查看所有进程的 CPU 使用情况
    pidstat

  2. 显示各活动进程的内存使用统计
    pidstat -r 1

  3. cpu使用情况统计
    pidstat -u

  4. 内存使用情况统计
    pidstat -r

  5. 显示各个进程的IO使用情况
    pidstat -d

监控网络状态

netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况
在这里插入图片描述

1、Active Internet connections 有源TCP连接,其中"Recv-Q"和"Send-Q"指接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

2、Active UNIX domain sockets 有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。

列名解释:

Proto:显示连接使用的协议。

RefCnt:表示连接到本套接口上的进程号。

Types:显示套接口的类型。

State:显示套接口当前的状态。

Path:表示连接到套接口的其它进程使用的路径名。

netstat [选项]

常用选项

-a (all) 显示所有选项,默认不显示LISTEN相关。
-t (tcp) 仅显示tcp相关选项。
-u (udp) 仅显示udp相关选项。
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服务状态。
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

常用命令

  1. 列出所有端口 #netstat -a
  2. 列出所有 tcp 端口 #netstat -at
  3. 列出所有 udp 端口 #netstat -au
  4. 只显示监听端口 #netstat -l
  5. 只列出所有监听 tcp 端口 #netstat -lt
  6. 只列出所有监听 udp 端口 #netstat -lu
  7. 列出所有监听 UNIX 端口 #netstat -lx
  8. 显示所有端口的统计信息 #netstat -s
  9. 显示 TCP 或 UDP 端口的统计信息 #netstat -st 或 -s
  10. 输出中显示 PID 和进程名称 #netstat -p
  11. TCP各种状态列表 #netstat -nat |awk ‘{print $6}’
  12. 统计tcp数量监听的数量 #netstat -ant | wc -l

rmp 与yum

rpm包的管理

rpm 用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成
具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工
具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的
标志,但理念是通用的。
Linux的分发版本都有采用(suse,redhat, centos 等等),可以算是公认的行业标

rpm 包的简单查询指令

rpm –qa|grep xx

卸载rpm包:

rpm -e 包的名称
rpm -e -nodeps(强制删除) 包的名称

安装rpm包:

rpm -ivh 包全路径名称

rpm -ivh –-prefix=指定安装路径名 包全路径名称

参数说名

i=install 安装
v=verbose 提示
h=hash 进度

常用指令

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

  2. 过滤安装的软件包
    rpm -qa | more
    rpm -qa | grep X

  3. rpm -q 软件包名 :查询软件包是否安装

  4. rpm -qi 软件包名 :查询软件包信息

  5. rpm -ql 软件包名 :查询软件包中的文件

  6. rpm -qf 文件全路径名 查询文件所属的软件包

Yum 包的管理

Yum 是一个Shell前端软件包管理器。基于RPM包管理,能够从指定
的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并
且一次安装所有依赖的软件包。但需要联网才能操作

基本指令

  1. 查询yum服务器是否有需要安装的软件
    yum list|grep xx软件列表
  2. 安装指定的yum包
    yum install xxx 下载安装
  3. 卸载指定的包
    yum remove 程序名

搭建JavaEE环境

配置linux jdk 环境变量

/etc/profile 末尾加
JAVA_HOME=/opt/jdk-16.0.1
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH

配置完 生效 source /etc/profile

配置tomcal 服务器

JAVA_HOME=/opt/jdk-16.0.1
TOMCAT_HOME=/opt/apache-tomcat-10.0.7
PATH=$JAVA _ HOME/bin:$TOMCAT_HOME/bin:$PATH
export JAVA_HOME TOMCAT_HOME PATH

安装mysql

  1. 安装mysql yum仓库地址:
    https://dev.mysql.com/downloads/repo/yum/

  2. 查看mysql 版本
    mysqladmin --version

  3. 查看mysql用户组
    cat /etc/group|grep mysql

  4. 查看mysql用户
    cat /etc/passwd|grep mysql

  5. 设置mysql开机自启动
    systemctl enable mysqld.service

  6. 查看mysql状态
    systemctl status mysqld.service

  7. 启动mysql
    systemctl start mysqld.service

  8. 停止mysql
    systemctl stop mysqld.service

  9. 重启mysql
    systemctl restart mysqld.service

  10. 显示安装后的随机密码
    cat /var/log/mysqld.log | grep password

  11. 登录及修改密码
    ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘your password’;
    设置密码低级别
    set global validate_password.policy=0;
    再次修改成想要的密码
    ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘newpassword’;

Mysqlbinlog 日志

在这里插入图片描述

mysql 的备份与恢复指令mysqldump

在这里插入图片描述
在这里插入图片描述
举例

  1. 导出数据库中所有表结构;只导出表结构, 不导出表中的数据
    mysqldump --opt -d 数据库名称 -u用户名 -p密码 > 保存文件路径

  2. 导出数据库中所有表中的数据;只导出表中的数据,不导出表结构
    mysqldump -t 数据库名称 -u用户名 -p密码 > 保存文件路径

  3. 导出数据库中所有的表结构和数据;导出表结构和数据
    mysqldump 数据库名称 -u用户名 -p密码 > 保存文件路径

  4. 导出指定表的结构和数据
    mysqldump -u用户名 -p密码 -B 数据库名称 --table 表名 > 保存文件路径/文件名

  5. 导出指定表数据,只导出数据,不导出表结构
    mysqldump -t 数据库名称 -u用户名 -p密码 --table 表名 > 保存文件路径/文件名

  6. 将备份文件导入到数据库
    mysql -u用户名 -p密码 数据库名称 < 用于恢复数据库的数据文件路径/文件名

mysql import.source
在这里插入图片描述
mysqlshow

在这里插入图片描述

从linux 系统客户机远程登陆 linux 系统服务机

ssh 用户名@IP
例如:ssh atguigu@192.168.188.131
使用 ssh 访问,如访问出现错误。可查看是否有该文件 ~/.ssh/known_ssh 尝试删除该文件解决。

登出 :exit 或者 logout

Shell编程

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

执行方式

前提

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

执行方式

方式1(输入脚本的绝对路径或相对路径)
1)首先要赋予helloworld.sh 脚本的+x权限
chmod 744 helloworld.sh
./helloworld.sh
2)执行脚本
方式2
sh 脚本

Shell的变量

系统变量和用户自定义变量。
系统变量:$HOME、$PWD、$SHELL、$USER等等
显示当前shell中所有变量:set

变量的定义

  • 定义变量:变量=值

  • 撤销变量:unset 变量

  • 声明静态变量:readonly变量,注意:不能unset

定义变量的规则

  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。

  • 等号两侧不能有空格

  • 变量名称一般习惯为大写

将命令的返回值赋给变量

  • A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A

  • A=$(ls -la) 等价于反引号

设置环境变量

  1. export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
  2. source 配置文件 (功能描述:让修改后的配置信息立即生效)
  3. echo $变量名 (功能描述:查询环境变量的值)

参数变量

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

基本语法

$n (功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参
数需要用大括号包含,如${10})
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)

预定义变量

就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的值。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

示例:
在这里插入图片描述

运算符

基本语法

  1. $((运算式))或$[运算式]
  2. expr m + n 注意expr运算符间要有空格
  3. expr m - n
  4. expr *, /, % 乘,除,取余

示例
在这里插入图片描述

条件判断

基本语法

[ condition ](注意condition前后要有空格)
非空返回true(0为true,>1为false)

判断语句

常用判断条件

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

流程控制

if 判断

基本语法

if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi

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

示例

在这里插入图片描述

case 语句

基本语法

case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

示例:

在这里插入图片描述

for 循环

基本语法

  1. 基本语法

    for 变量 in 值1 值2 值3…
    do
    程序
    done

  2. 基本语法

    for (( 初始值;循环控制条件;变量变化))
    do
    程序
    done

示例:

在这里插入图片描述

while 循环

基本语法
while [ 条件判断式 ]
do
程序
done

示例

在这里插入图片描述

读取控制台输入

read(选项)(参数)

选项:

-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
-p 后面跟提示信息,即在输入前打印提示信息。
-e 在输入的时候可以使用命令补全功能。
-n 后跟一个数字,定义输入文本的长度,很实用。
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
-t 后面跟秒数,定义输入字符的等待时间。
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的

参数

变量:指定读取值的变量名

示例:

在这里插入图片描述

函数

系统函数

basename 函数

功能:返回完整路径最后/ 的部分,常用于获取文件名
basename [pathname] [suffix]
basename ./dome.sh
basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)
basename ./dome.sh .sh
字符,然后将字符串显示出来。

选项

suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

dirname 函数

功能:返回完整路径最后/ 的前面的部分,常用于返回路径部分

dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

dirname ./dome.sh

自定义函数

基本语法
function funname[()]
{
Action;
[return int;]
}
调用直接写函数名:funname [值]

示例

在这里插入图片描述

使用shell 编程定时备份数据库

1 编写数据库脚本 mysql_db_backup.sh

echo "==========备份的路径是 $BACKUP/$DATETIME.tar.gz"
  

#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root

#备份数据库名
DATABASE=mysqlDB

#创建备份的路径。如果路径存在使用,否则创建

[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"

#执行mysql的备份数据指令

mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz

#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
rm -rf $BACKUP/$DATETIME

#删除10天前的目录
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "=====备份成功======"

2 添加执行权限

 chmod +x mysql_db_backup.sh

3 添加定时计划–每周二凌晨3点00分执行备份
crontab -e
0 3 * * 2 /usr/sbin/mysql_db_backup.sh

4 重启crontab

 systemctl restart crond.service

5 恢复数据库备份文件

#SQL备份文件恢复:
mysql -u root -p  mysqlDB < dbback.sql

#压缩文件恢复:
gunzip < dbback.sql.gz | mysql -u root -p mysqlDB 

常见问题

/mnt/hgfs/下不显示共享文件夹的处理办法

方式 一
vmware-hgfsclient 查看共享文件

vmhgfs-fuse .host:/ /mnt/hgfs --挂载

每次开机需要重新执行上述命令1

方式 二

重置虚拟网络编辑器
虚拟机有个编辑,编辑里有个虚拟网络编辑器,直接重置下,就ok了,重启虚拟机依然有效

centos6 已经不支持yum

XShell连接虚拟机输入命令卡顿问题解决

  1. 打开会话管理器
  2. 选中正在使用的会话,鼠标右键选择属性
  3. 定位到【连接】->【ssh】->【隧道】,选择【隧道】
  4. 将【转发X11连接到(X)】复选框取消掉
  5. 最后一步:点击确定,重新连接

在这里插入图片描述

rpm 安装mysql错误

这是由于yum安装了旧版本的GPG keys造成的
警告:mysql-community-server-8.0.25-1.el8.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY

后面加上 --force --nodeps

mysql 备份出现问题:“mysqldump: command not found”,

ln -fs /usr/local/mysql/bin/mysqldump /usr/bin
ln -fs /usr/local/mysql/bin/mysql /usr/bin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值