大数据-day1-linux

1    虚拟机安装
    
    1    有的安装虚拟机时报错,cup不支持开启虚拟,修改bios  设置项INtel Virtual Technology 为 enable
    2    处理器(cpu)1个,pc电脑很少是多cpu的,核心可以2个
    4    虚拟硬盘要全部用上
    5    完整版的iso可以选中那个,如果是 mini版的则不用选,去选下一个
    6    企业百分之90 用centos
    7    你在开源的东西上添加东西,那么他的核心东西也必须的开源,只能说是卖它私有的服务
    8    说软件不准确,操作系统也是软件,应该说应用程序,例如正版系统会带有office,office
        就是应用程序,是收费不开源的,而centos的所有应用程序都是开源的
    9    网络连接用 nat 模式
    10    在物理磁盘上创建一个虚拟磁盘,选8g即可,别浪费
    11    在自定硬件中,干掉没用的  然后在虚拟光驱添加 mini 版
    12    skip 跳过检查,不需要检测iso光盘,没病毒

2    配置网络

    1、设置网卡为net模式
    2、确保windows下的服务是否启动(dhcp,net服务)
    3、编辑文件
        vi /etc/sysconfig/network-scripts/ifcfg-eth0
    4、ONBOOT=yes
    5、设置IP
        DEVICE=eth0
        TYPE=Ethernet
        ONBOOT=yes  激活网卡
        NM_CONTROLLED=yes
        BOOTPROTO=static  (静态地址  dhcp是指动态地址,是协议,但必须有dhcp服务,一般在路由里)
        IPADDR=192.168.80.3
        NETMASK=255.255.255.0
        GATEWAY=192.168.80.2
        
            
    6、重启网络:service network restart
    注意配置网络时,注意修改完配置文件后,要重启网络
    7、检查:ping 网关(两个虚拟网关和主机网关)
    ping 192.168.139. 虚拟路由  地址 第二层路由
        8、ping www.baidu.com
        9、设置dns服务
        vi /etc/resolv.conf
                nameserver 114.114.114.114
    10    重启机子 init6
    
    2层路由 ,可用的ip就多了,2个255

3    克隆


    1、克隆之后的操作系统需要重新分配物理地址
        删除vi/etc/sysconfig/network-scripts/ifcfg-eth0 文件中的物理地址
            删除两行:UUID和物理地址
            修改ip
        
    2  删除文件
         rm -rf /etc/udev/rules.d/70-persistent-net.rules
    3、修改主机名
           vi/etc/sysconfig/network文件
    //4、修改hosts
        //    /etc/hosts 文件。在文件最后增加一行  :IP 地址  主机名
    //    192.168.239.6 node8
        //    192.168.239.7 node7
    5、重启启动linux: init 6  为了重新分配 mac地址
    ping www.baidu.com


4    有4台机器时,时间一定要一直,date 03月16日11点2016后面秒可以不写


5    killall java zkServer.sh start
    start-all.sh(在不同服务器中启动节点)
    启动有问题时检查当前进程
    jps,同一进程

6    ifconfig 中 lo=localhost

7    举证就是二维数组
    立方就是三维数组

1    安装jdk

    rpm -ivh jdk-7u71-linux-x64.rpm
    rpm -ql jdk
    rpm -qi jdk

    修改环境变量
    /usr/java/jdk1.7.0_71
    记得修改 用户变量而不是系统变量,自己用,hbase需要jdk8,hadoop需要jdk7

    vi ~/.bash_prf
    在后面加入

    export JAVA_HOME=/usr/java/jdk1.7.0_71
    export PATH=$PATH:$JAVA_HOME/bin

    source ~/.bash_profile
    输入 printenv 检查


2    软件安装
    1 bin文件安装,点击下一步就行,在linux系统里就是 回车键,安装最简单
    2 rpm安装 (radhat,contos)
        检查是否已经安装
        
        rpm -ivh i安装 v展示#号式的进度条,h详细过程
        
        rpm -qa |grep jdk  q查询 a所有
        
        rpm -qi jdk  查询安装信息

        rpm -qc jdk 查询安装的配置文件

        rpm -ql jdk more    more 一屏屏显示,包括隐藏文件放到哪儿了
        
        所谓的安装目录是不能选择的,官方在打包的时候已经定好了
        删除 rpm -m

        查询
        rpm -qi jdk
        
    3 下载源码,自己编译安装


    yum 类同 manven,有库,它可以很好的解决依赖关系。yum库也可改为阿里云的 (阿里云镜像站,点击help,缓存云的镜像文件)
    配置文件 /etc/yum.repos.d
    
    搭建本地 yum 源,制定本地目录为yum源
    (注意服务间要想沟通,需要建一个基于某种协议的共享服务器)
    yum本地源:

    1、完整版的ISO文件到光驱。
    2、mount /dev/cdrom /mnt
    3、修改/etc/yum.repos.d/Centos.Base.repo
        [base]
        name=CentOS-$releasever - Base
        #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
        baseurl=file:///mnt/
        gpgcheck=1
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    4、该目录下的其他yum配置文件删除。mv ./*.repo /home/zs
    5  注意 yum makecache 缓存到本地
    6、yum instal man 安装man应用程序。


    注意在使用yum时
        1 先查 yum search mysql-server yum中是否有该包
        2 可以查版本 yum -info mysql-server
            cd /mnt/packages
            ls 你会发现有很多包,但你rpm -i安装时是不成功的,因为有依赖
        3 组安装
            groupinfo    
            grouplist
            groupinstall
            groupremove
            yum grouplist | grep Developement 查看组列表
            yum groupinstall Development tooles  安装常用开发工具,包括gcc,g++,python等
            

3    但是这个本地yum源只能在本机上用不能在其他机子上用,那么我么需要搭建一个共享服务器

    搭建nginx,用编译源码方式安装

    源码安装,一般是指repm中找不到,yum库中也没有,例如 nginx

    源码安装注意几个步骤
        1    找到源码,预编译(就是准本编译环境,查看依赖和兼容性,就是执行./configure)
            (查看是什么语言写的,基本都是python,c++)
        2    编译、安装  make && make install
    
    以安装nginx为例
        下载源码包http://nginx.org/en/download.html,选择1.8
        放到 /home下
        tar zxvf nginx-1.8.1.tar.gz
           53  ls
           54  cd nginx-1.8.1
           55  ls
           56  cd src
           57  ls
           58  cd core  可以看到是c  c++文件
            执行绿色的可执行文件configure
           65  ./configure --help  查看--后面有什么,预编译可以加入那些选项
                    with表示 加哪个模块
                    without 表示不加哪个模块
                    但一些基本的模块都会在安装时自动加上
                    --prefix=PATH 设置安装目录
                    --sbin=PATH设置可执行文件目录
                    --conf=PATH 设置配置文件目录
            
   
           68  ./configure --prefix=/usr/nginx-1.8
        执行后发现报错,大概意思是缺少rewrite模块(做伪静态化的),并提示安装依赖
        于是yum 安装它,安装时需先检查
           69  yum search pcre
        查到后安装即可
           70  yum install pcre-devel(至于是64位还是32的,系统会自动帮你检测)
              再次安装
         94  ./configure --prefix=/usr/nginx-1.8
        报错,缺zlib模块(做相应是页面压缩的,例如 京东首页,内容多,压缩后再传到浏览器)
           95  yum install zlib-devel
           96  ./configure --prefix=/usr/nginx-1.8
            通过,执行没问题
           97  make && make install
           98  cd /usr/nginx-1.8/
           99  ls
            列表是一个配置文件,一个网页himl文件夹
          100  cd sbin/
          101  ls
          102  ./nginx
          103  ps aux|grep nginx
          启动两个进程  1个master 1个worker
          105  service iptables stop  关掉防火墙

        浏览器中输入 192.168.174.11
        美好的事情发生了
        nginx是一个http协议的服务
        
        
        源码安装 mysql cmake cmake是专门编译c 和c++的工具


4    linux命令
    文件准备
        
        106    cp /etc/profile ~/
        
        107    cp /etc/passwd ~/


    man   (手册)
        man有8个种类
    例如 man 1 ls (1,表示普通命令也叫用户命令)数字可以省略
         man 8 ifconfig (8表示管理命令)
        
         学习date  man date
        显示当前日期date +%Y-%m-%d
         学习 echo
        type echo 输出内容
    man:
        
        examples   ,man tar examples
    

    翻屏:
        向后翻一屏:SPACE
        向前翻一屏:b
        向后翻一行:ENTER
        向前翻一行:k

    查找:
        
        n: 下一个
        N:前一个

        q: 退出

    more 是屏显示  less是行显示
    
    tail 是后,head是前
    
    例:看第15行
        head -15 profile |tail -1

        分屏看
        ls -l /dev | more   

        

    文本、字符串处理  

        cut:
            -d: 指定字段分隔符,默认是空格
            -f: 指定要显示的字段
                -f 1,3
                -f 1-3

        文本排序:sort    
        文本统计:wc (word count)
            -l
            -c
        sed基本用法:
        sed: Stream EDitor
            行编辑器 (全屏编辑器: vi)
            
        sed: 模式空间
        默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕;


        sed [options] 'AddressCommand' file ...
            -n: 静默模式,不再默认显示模式空间中的内容
            -i: 直接修改原文件
            -f /PATH/TO/SED_SCRIPT
                sed -f /path/to/scripts  file
            -r: 表示使用扩展正则表达式
            
            
        Command:
            d: 删除符合条件的行;
            a \string: 在指定的行后面追加新行,内容为string
                \n:可以用于换行
            i \string:添加     在指定的行前面添加新行,内容为string
            r FILE: 添加     将指定的文件的内容添加至符合条件的行处
            s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
                加修饰符
                g: 全局替换
                i: 忽略字符大小写
            s///: s###, s@@@    (/#@这3种都可以,是命令隔断符)
                \(\), \1, \2
                
            
            
    自己解释
    ^(行首)$(行尾)  ^$就表示空白符
    cut(行)  sort  wc(统计) sed(行编辑)   awk

    cut:  cut -d(切割符号): -f(域)1,7 passwd

    sort: cut -d: -f1 passwd | sort

    wc:ls -l /dev | wc -l(统计有多少行) 得到dev下有多少个文件
        wc -l passwd  得到passwd的行数

    sed:行编辑器 全屏编辑器: vi sed -i(本文件) 's/before/after/gi' profile
         sed -r(后面是正则) 's@^(行首)[[:space:]]+@@g' /etc/grub.conf
      

    awk:  它比sed要复杂  它也是行编辑,一行一行的读出,注意区分 vi
    awk是一个强大的文本分析工具,
    相对于grep的查找,sed的编辑,
    awk在其对数据分析并生成报告时,显得尤为强大。
    简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
    
    
    awk '{pattern + action}' {commands}
        
        awk 选项 '内部命令{匹配表达式去查找(可以省略) + 匹配后的一系列动作}' 【】括号也行 {commands}
        
        
        其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。
        花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
        pattern就是要表示的正则表达式,用斜杠括起来。    
        
    案例:
        显示最近登录的5个帐号
            last 命令时,它会把所有登录的信息列出来  tty1说明客户端是 xshell,还有ip
        #last -n 5 | awk  '{print $1}' 这里省略了匹配表达式  默认按字表符(也就是那个空格) 隔开
        awk -F: '{print $1}' passwd
        读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域
        $0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",
        所以$1表示登录用户,$3表示登录用户ip,以此类推。
        
        输出 第一个和第七个  按字表符分开
        #cat /etc/passwd |awk  -F ':'  '{print $1"\t"$7}'  "\t"表示按字表符隔开
        
        在开头输出个“name” 和“tshell”
        cat /etc/passwd |awk  -F ':'  'BEGIN {print "name\tshell"}  {print $1","$7} ' passwd
        
        
        在头行和尾行加东西
        cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "aaaaaa"}'
        BEGIN(awk内部命令表示读入数据之前执行的动作)
        
        
        只输出能登录的,,这时候你要做判断了
        
    注意:::::每读取一行就会执行花括号里的动作
        awk -F: '{if($7=="/bin/bash") print $1"\t"$7}' passwd
        
        接着我们添加用户 useradd hsc
        more /etc/passwd
        
        允许登录的用户前加序号,序号要随着用户增加而增加
        可见在读文件之前定义一个变量 i=0
        awk -F: 'BEGIN {i=0} {if($7=="/bin/bash"){ i++;print i"\t" $1"\t"$7"\t"NF}}' /etc/passwd
        
        
    awk内置变量
        awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

        ARGC               命令行参数个数
        ARGV               命令行参数排列
        ENVIRON            支持队列中系统环境变量的使用
        FILENAME           awk浏览的文件名
        FNR                浏览文件的记录数
        FS                 设置输入域分隔符,等价于命令行 -F选项
        NF                 浏览记录的域的个数(例如上面那一行被分成了7份)
        NR                 已读的记录数
        OFS                输出域分隔符
        ORS                输出记录分隔符
        RS                 控制记录分隔符
    
        好多不常用
        $0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
        
        
        
    上面介绍的awk只做一些了解,不会后再看看这里能想起来就行,后期会用shell编程替代它
        
        
        查看登录用户默认执行的shell 用 passwd
        root:x:0:0:root:/root:/bin/bash  (bash是默认的执行的shell)
        



shell
    1    shell:若类型、解释型语言
        解释器:bash
        
        启动一个新的shell来解释你当前输入的shell

    变量,变量的类型
        环境变量 (用户,系统)
            export 名字 = 值
            作用于当前bash及子bash
        本地变量 没有local
            只属于某一个bash的变量,另外一个bash是取不到的。
            作用于整个bash进程
            name = 值
        局部变量 有local
            作用于 当前代码段
            local name = 值
        位置变量:传给脚本的参数 $1是第一个,依次类推
        特殊变量:(死记住)
            $?:上一个命令的执行状态返回值,记录一个特殊值
                 # ls
                 hsc  nginx-1.8.1  nginx-1.8.1.tar.gz  zs
                 # echo "$?"
                 0  在bash里只要非0就表示错误
            $#:传递到脚本的参数个数
            $* 传递到脚本的参数,与位置变量不同,此选项参数不超过9个
            $$ 传入当前进程的id号
            后面用的不多
            $! 最后一个进程号
            $@与$#相同,使用时加引号,并在引号中返回参数个数
            $-上一个命令的最后一个参数
            
        程序两类执行结果:
            1 执行结果
            2 执行状态 $?:0表示成功,1-255错误
            >  覆盖重定向 ls>/dev/null
            >> 追加重定向
            2> 错误重定向
            2>> 错误追加重定向
            &>  全部重定向 ls abc&>/dev/null
        查看shell中变量:
            set 命令
            
        查看shell中的环境变量
            printenv
            
            env
            
            export
            
        应用变量:$(变量名),一般可以省略{}
            单引号:强引用,不作变量替换
            双引号:弱引用,做变量替换
            反引号:··命令替换
    脚本
    
        脚本:命令的堆砌
        
        标准输入stdin、标准输出stdout
        
    条件判断
        
        1  [ 表达式 ]  这种多,注意空格
        2  test 表达式
        
    整数比较
    
        -eq:比如[ $A -eq $B ]
        -ne,-gt,-lt,-ge,-le
        
    命令的逻辑关系:
        在linux中 命令执行状态:0位真,其他为假
        
        逻辑与:&&
        [ $# eq 0 ] && exit 3
        id $1 (非0,都是假)|| echo "user $1 not found" 或运算如果前面是真,那后面就不用运行了
       

你可能感兴趣的:(大数据-day1-linux)