主要目录结构
/ #根目录
├── 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秒
举例
-
要显示 current.log 文件的最后 10 行
tail current.log -
监控current.log的变化
tail -f current.log -
显示文件 current.log 的内容,从第 20 行至文件末尾
tail -n +20 current.log -
显示文件 current.log 的最后 10 个字符
tail -c 10 current.log
>指令 和 >>指令
分别为输出重定向和 追加
- ls -l >文件 (功能描述:列表的内容写入文件a.txt中(覆盖写))
- ls -al >>文件 (功能描述:列表的内容追加到文件aa.txt的末尾)
- 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 指令
- date (功能描述:显示当前时间)
- date +%Y (功能描述:显示当前年份)
- date +%m (功能描述:显示当前月份)
- date +%d (功能描述:显示当前是哪一天)
- 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:仅选择与整行完全匹配的匹配项。精确匹配整行内容(包括行首行尾那些看不到的空格内容都要完全匹配)
常用举例
-
查找指定进程 :ps -ef|grep java
-
查找指定进程个数: ps -ef|grep -c java
-
从文件中读取关键词进行搜索,默认是显示的是行
命令1:cat test.txt | grep -f test2.txt
命令2(显示行号):cat test.txt | grep -nf test2.txt -
反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。查找文件名中包含 test 的文件中不包含test 的行
grep -v test *test* -
以递归的方式查找符合条件的文件。例如,查找指定目录/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中每个文件
有所有者、所在组、其它组的概念。
- 所有者
- 所在组
- 其它组
文件/目录 所有者
-
查看文件的所有者
指令:ls –ahl -
修改文件所有者
chown 用户名 文件名 -
组的创建
groupadd 组名
文件/目录 所在者
基本指令
ls –ahl
修改文件所在的组
chgrp 组名 文件名
其它组
除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。
改变用户所在组
- usermod –g 组名 用户名
- usermod –d 目录名 用户名 改变该用户登陆的初始目录。
权限的基本介绍
ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
0-9位说明
- 第0位确定文件类型(d, - , l , c , b)
- 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User
- 第4-6位确定所属组(同用户组的)拥有该文件的权限,—Group
- 第7-9位确定其他用户拥有该文件的权限 —Other
10个字符确定不同用户能对文件干什么
第一个字符代表文件类型:文件 (-),目录(d),链接(l)
其余字符每3个一组(rwx) 读® 写(w) 执行(x)
第一组rwx : 文件拥有者的权限是读、写和执行
第二组rw-: 与文件拥有者同一组的用户的权限是读、写但不能执行
第三组r-- : 不与文件拥有者同组的其他用户的权限是读不能写和执行
权限管理
rwx作用到文件
- [ r ]代表可读(read): 可以读取,查看
- [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
- [ x ]代表可执行(execute):可以被执行
rwx 作用到目录
- [ r ]代表可读(read): 可以读取,ls查看目录内容
- [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
- [ x ]代表可执行(execute):可以进入该目录
修改权限
通过chmod指令,可以修改文件或者目录的权限
方式一
+ 、- 、= 变更权限
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
- chmod u=rwx,g=rx,o=x 文件目录名
- chmod o+w 文件目录名
- 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 任务调度
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
-
系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
-
个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。
crontab [选项]
-u 指定一个用户
-l 列出某个用户的任务计划
-r 删除某个用户的任务
-e 编辑某个用户的任务
举例:
-
查看crond.service的启动状态
stemctl status crond.service -
开启crond.service服务命令
systemctl start crond.service -
停止crond.service服务命令
systemctl stop crond.service -
每隔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 -
每天凌晨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
如何增加一块硬盘?
- 虚拟机添加硬盘
-
分区 fdisk /dev/sdb
开始对/sdb分区
• m 显示命令列表
• p 显示磁盘分区同 fdisk –l
• n 新增分区
• d 删除分区
• w 写入并退出
说明: 开始分区后输入n,新增分区,然后选择p ,分区类型为主分区。两次回车 默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
-
格式化 mkfs -t ext4(分区类型) /dev/sdb1
-
挂载 mount 设备名称 挂载目录
- 创建目录 /home/newdisk
- 开始挂载 mount /dev/sdb1 /home/newdisk
取消挂载 umount 设备名称 或者 挂载目录
-
设置可以自动挂载 。
设置永久挂载
1 vim /etc/fstab
2 /dev/sdb1 /home/newdisk ext4 defaults 0 0 -
添加完成使用mount -a 即刻生效
磁盘情况查询
df -h
查询指定目录的磁盘占用情况
du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
实用指令
-
统计/home文件夹下文件的个数
ls -l /home |grep "^-" | wc -l
-
统计/home文件夹下目录的个数
ls -l /home | grep "^d" | wc -l
-
统计/home文件夹下文件的个数,包括子文件夹里的
ls -lR /home | grep "^-" | wc - l
-
统计文件夹下目录的个数,包括子文件夹里的
ls -lR /home | grep "^d" | wc - l
-
以树状显示目录结构
tree
网络配置
测试主机之间网络连通性
ping 目的主机
linux网络环境配置 -指定固定ip
1 查看网卡 IP addr
2 编辑 new vim /etc/sysconfig/network-scripts/ifcfg-网卡名
3 重启网络服务
nmcli c reload
进程及服务管理
进程管理
在LINUX中,每个执行的 程序(代码)都称为一个进程。每一个进程都分配一
个ID号。
每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。
进程有5种状态
- 运行 ( 正在运行或在运行队列中等待 )
- 中断 ( 休眠中, 受阻, 在等待某个条件的形成或接受到信号 )
- 不可中断 ( 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生 )
- 僵死 ( 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放 )
- 停止 ( 进程收到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 :显示后台进程运行的参数
主要指令
- ps a 显示现行终端机下的所有程序,包括其他用户的程序。
- ps -A 显示所有进程。
- ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标
示。 - ps -e 此参数的效果和指定"A"参数相同。
- ps e 列出程序时,显示每个程序所使用的环境变量。
- ps f 用 ASCII 字符显示树状结构,表达程序间的相互关系。
- ps -H 显示树状结构,表示程序间的相互关系。
- ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
- ps s 采用程序信号的格式显示程序状况。
- ps S 列出程序时,包括已中断的子程序资料。
- ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
- ps -u root 显示root用户信息
- 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 进程名称
通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用
常用指令
-
kill -stop pid
停止一个进程,而并不消灭这个进程。
-
kill -cont pid
重新开始一个停止的进程。
-
kill pid
强迫进程立即停止,并且不实施清理操作。
-
kill -9 pid
强制终止某进程
-
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 #更改为图形界面启动
常用指令
- systemctl start firewalld.service 开启防火墙
- systemctl status firewalld.service 查看防火墙状态
- firewall-cmd --state 查看防火墙状态
- systemctl stop firewalld.service 执行停止运行防火墙命令
- firewall-cmd --zone=public --list-ports 查看防火墙所有开放的端口
- firewall-cmd --zone=public --list-ports 查看防火墙所有开放的端口
停用、启用、查看当前启用的端口
-
firewall-cmd --zone=public --add-port=5672/tcp #开放5672端口
-
firewall-cmd --zone=public --remove-port=5672/tcp #关闭5672端
-
firewall-cmd --reload # 配置立即生效
启动、终止、重启 httd服务
- systemctl start httpd.service #启动
- systemctl stop httpd.service #停止
- systemctl restart httpd.service #重启
设置httd服务 开机启动/关闭
- systemctl enable httpd.service #开机启动
- systemctl disable httpd.service #开机不启动
检查httpd状态
- 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命令行的输出导入到一个文件中
对应的显示的各项参数说明
交互操作说明
常用操作
-
监视特定用户
top 命令窗口下 按u 输入用户名监控 -
终止指定的进程
top 命令窗口下 按k 输入需要结束的进程号id -
指定系统状态更新的时间(每隔10秒自动更新,默认是3秒刷新)
top -d 10 -
显示进程的绝对路径
在top的命令行窗口下,按下c键即可。 -
按照cpu使用率进行排序显示
top -o +%CPU -
保存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总数.
举例:
- iostat -d -k 1 1
查看TPS和吞吐量信息 - iostat -d -x -k 1 1
查看设备使用率(%util)、响应时间(await) - iostat -c 1 2
查看cpu状态
间隔1秒显示一次,总共显示2次 - iostat -d sda
显示指定硬盘信息 - iostat -d 2
每隔2秒,显示一次设备统计信息. - 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等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈。
举例:
-
显示活跃和非活跃内存统计信息
vmstat -a -
显示从系统启动以来的fork数量
vmstat -f -
显示内存使用的详细信息
vmstat -s -
显示磁盘相关统计信息(磁盘的读/写情况)
vmstat -d -
查看/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:当前进程对应的命令
举例:
-
查看所有进程的 CPU 使用情况
pidstat -
显示各活动进程的内存使用统计
pidstat -r 1 -
cpu使用情况统计
pidstat -u -
内存使用情况统计
pidstat -r -
显示各个进程的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命令。
常用命令
- 列出所有端口 #netstat -a
- 列出所有 tcp 端口 #netstat -at
- 列出所有 udp 端口 #netstat -au
- 只显示监听端口 #netstat -l
- 只列出所有监听 tcp 端口 #netstat -lt
- 只列出所有监听 udp 端口 #netstat -lu
- 列出所有监听 UNIX 端口 #netstat -lx
- 显示所有端口的统计信息 #netstat -s
- 显示 TCP 或 UDP 端口的统计信息 #netstat -st 或 -s
- 输出中显示 PID 和进程名称 #netstat -p
- TCP各种状态列表 #netstat -nat |awk ‘{print $6}’
- 统计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 进度
常用指令
-
查询所安装的所有rpm软件包
rpm -qa -
过滤安装的软件包
rpm -qa | more
rpm -qa | grep X -
rpm -q 软件包名 :查询软件包是否安装
-
rpm -qi 软件包名 :查询软件包信息
-
rpm -ql 软件包名 :查询软件包中的文件
-
rpm -qf 文件全路径名 查询文件所属的软件包
Yum 包的管理
Yum 是一个Shell前端软件包管理器。基于RPM包管理,能够从指定
的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并
且一次安装所有依赖的软件包。但需要联网才能操作
基本指令
- 查询yum服务器是否有需要安装的软件
yum list|grep xx软件列表 - 安装指定的yum包
yum install xxx 下载安装 - 卸载指定的包
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
-
安装mysql yum仓库地址:
https://dev.mysql.com/downloads/repo/yum/ -
查看mysql 版本
mysqladmin --version -
查看mysql用户组
cat /etc/group|grep mysql -
查看mysql用户
cat /etc/passwd|grep mysql -
设置mysql开机自启动
systemctl enable mysqld.service -
查看mysql状态
systemctl status mysqld.service -
启动mysql
systemctl start mysqld.service -
停止mysql
systemctl stop mysqld.service -
重启mysql
systemctl restart mysqld.service -
显示安装后的随机密码
cat /var/log/mysqld.log | grep password -
登录及修改密码
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘your password’;
设置密码低级别
set global validate_password.policy=0;
再次修改成想要的密码
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘newpassword’;
Mysqlbinlog 日志
mysql 的备份与恢复指令mysqldump
举例
-
导出数据库中所有表结构;只导出表结构, 不导出表中的数据
mysqldump --opt -d 数据库名称 -u用户名 -p密码 > 保存文件路径 -
导出数据库中所有表中的数据;只导出表中的数据,不导出表结构
mysqldump -t 数据库名称 -u用户名 -p密码 > 保存文件路径 -
导出数据库中所有的表结构和数据;导出表结构和数据
mysqldump 数据库名称 -u用户名 -p密码 > 保存文件路径 -
导出指定表的结构和数据
mysqldump -u用户名 -p密码 -B 数据库名称 --table 表名 > 保存文件路径/文件名 -
导出指定表数据,只导出数据,不导出表结构
mysqldump -t 数据库名称 -u用户名 -p密码 --table 表名 > 保存文件路径/文件名 -
将备份文件导入到数据库
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来启动、挂起、停止甚至是编写一些程序。
执行方式
前提
- 脚本以#!/bin/bash开头
- 脚本需要有可执行权限
执行方式
方式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) 等价于反引号
设置环境变量
- export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
- source 配置文件 (功能描述:让修改后的配置信息立即生效)
- echo $变量名 (功能描述:查询环境变量的值)
参数变量
获取到命令行的参数信息,就可以使用到位置参数变量
比如 : ./myshell.sh 100 200 , 这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息
基本语法
$n (功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参
数需要用大括号包含,如${10})
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)
预定义变量
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
基本语法
$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的值。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
示例:
运算符
基本语法
- $((运算式))或$[运算式]
- expr m + n 注意expr运算符间要有空格
- expr m - n
- expr *, /, % 乘,除,取余
示例
条件判断
基本语法
[ condition ](注意condition前后要有空格)
非空返回true(0为true,>1为false)
判断语句
常用判断条件
- 两个整数的比较
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于 - 按 按 照文件权限进行判 断
-r 有读的权限
-w 有写的权限
-x 有执行的权限 - 按照文件类型进行判 断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
流程控制
if 判断
基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi
说明:中括号和条件判断式之间必须有空格
示例
case 语句
基本语法
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
示例:
for 循环
基本语法
-
基本语法
for 变量 in 值1 值2 值3…
do
程序
done -
基本语法
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连接虚拟机输入命令卡顿问题解决
- 打开会话管理器
- 选中正在使用的会话,鼠标右键选择属性
- 定位到【连接】->【ssh】->【隧道】,选择【隧道】
- 将【转发X11连接到(X)】复选框取消掉
- 最后一步:点击确定,重新连接
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