命令模式:复制粘粘删除撤销
dd | 删除(剪切,可P粘贴)光标所在整行 |
5dd | 删除(剪切)从光标处开始的5行 |
yy | 复制光标所在整行 |
5yy | 复制从光标处开始的5行 |
n | 显示搜索命令定位到的下一个字符串 |
N | 显示搜索命令定位到的上一个字符串 |
u | 撤销上一步的操作 |
p | 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面 |
清空文件所有内容: 1000dd
a键:光标后面一位
i键:光标当前位置切换到输入模式
o键:在光标的下面再创建一个空行
末行模式:
:w 保存
:q 退出
:q! 强制退出(放弃对文档的修改内容)
:wq! 强制保存退出
:set nu 显示行号
:set nonu 不显示行号
:命令 执行该命令
:整数 跳转到该行
:s/one/two 将当前光标所在行的第一个one替换成two
:s/one/two/g 将当前光标所在行的所有one替换成two
:%s/one/two/g 将全文中的所有one替换成two
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串
- 文件测试语句
- 双分支
- 多分支
- 4.3.2 for条件循环语句
- for 变量 in
- do
- done
- do
- 命令序列
- done
- EG:猜价格 echo "`expr $RANDOM % 1000`"
- 4.4 计划任务服务程序
- 一次计划任务:
在Linux系统中,主机名大多保存在/etc/hostname文件中
1、 /etc/sysconfig/network-scripts
2、 vim ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=static
NAME=ens160
ONBOOT=yes
IPADDR=192.168.10.10
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=192.168.10.1
3、nmcli connection reload ens160
[root@linuxprobe ~]# cd
/etc/yum.repos.d/
[root@linuxprobe yum.repos.d]# vim rhel8.repo
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
enabled=1
gpgcheck=0
创建挂载点后进行挂载操作,并设置成开机自动挂载(详见第6章):
[root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom
[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
mount: /media/cdrom: WARNING: device write-protected, mounted
read-only.
[root@linuxprobe yum.repos.d]# vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults 0 0
通过查看SHELL变量可以发现,当前系统已经默认使用Bash作为命令行终端解释器了:
[root@linuxprobe ~]# echo $SHELL
/bin/bash
脚本声明 #!/bin/bash
脚本注释
增加执行权限 chmod u+x example.sh
$0对应的是当前Shell脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值,而$1、$2、$3……则分别对应着第N个位置的参数值
格式 :[ 测试判断 文件 ]
Eg: 判断/etc/fstaba是否为目录类型
[root@linuxprobe ~]# [ -d /etc/fstab ]
[root@linuxprobe
~]# echo $?
1
0表示正常,非0表示错误
前后的空格不能少
2、逻辑测试语句
判断+返回,用逻辑语句
&& 逻辑与 前面成功,执行后面
|| 逻辑或 前面失败,执行后面
! 逻辑非 对判断结果取反值,之前若为正确则变成错误,若为错误则变成正确
下图,第一个!是逻辑非,第二!是不等于
整数比较运算符,仅能对数字操作,因为等号与赋值冲突,大于小于号与输出重定向和输入重定向冲突,所有用以下字符表示比较
-eq 是否等于 -nq 是否不等于
-lt 是否小于 -gt 是否大于
-le 是否小于等于 -ge 是否大于等于
[ `free -m | grep Mem | awk '{print $4}'` -lt 150 ] && echo "low" || echo "zugou"
字符串比较
= | 比较字符串内容是否相同 |
!= | 比较字符串内容是否不同 |
-z | 判断字符串内容是否为空 |
if
then
fi
if
then
else
fi
eg: 判断IP地址是否在线
(注意空格不能少)
if
then
elif
then
else
fi
eg:批量创建用户
变量大写,命令小写
eg:批量ping列表里的IP,判断是否存活
`命令` 等同于 $(命令)
while
at 时间
命令语句
Ctrl+d退出
Eg:
[root@linuxprobe ~]# at 23:30
warning: commands will be executed using /bin/sh
at> systemctl restart httpd
at> <EOT>(Ctrl+d)
job 1 at Wed Jan 26 23:30:00 2022
[root@linuxprobe ~]# at -l
1 Wed Jan 26 23:30:00 2022 a root
[root@linuxprobe ~]# at -d 1 删除指定任务
[root@linuxprobe ~]# at -l
合并方式:echo "systemctl restart httpd" | at 23:30
crontab 周期执行
crond 服务名称
crontab 配置工具
crontab 命令与vim/etc/crontab效果一样
-e 编辑计划任务
-u 指定用户名称
-l 列出任务列表
-r 删除计划任务 只能全部删除,部分删除的话要-e重新编辑
Eg1:
每周一、三、五的凌晨3:25,都需要使用tar命令把某个网站的数据目录进行打包处理,使其作为一个备份文件
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
Eg2:每周一至周五的凌晨1点自动清空/tmp目录内的所有文件
0 1 * * 1-5 usr/bin/rm -rf /tmp/*
注意:
用逗号(,)来分别表示多个时间段,用减号(-)来表示一段连续的时间周期
用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。
在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询
计划任务中的“分”字段必须有数值,绝对不能为空或是*号,而“日”和“星期”字段不能同时使用,否则就会发生冲突。
有时ctrontab无法生效,可能是crond服务没有启用:
systemctl status crond 查看服务状态
restart +enable 确保crond服务启动
root 可以管理自己和所有人
普通用户 只能管理自己