Linux 命令

解释:    [root@linux01 Desktop]#    root    用户,是超级用户    linux01 主机(主机名:linux01.hadoop.com)    Desktop    用户所在目录 (工作目录)    #         超级用户($代表普通用户)常用操作    历史命令(使用 ↑ ↓ ,获取历史命令 )    tab补全(输入文件名补全或提示)    clear (ctrl+l)    pwd (print name of current/working directory)        查看当前位置        家目录    root用户           /root                普通用户hadoop    /home/hadoop    man    命令     按q退出    命令 -help1. ls (list directory contents)2.  cd./  当前目录../  上一级目录cd ~cd  回到家目录3. mkdir:创建目录多级目录 -pmkdir -p a/b/c4. touch:改变文件属性5. rmdir 删除空目录rmdir test6. rm 删除文件或目录-r 迭代-f 强制:不要问我直接删7. cp:复制-r:递归复制目录8. mv (移动剪切、重命名)9. cat(查看较少内容)10. more分页向下查看(空格)逐行向下查看(回车)按q或者Ctrl+C终止退出查看的状态11. less12. head13. tail -3 文件查看文件后三行-f 动态查看,跟文件描述符-F 动态查看,跟随文件名14. 关机shutdown -h nowinit 015. 重启rebootinit 6

vi编辑器

  1. 命令模式
    ndd 删除当前行开始的n行
    nyy 复制当前行开始的n行
    p 粘贴到当前行后面
    u 撤销
  2. 插入模式
    在命令行模式,按a, i, o
    a:光标够
    i:光标位置
    o:光标下一行插入
  3. 底行模式
    在命令行模式下
    键入:进入底行模式

    w保存,q退出,!强制
    wq保存并退出
    q!强制退出,不保存修改

网络配置

su -  切换为超级用户1) 主机名不能以数字,.开头,包含特殊字符(*@$)    hostname            查看主机名    hostname centos01    临时修改主机名,重启失效    vi /etc/sysconfig/network    永久修改,重启生效2) 修改ip    1) 界面修改    2) # vi  /etc/sysconfig/network-scripts/ifcfg-eth0        ONBOOT=yes         //开机自动连接网络        BOOTPROTO=static  //设置为静态  dhcp为动态, none为不指定        # service network restart    3) 修改主机映射虚拟机    # vi /etc/hosts    192.168.247.110    centos01    Windows    C:\Windows\System32\drivers\etc\hostswindows ping  服务器    ping ip    ping 主机名服务器 ping 网关

用户和用户组

用户组:方便管理用户,举例: 学校为了方便管理学生,对学生进行分班

  • 查看用户

cat /etc/passwd

root :x:0:0:root:/root:/bin/bash
root 用户名
x 密码
0 用户id
0 用户组id
root 用户描述
/root 用户家目录
/bin/bash 用户所用的shell

  • 查看用户组

cat /etc/group

当创建一个用户,系统会默认创建一个和用户名相同的用户组

1. 用户类型

  1. root用户, 超级用户,最高权限,在实际的生产环境中,尽量不要使用root用户
    用户UID 0
  2. 普通用户
    用户UID 500开始
  3. 伪用户 系统给一些进程,分配ID号,这部分为伪用户,不能真正的登录,也没有家目录
    UID在1~499

2. 创建删除用户

  1. 创建用户
    # useradd xiefei
    # passwd 密码 设置或修改密码
  2. 删除用户
    # userdel -r xiefei 彻底删除用户

    -r递归删除用户家目录

3. 创建用户组

#groupadd 用户组

4. 切换用户

#su - 切换为root用户
#su - hadoop 切换为hadoop
su 和 su - 的区别:前者切换用户, 后者切换用户及用户环境
# exit 退出用户

用户文件和目录权限

drwxr-x--x
d 代表目录
- 代表文件
rwx 所属用户(u)的权限
r-x 所属用户组(g)的权限
--x 其他用户(o)的权限
( 用户是学生, 所属组是班级, 其他学生 举例分析 )

r 可读
w 可写
x 可执行
rwx 可读可写可执行
r-x 可读可执行

rwx 也可以表示为 111 7
rw- 110 6
r-x 101 5
r-- 100 4

  1. 修改权限

# chmod 764 test.c 修改为可读可写可执行
# chmod u+x test.c 为所属用户添加执行权限
# chmod g+w test.c 为所属用户组添加写权限
# chmod o-x test 删除其他用户的执行权限
# chomd 777 -R test/ 递归修改test的所有文件权限

  1. 修改所属用户

# chown hadoop msg.txt 把msg.txt修改为hadoop所有

  1. 修改所属用户组

# chgrp hadoop msg.txt

  1. 修改所属用户及所属用户组

# chown hadoop:hadoop -R hadoop/

  1. 向用户组添加用户及删除用户,查看用户所属用户组

    # gpasswd -a hadoop mygroup# gpasswd -d hadoop mygroup# groups hadoop

管道符|, 追加/覆盖符号

  1. 管道符 |

把前一个命令的输出结果传递给后面的命令处理
# cat /etc/passwd | more

  1. 使用grep过滤

# cat /etc/passwd | grep 'root'

  1. 过滤条件

# ll /etc/ | grep 'sysconfig'
# ifconfig | grep 'inet' 查看ip

  1. 添加 >>, 覆盖>

# ll > test.txt
# ll >> test.txt

  1. wc (word count)

-l 统计行
-w 统计word
# wc -l /etc/passwd
# wc -w test.c

  1. 统计文件或目录大小

# du -sh /lib

  1. 显示当前系统进程

# ps -ef
# ps -ef | grep 'java'

搜索命令 find

语法格式:

find 范围 条件

  1. 按文件名

# find / -name init
模糊查询带有关键字的: $ find /etc/ -name *work
查找关键字开头的文件: $ find /etc/ -name init*
匹配单个字符 $ find /etc/ -name ???work
不区分大小写匹配 $ find /etc/ -iname ???work

  1. 按文件大小

选项:-size
指定方式:+大于, -小于,不加符号表示等于
$ # find /etc/ -size +2M

  1. 按所属用户,用户组

# find /root -user hadoop
# find /root -group hadoop

  1. 按文件类型

# find /etc/ -name *work -type f 文件
# find /etc/ -name *s -type d 目录

sudo权限(# visudo)

root ALL=(ALL) ALL
user01 ALL=(root) NOPASSWD: ALL

第一个ALL是指网络中的主机,它指明user01用户可以在此主机上执行后面的命令。
第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。
最后一个ALL是指命令。

压缩解压

windows常见: .rar .zip
linux常见: .tar .tar.gz .gz

  1. 压缩解压为.tar

tar cvf content.tar Main.java msg.txt 将Main.java msg.txt压缩为 context.tar
tar xvf content.tar -C test 将content解压到test文件夹下

  1. 压缩解压为 .tar.gz

# tar -zcvf test.tar.gz ./ 将当前目录压缩
# tar -zxvf test.tar.gz -C ./ 压缩文件加压到当前目录

  1. 压缩解压: .gz 不保留源文件

压缩
$ gzip hello.mp4
解压
$ gunzip hello.mp4.gz
选项:
-z, --gzip, --gunzip, --ungzip filter the archive through gzip
-c, --create create a new archive
-x, --extract, --get extract files from an archive
-v, --verbose verbosely list files processed
-f, --file=ARCHIVE use archive file or device ARCHIVE
f后面必须跟上要处理的文件名

rpm包管理

  1. 查看安装软件

$ rpm -qa | grep jdk
查看某个文件属于哪个rpm包安装的
# rpm -qf /etc/ntp.conf

  1. 安装卸载

a) 安装:
# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm
用法: rpm -ivh 软件名(.rpm)
选项:-i install 代表安装
-vh 显示详细的进度
# rpm -ivh tree-1.5.3-3.el6.x86_64.rpm
b) 卸载
选项: -e 代表卸载 --erase
用法: rpm -e 软件名(.rpm) --nodeps (不验证依赖卸载)
# rpm -e tree-1.5.3-3.el6.x86_64 --nodeps
c) 卸载自带jdk
$ sudo rpm -e java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64 --nodeps
$ sudo rpm -e java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 --nodeps
//重新生效
$ source /etc/profile

  1. 安装jdk

    1. 创建两个目录

$ sudo mkdir /opt/software //安装包的存放目录
$ sudo mkdir /opt/modules //解压安装的目录

2. 修改目录的所属用户及所属用户组

$ sudo chown user01:user01 /opt/software/ /opt/modules/

3. 上传并解压jdk

$ tar -zxf jdk-7u67-linux-x64.tar.gz -C ../modules/

4. 配置环境变量

# vi /etc/profile
末尾添加
#JAVA_HOME
export JAVA_HOME=/opt/modules/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin

5. 使生效

#source /etc/profile

6. 检查是否成功

java -version

yum

  • 前提是必须连接外网
  • 用来解决rpm依赖性问题
  • 方便、快捷、自动解析依赖
  1. 查询

# yum list //查看yum源上拥有的软件
# yum list installed | more //查看系统中已经安装好的rpm包 等同于 rpm -qa
$ sudo yum list installed | grep tree

  1. 安装

# yum install httpd-devel.x86_64
选项:install 后缀不需要加.rpm 可以直接使用命令
选项:-y , 表示直接自动确认
# yum -y install httpd-devel.x86_64
$ sudo yum install tree

  1. 卸载

# yum -y remove httpd-devel.x86_64
$ sudo rpm -qa | grep tree

  1. 常见问题

不通外网,网络质量不佳

系统管理命令

  1. top 查看系统资源 -->相当于任务管理器

每隔3秒更新一次
按q退出浏览状态

  1. free 查看内存信息 --》yuan 可能会用到

选项:-m, 就是以MB格式显示

  1. df -l 查看硬盘分区信息
  2. ps -ef 查看系统进程
    ps -ef | grep crond

jps 查看系统正在运行的java进程

  1. kill 杀死正在进行的进程 -》结合jps一起使用

选项:-9
kill -9 【pid】

  1. ifconfig
  2. ping 检测网络质量和网络连接

ping 主机名
ip地址
域名

  1. netstat 查看网络端口

选项:
-t #监控tcp协议的进程
-l #listenning
-n #显示端口号信息
-p # 显示进程的PID
netstat -antp

  1. jps 查看正在运行的java进程
  2. vmstat 2 5

可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况
2 表示间隔时间
5 表示采集次数

关闭防火墙和安全子系统

--》在联机应用(分布式)中,一般会关闭防火墙。防火墙默认情况下,出于安全考虑会限制一些应用的网络访问(比如rpc通信端口),为了保证多机通信的稳定,可以选择关闭防火墙

  1. 关闭防火墙并且不开机启动 (/etc/inittab 启动级别)
    1. 关闭Linux 防火墙    # service iptables stop     ##关闭防火墙    # service iptables status   ##查看防火墙状态     iptables: Firewall is not running.    2. 设置不开机启动防火墙    #  chkconfig iptables off   ##不随机启动  设置开机启动使用 on    3. 查看防火墙的开机启动设置    $ sudo chkconfig --list | grep iptables
  1. 关闭安全子系统
# vi /etc/sysconfig/selinux

修改下面SELINUX=enforcing为 SELINUX=disabled

shell 编程

shell脚本的规范

  1. 第一行:#!/bin/sh开头 或 #!/bin/bash开头

声明是什么类型的shell

  1. 注释:#
  2. shell脚本以.sh结尾
  3. 执行shell基本的两种方式:

1)sh hello.sh #执行shell脚本
2)./hello.sh #这种方式要求这个脚本拥有执行权限

shell的变量 num=123;str="hello world"
定义变量没有数据类型
引用变量需要在变量前面添加$符号

shell变量类型

环境变量

保存系统运行时使用的变量
》用户变量
.bash_profile 每个用户主目录下都有这么这个文件,用来保存每个用户的环境变量
》系统变量
/etc/profile:系统全局生效的配置文件

位置变量

将传递给脚本的参数保存在位置变量中
以便于在脚本中引用这些变量
Bash 定义9个位置变量:$1 ... $9
$0:代表的是当前脚本的名称

#! /bin/shecho "这是第一个变量$1"echo "这是第一个变量$2"echo "这是第一个变量$3"echo "这是第一个变量$4"echo "这是第一个变量$9"

预定义变量

$0:脚本名称
$!:后台运行的最后一个进程的PID号
$$:当前进程的ID号
$#:当前shell的参数个数
$*显示所有的参数内容(整体)
$@:显示所有的参数内容(逐个读取)
$?:判断,表示程序退出的代表(返回0代表成功,非0代表失败)

#! /bin/shecho "脚本名称:                $0"echo "当前进程的ID号:              $$"echo "当前shell的参数个数:   $#"echo "显示所有的参数内容(逐个读取:$@"aaaaa# 这里会打印一个非0的值, 表示前一行命令执行出错echo $?

自定义变量

  1. 语法格式:

name=value
等号两边不能有空格
变量对大小写敏感
调用变量的值$name

  1. 变量的赋值

1. 直接赋值 tag1=112
2. tag2=$tag1
3. szie=ls ~/ 将命令赋值给变量 飘号或者反引号
shell的字符串/命令(echo ):

#! /bin/sh# 赋值号前后不能有空格# 变量没有类型numOfPerson=100;echo $numOfPerson# 取变量numOfPerson赋值给nn=$numOfPersonecho "n=$numOfPerson"# 将ls -l /etc执行的内容赋值给strstr=`ls /etc`

"" '' 的区别

echo 可以不加引号 #可以正常输出的输出变量
echo 加单引号 #单引号内容原样输出,单引号将剥夺其中的所有字符的特殊含义
str='hello $num'
echo 加双引号 #双引号可以输出变量,输出"等,需转义
str="hello $num"

shell的字符串拼接
str="hadoop"
a="你好$str"

        a="你好"\$str

shell运算

  1. 算术

第一种写法 $(( ))
第二种写法 $[]
第三种写法 expr表达式 只能接受数值,expr本身是shell命令,输出的时使用反引号

            a=6;b=5            echo $((a+b))            echo $(( $a * $b ))            echo $[a+b]            echo $[ $a * $b ]            expr $a - $b            expr $a \* $b

  1. 逻辑运算

-》 && 逻辑与 (命令控制符)
cmd1 && cmd2 //前面的命令执行成功才会执行后面的命令
-》 || 逻辑或
cmd1 || cmd2 //前面的命令执行失败才会执行后面的命令
-》 ;无逻辑符号
cmd1 ; cmd2

内置测试判断

  1. 两种写法
            a=6            b=9        #第一种     变量和比较符之间空格可省略            if test 6 -gt 9            then                echo bigger            fi        #第二种    变量和比较符之间的空格必须            if [ $a -lt $b ]            then                echo smaller            fi
  1. 数值比较

-eq #equal 等于
-ne #not equal 不等于
-gt #greater than 大于
-ge #greater equal 大于等于
-lt #little than 小于
-le #little equal 小于等于
注意:在数值的比较中,不能使用”>“ "<"等符号来进行比较
在test 或 [] 进行测试的时候,必须要有空格

test $1 -gt 60* **-a** *$1 -lt 70 同一个条件内使用

[ $1 -ge 70* **-a** *$1 -lt 80 ]

elif [ $1 -ge 60 ] && [ $1 -lt 70 ]

$ [ "990" -le "995" ] && [ "123" -gt "33" ] 这里要用&&

  1. 字符串的比较

= 等于
!= 不等于
-z $str 长度为0则为真
-n "$str" 长度不为0则为真
$str 字符串不为空则为真

            #!/bin/sh            str1="abc"            str2="abc"            str3="cde"            str4=            if [ $str1 = $str2  ]            then                    echo  str1和str2相等            fi            if [ $str1 != $str3  ]            then                    echo str1和str3不相等            fi            if [ -z $str1  ]            then                    echo  str1长度为0            fi            if [ -n "$str3"  ]            then                    echo  str3长度不为0            fi            if [ $str1  ]            then                    echo  str1不为空            fi            if [ $str4  ]            then                    echo  str4不为空            fi
  1. 文件的测试

-d (directory) 如果是目录则为true
-f (file) 如果是文件则为true
-r 如果是可读则为true
-w 如果是可写则为true
-x exec 如果是可执行则为true
注意:可读可写可执行是针对于执行脚本的用户而言的权限

            #!/bin/sh            if [ -d $1  ]            then                echo 是目录            fi            if [ -f $1  ]            then                    echo 是文件            fi            if [ -r $1  ]            then                    echo 是可读的            fi            if [ -w $1  ]            then                    echo 是可写的            fi            if [ -x $1  ]            then                    echo 是可执行            fi
  1. 逻辑连接符:

三种:
1.非 !
2.与 -a
3.或 -o

            if [ -f  $1 -a $2 -gt 5]            then                echo  \$2  is $2                echo  "\$2 is bigger than 5 "             fi

流程控制

  1. if

if 条件判断
then
 command
elif 条件判断
then
 command
elif 条件判断
then
 command
...
else
 command
fi

        #!/bin/sh        echo please type age        read age        if  test $age -ge 0 -a $age -lt 3        then            echo  baby        elif [ $age -ge 3  -a $age -lt 7 ]        then            echo child        elif [ $age -ge 7 ] && [ $age -lt 18 ]        then            echo teenager        elif test $age -ge 18 && test $age -lt 40        then            echo youth        elif test $age -ge 40 && [ $age -lt 60  ]        then            echo man        else            echo older        fi
        #!/bin/sh        # read socre  and choose level        # read 相当于Java中的scanner 是一种交互式命令,读取设备的输入        echo "请输入学生成绩score:"        read score        if test $score -ge 90;        then                echo level A;        elif [ $score -ge  80  -a  $score -lt 90 ]        then             echo "level B";        elif test  $score -ge  70  -a  $score -lt 80        then             echo "level C";        elif [ $score -ge  60 ] && [ $score -lt 70 ]        then             echo "level D";        else                echo 不及格;        fi
  1. 循环语句

1)for 循环
I)
for((初始化变量值;结束循环条件;循环控制语句))
do
循环体
done

                #!/bin/sh                sum=0                for ((i=0;i<10;i++))                do                    echo $i                    sum=$[ $sum + i ]                done                echo $sum

2)第二种语法格式:

for 变量 in 值1 值2 ...值N

do

循环体

done

                #!/bin/sh                for MONTH in Jan Feb Mar Apr May Jun July Aug Sep Oct Nov Dec                do                    echo $MONTH                done
                #!/bin/sh                for file in `/bin/ls $1`;                do                echo $file;                done
  1. while 循环

    1.

while [ condition #循环条件 ]
do
#statements
#【循环体】
#【循环控制】
done

            #!/bin/sh            i=1            while [ $i -le 10 ]            do                sum=$((sum+i))                i=$[ i + 1 ]            done            echo $sum
            #!/bin/sh            i=1            sum=0            while test $i -le 10            do                sum=$[ $sum + $i ]                i=`expr $i + 1`            done            echo $sum
  1. 第二种语法格式:

while read -r line

do

#【循环体】

done

            #!/bin/sh            #Read /ect/sysconfig/network-scripts/ifcfg-eh0 and print out            FILE=/etc/sysconfig/network-scripts/ifcfg-eh0            while read -r line            do                echo $line            done < $FILE

read中

参数 -r 屏蔽,

如果没有该选项,则作为一个转义字符,有的话 就是个正常的字符了。
command < file 将输入重定向到 file。

  1. case 类似于java中的 swich case

第一种语法格式:

            #!/bin/sh            echo '输入 1 到 4 之间的数字:'         echo '你输入的数字为:'         read aNum         case $aNum in             1)  echo '你选择了 1'              ;;             2)  echo '你选择了 2'              ;;              3)  echo '你选择了 3'              ;;              4)  echo '你选择了 4'              ;;              *)  echo '你没有输入 1 到 4 之间的数字'              r'm;;         esac

第二种语法格式:

            #!/bin/sh            echo "input from :one two three ....."            read input            case $input in                one | two) echo "your input is one or two"                ;;                three | four) echo "your input is three or four "                ;;                five) echo "your input is five"                ;;                *) echo your input is $input    ;;            esac

shell脚本的调用(在一个脚本中去调用另外一脚本)

which touch # 查看shell位置

            #!/bin/sh            source /home/hadoop/shell/hello.sh

date 命令

  1. 显示系统时间

1.date CST中央标准时间
Mon Jun 5 15:11:44 CST 2017
2.date -R 带时区的时间
Mon, 05 Jun 2017 15:14:44 +0800

  1. 格式化日期

$ date '+%Y-%m-%d %H:%M:%S'
2017-05-02 11:20:10

设置时间

选项:-s
用法:# date -s "2016-12-08 10:43:00"

ntpdate 命令

用法:# ntpdate 网络时间服务器(182.92.12.11)

sudo ntpdate ntp.api.bz

Crontab计划任务

  1. )-->周期性执行计划任务
  2. 选项使用:

crontab -l (list ) #查看目前的计划任务列表
crontab -r (remove) #删除计划任务
crontab -e (eidt) #编辑周期性计划任务

  1. 进程名称是crond

ps -ef | grep crond $查看此进程是否开启
默认进程是开启的,如果没有开启,可以使用命令手动开启
# service crond status
# service crond start
# service crond stop
# service crond restart

  1. Example of job definition:
        # .---------------- minute (0 - 59)        # |  .------------- hour (0 - 23)        # |  |  .---------- day of month (1 - 31)        # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...        # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat        # |  |  |  |  |        # *  *  *  *  * user-name command to be executed         *    *      *            *             *        分钟 小时  天(of月)  月(of年)  星期(of周)

特殊字符

""代表所有的取值范围内的数字,如月份字段为,则表示1到12个月;

"/"代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。

"-"代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次。

","分散的数字(不一定连续),如1,2,3,4,7,9。

注:由于各个地方每周第一天不一样,因此Sunday=0(第一天)或Sunday=7(最后1天)。

实例)

每一分钟执行一次command(因cron默认每1分钟扫描一次,因此全为*即可)*/1 * * * * /bin/date  >> /root/Desktop/date.txt每小时的第3和第15分钟执行command3,15 * * * * /bin/cp /root/Desktop/date.txt /root/date.log每天上午8-11点的第3和15分钟执行command:3,15  8-11  *  *  *  command每隔2天的上午8-11点的第3和15分钟执行command:3,15  8-11  */2  *   *  command每个星期一的上午8点到11点的第3和第15分钟执行command3,15  8-11   *   *  1 command每晚的21:30执行command:30  21   *   *  * command每天晚上6点到第二天早上6点 每15分钟记录一次时间到/home/uer01/2.log文件中*/15  18-23,0-6 * * * /bin/date  >> /home/user01/2.log0,15,30,45  18-23,0-6 * * * /bin/date  -R >> /home/user01/2.log

克隆虚拟机

1 拍快照

右击虚拟机-> 快照-> 拍摄快照

2 克隆

从快照中克隆

从虚拟机中克隆

管理-> 克隆->选择从快照(虚拟机当前状态)->完整克隆

3.修改网卡信息

克隆出来的虚拟机 要修改主机名,映射,还有ip地址,关键是要修改网卡信息

1) 修改主机名

# vi /etc/sysconfig/network #修改主机名

2) 修改映射

# vi /etc/hosts #修改主机映射(linux,windows都要改)

3) 修改 网卡

# vi /etc/udev/rules.d/70-persistent-net.rules # 网卡的信息(mac地址HWADD)

删除原来的网卡信息(通过mac地址来区分)

并将新的网卡的name信息改为eth0

修改后内容

# PCI device 0x8086:0x100f (e1000)

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?", ATTR{address}=="00:0c:29:b6:46:5d", ATTR{type}=="1", KERNEL=="eth", NAME="eth0"

4) 修改ip

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

删除uuid,修改mac地址,IPADDR,ONBOOT,BOOTPROTO

ONBOOT=yes

BOOTPROTO=static

HWADDR=00:0c:29:b6:46:5d

IPADDR=192.168.239.201

PREFIX=24

GATEWAY=192.168.239.2

DNS1=192.168.239.2

NAME="System eth0"

# reboot 重启虚拟机(因为修改了主机名)