Linux入门:
-------------------------------------------------------------------------
1、Linux的安装方式:
    1)、单独安装(机器就装了一个Linux)
    2)、多系统安装(Win7 + Win10 + CentOS6.4 + Ubuntu16.04)
    3)、虚拟机(Win10装虚拟机(Vmware/Vbox...):在虚拟机里安装Linux等系统)
          虚拟机类似于游戏对战平台,虚拟机里的系统类似于QQ游戏等。
2、自由软件特点
    使用的自由
        可以不受任何限制地使用软件
    研究的自由
        可以获得软件源代码、研究软件动作方式
    散布的自由
        可以自由复制软件及散布给他人
    改良的自由
        可以自行改良软件并散布改良后的版本
3、磁盘分区
    硬盘按照分区的类型划分为:主分区、扩展分区(最多只能有一个)、逻辑分区;
    主分区+扩展分区 数量不能超过4
    扩展分区不能放数据,必须先划分逻辑分区,然后在逻辑分区放数据
4、设备文件名
    在linux中,任何一个硬件都取有对应的设备文件名,常见如下:
    IDE硬盘                /dev/hd[a-d]
    SCSI/SATA/USB硬盘    /dev/sd[a-p]
    光驱                    /dev/cdrom或者/dev/hdc或者/dev/sr0
    软盘                    /dev/fd[0-1]
    鼠标                    /dev/mouse
5、文件系统类型
    Linux常见文件系统类型:ext2/ext3/ext4
    Windows常用文件系统类型:ntfs/fat32/exfat/fat16
    其中:
    ext2:最大支持16TB的分区和2TB的单个文件
    ext4:支持1EB的分区和16TB的单个文件。
6、安装建议
    0).系统安装方式
        单独安装
        多系统安装
        虚拟机安装(学习阶段建议采用)
    1).关于分区
        至少需要为linux建立以下3个分区。
        Swap分区:充当虚拟内存,当内存低于1G的时候,建议是内存的两倍,当内存大于1G的时候,建议和内存大小一样。
        /boot分区:用于引导系统,存放内容不多,建议100M
        /(根)分区 :存放大部分数据文件,尽量大,把除了/boot和swao的都交给/分区就可以了
    2).安装过程系统安装类型:相当于吃饭的时候各种套餐
        ①.Desktop 带桌面
        ②.Minimal Desktop 
        ③.Minimal 最小化,黑窗口
        ④.Basic Server 有常用服务,(推荐)
        .....
    3).安装后配置
        ①.安装了桌面,但是想设置启动进入字符界面: /etc/inittab  里面:     id:5:initdefault--->id:3:initdefault
        ②.防止字符界面中文乱码: /etc/sysconfig/i18n 里面 LANG=zh_CN.UTF-8” 改为LANG=zh_CN.GB18030

常用命令:(3700多个)
--------------------------------------------------------------------------
1、命令格式: 命令关键字 [选项] [参数1,参数2,参数.....]
                 做饭 米饭    2斤/在姥姥家做
                 ls  -a  /
                      -l
            长命令   / 短命令(推荐)
            ls --all / ls -a 
2、基础命令(系统相关)
    uname 显示系统内容信息 -r(内核版本) -a(显示系统所有信息) -m是32试试64)
    shutdown -h now 立马关机
    halt 停机
    poweroff 停电
    reboot 重启
    logout 注销
    exit 退出当前系统,比喻远程登录到别的机器,会退出到自己的机器
    echo 输出内容到控制台
    日期:
    date +%Y%m%d              显示日期
    date +%H:%M        显示时间
    Date “%Y%m%d %H:%M:%S”
    date -s “mm/dd/yyyy hh:mm:ss”    修改日期时间
    cal [month] [year]    显示日历
    
    bc    计算器  
        + - * / % ^     运算功能
        scale=n                小数位数(只适用于除法)
        quit        退出
        退出也可以按ctrl + C
        clear              清屏

    help命令,显示命令使用的帮助文档的,
        外部命令: 命令 --help
        内部命令:help 命令 
    man命令,显示命令使用的帮助文档的,
        man 命令   按q退出帮助文档

    磁盘命令:
        df -h  
        fdisk -l
3、文件目录
    pwd:显示当前目录
    ls:显示文件或者目录信息
        ls -l : 每行显示一个文件和目录信息,等价于 ll
        ls -a : 显示所有文件,包括隐藏文件(Linxu中.打头的文件都是隐藏文件)
        ls -h : 人性化显示文件信息,比喻能够显示文件的大小为多少M
        组合使用:如ls -alh 
    cd:切换目录
        若无参数,则返回宿主目录,否则切换到指定参数目录
        上级目录:..
        当前目录:.
        根目录:/
    mkdir:创建目录
        mkdir dir1 dir2 dir3 ..... 同时创建多个文件夹
        mkdir -p a/b/c/d 父目录不存在的时候创建父目录
    rmdir:删除空目录,用的少
        rmdir r1 r2 r3 ....
    touch:创建空文件
        touch file1 file2 file3.....同时创建多个空白文件
    cp:复制文件
        cp file1 file2 把文件1拷贝成文件2
        cp file1 file2 ... dir : 把文件拷贝到目录下,支持通配符
        cp -r dir1 dir2:把dir1及子目录及下面的文件复制到dir2
    rm:删除文件(夹)
        rm file1 file2 file3 .... 删除多个文件
        rm a* 删除a打头的所有文件
        rm -r 删除非空目录
        rm -f 强制删除,不提示
        rm -rf 强制删除文件或者文件夹(常用)
    mv:移动文件或者是文件重命名
        mv file1 file2 当file2不存在的实时,是重命名,当file2是一个目录并且存在的时候,是移动file1文件到file2
        mv file1 file2 fil3 ... dir 移动文件到dir,支持通配符*和?
    find:查找文件
        find 路径 -name 文件名:根据文件名查找,支持通配符*和?
        find 路径 -size [+|-] 大小 : 根据大小查找文件,注意单位是块,1块=0.5kb,如查找大于100M文件命令是:find –size +204800 
4、文本查看命令:cat/more/less/head/tail/(vi/vim)
    cat : 展示文件所有内,不适合内容过多的文本
    more: 分屏查看
        h(帮助)  space(下翻屏)  b(上翻屏)  enter(下一行) q键(退出)
        less   分屏查看(支持搜索,直接输入/content就可以,按n可以到下一个匹配内容)
    less: 分屏查看,支持搜索()
        e(下一行)  y(上一行)  f / space(下翻页)  b(上翻页)  q(退出)
    head: 显示前n行,默认显示10行, head -20 文件
    tail: 显示最后n行,默认显示10行, tail -20 文件 (查看日志) 

5、链接命令ln:
    软连接:ln -s 源文件/目录 连接名  :  相当于快捷方式 
    硬链接:ln 源文件 链接名 复制+同步
    区别:
        软连接比源文件小很多,硬链接和文件大小一样;
        删除源文件,软连接就失效,硬链接可以继续使用
        不能给目录创建硬链接。
6、gcc:编译c文件,如:gcc [-o 目标文件名] xx.c  如果没有-o,默认生成a.out
7、挂载命令: mount 硬件设备编号 挂载点(系统文件目录)
    挂载步骤:
    ①.创建一个目录(挂载点),一般建议放在/mnt目录
    ②.执行挂载命令: mount /dev/cdrom /mnt/mycd   
    ③.使用
    ④.卸载 umount 设备编号/挂载点 注意不能再挂载点目录里来卸载光驱。

系统账户命令
-------------------------------------------------------
1.相关文件
    用户信息文件:/etc/passwd 没有存密码
    用户密码文件:/etc/shadow 
    用户组文件:/etc/group
2.用户相关命令
    添加用户:useradd/adduser 用户名
    设置密码: passwd [用户名] ,root用户可以给别人设置密码,如果没有跟用户名,给自己修改密码,非root用户设置密码要求密码比较复杂,如: YSYHL9t
    查看当前用户: whoami   /   who am i
    查看所有已登录用户:who
    查看所有登录用户记录:last
    切换用户:su [用户名] 如果不给用户名,就代表切换到root
    禁止用户:usermod -L 用户名 
    解禁用户:usermod -U 用户名 
    删除用户: userdel [-r] <username> ,如果添加了-r,彻底删除用户相关信息,比喻宿主目录
3.用户组相关命令
    1).添加用户的时候,默认会添加一个组,组名就是用户名
    2).自己添加用户组,groupadd 组名
    3).删除组:groupdel 组名
    4).修改用户所在组:usermod -g  <groupname>  <username>
    5).指定初始组:useradd -g <initial_group>  <username>
4.发送消息
    write username 给单人发
    wall "信息" 给所有用户发信息
5.文件权限
    认识权限:
    d   rwx  r-x   r-x 
        4+2+1  4+1  4+1
        rwxr-xr-x ==== 755
    第一组:文件类型 , d(文件夹) ,-(文件,硬链接) ,l(链接)
    第二组:文件所有者的权限
           读(r)、写(w)、执行(x),如果对应的地方是-,代表不具备相应权限
    第三组:用户所在组具备的权限
    第四组:其他人具备的权限

    修改权限:
    加权限 :chmod u|g|o|a+r|w|x 文件名,而且可以任意组合: u(用户),g(组),o(其他人),a(所有人)
        如:chmod ugo+rwx a.txt
    减权限 :chmod u|g|o|a-r|w|x
    数字方式修改:chmod 权限数字组合(如:777) 文件

Vim编辑器:
-------------------------------------------------------
    1.从命令模式切换到编辑模式: i(在光标前插入),I(当前行首插入), a(光标后插入),A(行末插入),o(下一行插入),O(上一行插入)
    2.从命令模式切换到末行模式:按: 
    3.从末行或者是编辑模式切换到命令模式,esc
    4.在末行模式下:
        :q(已保存或未更改)
        :wq(保存后退出) 
        :q!(不保存修改并退出)
    6.命令模式常用命令:
        ^ :到行首
        $ :到行尾
        :set nu 显示行号
        :set nonu 隐藏行号
        6G 或者 :6 : 光标定位到第六行
        dd : 删除当前行
        3dd:从当前行开始删除3行
        :3,5d : 删除第3到第5行
        u:撤销操作
        yy:复制当前行
        3yy:从当前行开始复制3行
        p:粘贴到下一行
        P:粘贴到上一行
        G:跳到文件末尾
        /内容: 搜索,按n切换到下一个匹配的地方
        :%s/old/new/g:全文把old替换成new
        :13,16/old/new/g:把13到16行之间的所有old替换成new
    7.vim:增强版的vi,编辑的时候带有颜色

网络配置:
-------------------------------------------------------
    1.电脑要想上网,必须有网卡,虚拟机有虚拟网卡
    2.命令
      ifconfig : 
          ①.查看网卡信息  
          ②.设置ip : ifconfig 网卡名 ip地址  临时生效,重启机器就失效
      hostname    :显示主机名
      route: 查看网关
      ping : ping [-c 次数] ip地址(如:172.24.25.2) : 连通性测试,默认就一直测试,需要按ctrl+C终止,可以使用-c选项连指定测试次数
      traceroute 地址 : 到某个机器之间的所有路由信息
      dhclient : 动态分配ip
                  如果已经执行,可以使用pkill dhclient杀死dhclient进程,然后再执行dhclient来生成ip
      重启网卡:service network restart 

    3.永久修改ip:
      ①.netconfig | setup (界面,不推荐)
      ②.修改/etc/sysconfig/network-scripts/ifcfg-eth0
          ONBOOT=yes
          BOOTPROTO=static
          IPADDR=.... 
          IP写法:
          (桥接模式)执行dhclient获取一个动态ip如172.24.25.x ,我们要写的ip是172.24.25._ ,_ 只能是1到254之间,不要和主机ip冲突

         之后service network restart 重启网卡
    4.虚拟机网络模式:
      NAT模式:vmnet8,访问外网的时候借助于宿主机的网卡
      桥接模式:宿主机(192.168.1.1)/虚拟机(dhclient : 192.168.1.2),虚拟机相当于真实的物理机器,能够连外网。静态IP:不能接入互联网,所以不能上网
      仅主机:虚拟机使用虚拟网卡vmnet1,虚拟机ip不能够被外网识别,不能和外面通讯,只能和宿主机或者是其他虚拟机之间进行通讯。可以在本机随便设置IP地址,设置成1.1.1.1/6.6.6.6 每位数字在1-255之间
    5.防火墙:拦截未授权访问
      临时生效:
          service iptables stop 关闭
          service iptables start 启动
          service iptables status 查看状态
          service iptables restart 重启
      永久生效:
            chkconfig iptables on
            chkconfig iptables off
    6.ssh服务:用于远程连接,如xshell,winscp
        service  sshd   status    检测 
        service  sshd   start       启动
        service  sshd   stop       停止
        service  sshd   restart   重启
    7.改机器名
        vim /etc/sysconfig/network
        修改HOSTNAME的值
    8.修改主机名/ip的映射关系
        vim /etc/hosts
        下面添加:
        ip 机器名(理论上随便取)

软件安装
-------------------------------------------------------
1、软件包的分类:
    源码包:源代码,.c .h ,不能直接使用,需要先使用gcc和make编译生成可执行程序
    二级制包:多半是可执行程序
2、软件包提供方式:
    tar包:压缩包 xxx.tar  xxx.tar.gz 
    rpm包:相当于exe,我们需要安装 ,在redhat或者是centos
        yum:管理rpm包的一种工具
    dpkg包:ubuntu/mac 相当于exe
    bin包:直接使用的
3、tar安装
    1).命令
     -c  建立新的归档文件
     -x  从归档文件中解出文件
     -z  调用gzip来压缩归档文件
     -v  处理过程中输出相关信息
     常见组合:
     压缩文件:
     tar -cvf 目标文件名.tar 要被压缩的文件   压缩文件成tar包
     tar -zcvf 目标文件名.tar.gz 要被压缩的文件   压缩文件成tar.gz包
     解压文件:
     tar -xvf 源文件.tar [-C 目标位置]  解压文件,如果没有指定-C,就解压到当前目录,
     tar -zxvf 源文件.tar.gz [-C 目标位置]  解压文件,如果没有指定-C,就解压到当前目录,
    2) 安装示例
        A: 二进制包(jdk)
            ①.解压
            ②.配置环境变量(/etc/profile)
            vim /etc/profile
            在最后面加入:
            export JAVA_HOME=/app/jdk1.8.0_144
            export PATH=$JAVA_HOME/bin:$PATH
            export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
            保存退出
            source /etc/profile 让配置生效
            java -version 来检测
        B:源码包(redis后续)
        C:tomcat安装
            ①.解压tomcat
            ②.启动:
                cd /app/apache-tomcat-7.0.73/bin  
                ./startup.sh
            ③.测试:在主机浏览器输入:虚拟机ip:8080 回车看到猫
            ④.关闭:./shutdown.sh
4、rpm安装包
    1).命令
        -i         安装软件
        -h         显示安装进度
        -U         升级安装
        -v         检测套件是否正确安装
        常用组合:
        安装:
        rpm -ivh 安装包
        卸载:
        rpm -e 软件包 [--nodeps(忽略依赖)]
        rpm -q 查询  -qa(查看所有已经安装了rpm包)
    2).软件包的获取
        ①.网上下载
        ②.光盘(CentOS-6.4-x86_64-bin-DVD1.iso其实已经有很多预置的rpm包)
    3).相关命令
        管道命令 : 命令1 | 命令2 , 把命令1的结果当做命令2的输入
        文本查找命令: grep [-i] abc 查找abc -i选项表示忽略大小写
    4).依赖:rpm包安装会有依赖问题,如要装a,a依赖了b,c,就需要先装b,c,然后再装a
       树形依赖: a->b->c->d  a->b表示a依赖b ,解决办法:按照d,c,b,a安装
       环形依赖: a->b->c->d->a 解决办法:rpm -ivh a b c d 同时安装
    5).yum:解决rpm软件安装复杂的依赖关系
         ①.安装:yum -y install 软件名 
            默认会联网安装
         ②.本地yum源配置
             a.挂载光盘
             b.让远程yum源失效
                 把/etc/yum.repos.d/
            CentOS-Base.repo /CentOS-Debuginfo.repo/CentOS-Vault.repo
                 删除或者重命名
             c.编辑CentOS-Media.repo
                 baseurl=file:///mnt/mycd
                #        file:///media/cdrom/
                #        file:///media/cdrecorder/
                gpgcheck=1
                enabled=1
            d.可以像联网一样安装软件了,注意到挂载点/Packages执行yum -y install 安装
        ③.yum remove 软件(尽量别用)
    6).安装示例:
        ①.gcc
            a.配置本地yum源(或者是联网)
            b.执行yum -y install gcc (如果是本地yum源,请到/mnt/mycd/Packages)
        ②.mysql(tar包里面放了好多的rpm包)
            a.解压
            b.执行rpm -qa | grep mysql查看已经安装的mysql,
            rpm -qa | grep -i mysql 不区分大小写查看已经按照的mysql
            c.卸载已经安装的mysql : rpm -e mysql-libs-5.1.66-2.el6_3.x86_64 --nodeps 
            d.安装: rpm -ivh MySQL-client-5.5.48-1.linux2.6.x86_64.rpm MySQL-server-5.5.48-1.linux2.6.x86_64.rpm
            e.启动:service mysql start/stop(停止)/restart(重启)
            f.设置:/usr/bin/mysql_secure_installation
            g.登录mysql -u root -p
            h.设置远程用户连接权限:
                GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
                flush privileges;

shell 
Linux 的批处理 写脚本;
系统管理
-------------------------------------------------------
1、系统运行级别
    在Linux系统中,使用数字0-6分别代表系统中的7个不同的运行级别
    0:停机  (不要设置成默认)
    1:单用户模式,用于root用户对系统进行维护,不允许其他用户使用主机
    2:多用户模式,此时不能使用网络文件系统
    3:完全多用户模式,通常此时主机作为服务器使用
    4:未用,系统保留
    5:图形界面多用户模式
    6:重启 (不要设置成默认)
2、运行级别相关命令
    runlevel : 显示当前运行级别
    init [0-6]:切换运行级别
    修改/etc/inittab文件确定启动时默认级别
3、进程管理命令
    ps -ef|-aux : 查看当前活跃进程  进程配合 | grep 进程搜索
    top : 跟踪进程实时变化,需要按q退出
    pstree: 显示进程树
    kill pid 杀掉进程    
        -9强制执行  (kill -9 进程号)
        -1 重启  
        –t 终端号  踢终端   (用w查看登录用户)
    killall  进程名  根据进程名杀
    pkill 进程名  根据进程名杀
    chkconfig --list 服务名 查看服务在各个运行级别的启动状态,如:chkconfig --list iptables 

shell
-------------------------------------------------------------
1.linux可执行程序(脚本)以.sh结尾,说白了,可以把shell脚本理解为一组命令的集合
2.执行脚本:给脚本添加x权限 ,
    执行:
    脚本在当前目录:./脚本
    在其他目录:目录/脚本
    bash 脚本名

其他:
-------------------------------------------------------------
1.重定向命令>或者>>
    如:echo "hehe" > a.txt 就是把a.txt内容替换为hehe
       echo "hehe" >> a.txt 是把hehe追加到a.txt
2.新建文件的方式
    touch 
    vim / vi
    echo ""> m.txt
3.软件
    1). vmware / vbox : 虚拟机, 相当于一台机器(废铁)
    2). 远程登录工具:xshell,SecureCRT,PTY  登录机器敲命令 ,和机器本身的黑窗口作用一样。SSH服务
         远程拷贝工具:winscp,FileZilla... 用于在不同的机器上互相拷贝文件
4.远程登录命令
    ssh 账号@机器名或者ip
5.远程拷贝命令
    scp [-r] 本机文件 账号@机器名或ip:/文件夹
    -r选项代表拷贝文件夹
    /文件夹如果不指定,会拷贝到账号的宿主目录

set nu 显示行数
:行数 直接跳到对应行数

df-h 磁盘占有 
top 显示CPU 占有 磁盘占有
第一位 是d 是文件夹  _代表文件
more 文件名    查看文件

tail - f 查看文件写入
echo "">> 文件名   向文件写入信息