Linux
Linux高级配置
- Linux分配身份证号码(ip):静态ip配置
- Linux起名字(hostname):临时设置 + 永久设置
- Linux的金钟罩(防火墙):临时关闭 + 永久关闭
一、 IP的设置
理论上来说,Linux虚拟机每次重启都会获取新的IP地址,这样XShell就和失去连接,所以我们将IP修改为静态IP。
-
在编辑中,打开虚拟网络编辑器查看自己的IP:
网关: -
然后输入命令:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
进入修改:
修改:
- IPADDR:前面三位看自己的IP,第四位从3~255均可
- GETWAY:看自己的网关
- DNS1:与GETWAY一样
- 重启网卡:
service network restart
,确认后XShell失效,我们到VM里再查看是否修改成功: - 我们将之前复制的那台虚拟机也进行修改,最后:
二、 hostname的设置
IP很难记住,为了方便记忆给Linux起名字。
- 先查看我们的主机名字:
hostname
: - 临时设置:立即后生效,重启失效
- 永久设置:重启生效
工作中我们都是结合设置,这样立即生效,永久有效。
三、 防火墙的配置
在学习中最好关闭防火墙,因为我们需要不同虚拟机之间连接,若不关闭可能与遇到机器之间无法通信的问题。注意:在实际工作中防火墙不可以关闭!
-
临时关闭:立即后生效,重启失效
关闭指令:
systemctl stop firewalld
查看指令:systemctl status firewalld
-
永久关闭:重启生效
永久关闭指令:
systemctl disable firewalld
四、 Linux之shell编程
1. 什么是shell
- shell是用户与Linux操作系统沟通的桥梁
- shell编程就是把之前的单个命令按照一定的规则和逻辑组装到一个文件中,之后就可以直接执行那个文件。
2. 第一个shell脚本
- shell脚本的后缀名通常为:
.sh
- shell脚本的第一行内容是:
#!/bin/bash
,类似导包 - 注意,第一行的
#
不是注释,其他行以#
开头的是注释
- 编写shell脚本:
- 执行shell脚本:
- 格式:
bash hello.sh
或sh hello.sh
- 不同场景:
./hello.sh
或hello.sh
- 单步执行:
bash -x
- 添加权限:
chmod u+x hello.sh
3. 解析:
- 按照基本格式运行:
- 使用
./hello.sh
运行:需要添加权限才可以运行: - 使用
hello.sh
运行:因为Linux的当前目录指的是PATH,所以我们需要修改PATH,否则报错: - 单步执行:
五、 shell中的变量
- shell中的变量不需要声明,初始化也不需要指定类型
- shell是弱类型语言
- 变量命名:只能使用数字、字母和下划线,且不能以数字开头
- 变量赋值是通过
=
进行赋值,在变量、等号和值之间不能有空格
- 解析:
-
赋值:
-
运行:
-
字符串拼接:
六、 shell中四种变量的使用
1. 本地变量
格式:VAR_NAME=VALUE
应用场景:在shell脚本中定义一些临时变量时使用,对当前shell进程的子shell进程及其他shell进程无效
安装pstree:yum install -y psmisc
2. 环境变量
格式:export VAR_NAME=VALUE
应用场景:用于设置临时的环境变量,对子shell进程有效,对其他shell进程无效
注意:设置永久环境变量,需要添加到配置文件/etc/profile
中,然后执行source/etc/profile
可立刻生效
3. 位置变量
格式:location.sh abc xyz
通过$0 、$1 、$2 、$3……获取对应内容
位置变量相当于Java中main函数中的args参数,可以在shell脚本中动态获取外部参数
4. 特殊变量
$?:上一条命令的返回状态码,状态码在0255之间,成功是0,失败则是1255之间的任意数字,不同状态码表示不同的错误信息。
$#:shell脚本所有参数的个数
s
5. 变量和引号的特殊使用
‘ ’:单引号不解析变量 echo '$name’
" ":双引号解析变量 echo "$name"
``:反引号是执行并引用命令的执行结果 echo `$name `
七、 shell中的循环和判断
- for循环
- while循环
- if判断
1. for循环
for ((i=0;i<10;i++>))
do
循环体……
done
for i in 1 2 3
do
循环体……
done
2. while循环
适用于循环次数未知,或不便于使用for直接生成较大列表时
while 测试条件
do
循环体……
done
测试条件为“真”,则进入循环,反之,则退出循环
测试条件:
- 格式:
test EXPR
或者[ EXPR ]
中括号和表达式之间的空格不能少 - 整型测试:-gt(大于)、-lt(小于)、 -ge(大于等于)、 -le(小于等于)、 -eq(等于)、 -ne(不等于)
- 字符串测试:=(等于)、!=(不等于)
3. if判断
- 单分支
- 双分支
- 多分支
- 单分支
if 测试条件
then
选择分支
fi
- 双分支
if 测试条件
then
选择分支1
else
选择分支2
fi
- 多分支
if 测试条件1
then
选择分支1
elif 测试条件2
then
选择分支2
……
else
选择分支n
fi
八、 shell扩展
- 后台模式运行脚本:
nohup xxx.sh &
我们希望运行中的脚本不影响我们的其他操作,例如之前运行的while1.sh脚本会一直在前台打印输出yes,这时我们需要把该脚本放入后台运行。只需在后面添加
&
,但是如果断掉当前的虚拟机,脚本也会停止,所以我们在前面添加nohup
代码:nohup sh while1.sh &
停止运行代码:ps -ef|grep while1.sh
然后 kill PID
- 标准输出(1)、标准错误输出(2)、重定向(> 或者 >>)
- 标准输出:它表示命令或者程序输出的正常信息
- 标准错误输出:它表示命令或者程序输出的错误信息
- 重定向:对于标准输出和标准错误输出可以使用重定向把它输出的信息保存到文件中,
>>
表示追加重定向,1
表示标准输出,可以省略;2
表示标准错误输出。
- 综合案例
nohup hello.sh >/dev/null 2>&1 &
九、 Linux中的定时器crontab
针对周期性需要被执行的命令,使用定时器去调度
crontab作用于周期性被执行的命令:每天凌晨1点去“偷菜”
-
格式:
* * * * * user-name command
-
配置之前先查看crontab服务状态:
systemctl status crond
-
启动/停止crontab服务:
systemctl start/stop crond
-
添加定时任务:
vi /etc/crontab
-
查看crontab的执行日志:
tail -f /var/log/cron
-
如果设置任务每七分钟之星一次,那么任务将会在什么时间点执行?答:是每小时的0,7,14……开始执行,是每小时,而不是根据我们配置好的时间开始推移