Linux

作者: 文化银儿 | 来源:发表于2018-08-28 17:08 被阅读1156次

    day07-linux指令

    1、linux系统介绍

    发展史
        unix:是一款操作系统,收费的,有钱人用的东西
        mnix:unix的简化版,也收费,还可以接受
        林纳斯脱袜子,用自己压岁钱,买了mnix,自己写了一个linux,
        linux内核,windows操作系统内核  nt
        美国两大派人物
            比尔盖茨       copyright(版权意识)
            理查德斯托曼   copyleft(开源自由)   说服了 
            GNU/linux
        linux基金会上班呢,三流的公司卖产品,二流的公司卖品牌,一流的公司卖标准
    优点
        (1)开源免费
        (2)多用户
        (3)良好的界面(桌面端、字符端)
        (4)稳定持久
    发行版本
        只要是基于linux内核的操作系统,统一称为linux系统
        不同系列,基本指令都是一样的,只有软件的安装方式不一样
        大便系列:Debian
        Ubuntu:属于大便系列  16.04  桌面端(个人计算机使用居多)
            apt-get
        贱兔系列:  Gentoo
        RedHat: 红帽系列(收费的)
        CentOS:属于红帽系列,免费的,非常稳定,常用作服务器系统
            也有桌面端   yum   6.8  7.x
        费德罗: Federo,红帽系列   
    

    2、远程连接

    使用工具:putty、xshell
    打开你的虚拟机,会出现login,输入用户名  root  输入密码 123456  敲enter即可进入系统
    修改配置文件,让其有ip
        vi /etc/sysconfig/network-scripts/ifcfg-eth0 
    先关机  poweroff   再去修改  编辑--虚拟网络编辑器   VMnet0   手动选择网卡
    

    3、简单指令

    [root@localhost ~]#
    root: 超级管理员,拥有至高无上的权限,所以进来之后别乱动
        为了防止系统玩坏,首先拍个快照,纯净水
    localhost:主机名
    ~ : 代表的是在哪一个目录下面,~代表的是当前用户的家目录
    # : 代表的意思是超级管理员在执行指令,
    $: 代表的是普通用户在执行指令
    如果是普通用户bajie,进来之后就是这样的:[bajie@localhost ~]$
    
    简单指令:
    pwd : 当前目录的绝对路径
    ls : 显示当前目录里面所有的文件
    cd : 切换目录   cd  目录路径
        目录就是文件夹
        绝对路径 :相对于跟目录的路径
        相对路径 :相对于当前目录的路径
            ./ : 当前目录里面的哪个文件   可以省略不写    ?
            ../ : 上一级目录下面哪个文件    ?
        / : 跟目录
        ../ : 上一级目录     ?
        ~ : 当前用户的家目录   root用户的家目录就是  /root
            普通用户的家目录   /home/bajie
            去往家目录的快捷键  cd 
            cd ~ == cd     ?
        - : 去往上一个目录,类似遥控器的  回看
    关机指令:poweroff  halt
    重启指令:reboot
    tab键:自动补全功能    ?
    清除屏幕: clear
    ctrl + l: 清除屏幕
    ctrl + a: 快速的来到指令的最前面     ?
    ctrl + e : 快速的来到指令的最后面   ?
    ctrl + c : 终止当前的进程    
    ping :测试两台机器是否联通  
          ping ip地址
          ping 10.7.181.xx
    上下按键:快速的调出历史指令
    shutdown : 
        shutdown -h now  立马关机
        shutdown -r now  立马重启
        shutdown -h +5 '我要关机啦'   5分钟之后关机
        shutdown -h 12:00 到指定的时间关机
    

    4、ssh

    ssh是一个协议(远程登录协议),同时也是一个指令,ssh协议默认端口号是22
    ssh也是linux里面的一个指令,可以实现登录别的linux系统
        linux1登录linux2,通过ssh登录
        windows登录linux,需要使用软件,xshell
    ssh root@10.7.181.66   输入密码即可登录
    ssh 用户名@ip地址
    

    5、目录结构

    linux各种颜色的意思
    下面是linux系统默认不同类型文件的颜色:
        白色:表示普通文件
        蓝色:表示目录
        绿色:表示可执行文件
        红色:表示压缩文件
        浅蓝色:链接文件
        红色闪烁:表示链接的文件有问题
        黄色:表示设备文件
        灰色:表示其他文件
    根目录下的目录都是什么意思
    /bin : 二进制文件,指令存放地方
    /boot : 存放和启动相关的内容
    /dev : 存放设备的地方(*)
    /etc : 存放配置文件的地方(*)
    /home : 家,普通用户家目录存放的地方(*)
    /lib  /lib64 : 存放都是库文件
    lost + found : linux系统文件独有的一个目录
    /media : 媒体设备
    /mnt : mount  是以后我们要挂载的地方(*)
    /opt : 可选的附加程序
    /proc : 和进程相关的文件
    /root : root用户的家目录(*)
    /sbin : 只有超级管理员才能执行的指令   sudo   ?
    /selinux : 是linux的一种安全机制,基本没用过,还得关掉它
    /srv : 相关服务文件存放的地方
    /sys : 和windows的sys,存放硬件相关驱动信息
    /tmp : 临时文件存放的地方
    /usr : unix system resource, 自己后续手动安装软件的时候安装到 /usr/local里面(*)
    /var : 存放的是日渐增长的文件,比如日志,比如数据库等
    

    6、ls

    显示当前目录下面的所有文件
    ls 目录路径(路径,绝对和相对都可以)
       ls  -a : 在linux里面,以点开头的是隐藏文件,显示所有文件
       ls  -R : 递归的显示所有的文件    ?
       ls  -l : 以列表显示文件的详细信息,可以简写为  ll
    
    ll之后的每一列代表的意思
    第一列:文件类型
        - : 一个文件
        d : 一个目录
        l : 一个链接
        c : 字符设备
        b : 块设备
    第二列-第十列:文件权限(详情见后面)
    第十一列:是一个点.没影响,不用管
    第十二列:如果是文件,代表的是硬链接的个数,如果是目录,忘了   !=!
    第十三列:所属用户  root
    第十四列:所属组    root
    第十五列:文件的大小  kb   
             ls -lh 查看文件大小
    第十六、十七、十八:文件创建、修改时间
    第十九列:文件的名字
    

    7、vi、vim

    vi和vim是编辑器(编辑器之神)
    vi是linux自带的编辑器,vim是增强版的编辑器,但是需要安装才能使用
    
    简单使用:
    (1)vi 1.txt
        vi后面跟文件路径,没有就创建这个文件,有就打开这个文件
        进来就是vi的命令模式
    (2)按小写字母i
        从命令模式切换到了编辑模式、插入模式
        开始编辑
    (3)按esc
        从编辑模式退出到命令模式
    (4)输入  :wq   保存并且退出   英文的冒号
        输入冒号之后,称之为底行模式
    
    vi的其它用法
        命令模式==》编辑模式
            i : 在光标所在处进入编辑模式
            I : 在当前行的第一个非空字符进入编辑模式
            a : 在光标所在字符的后一个字符进入编辑模式
            A : 在光标所在行末尾进入编辑模式
            o : 在光标下新建一行进入编辑模式
            O : 在光标所在行的上面新建一行进入编辑模式
            s : 删除当前字符进入编辑模式
            S : 删除当前行进入编辑模式
        编辑模式==》命令模式
            按esc
        命令模式==》底行模式
            :   英文的冒号即可
    
    vi的快捷键 (13个+7个+6个)
        gg : 快速切换到第一行的行首
        G :快速切换到最后一行的行首
        ngg : 快速切换到指定行的行首
        ^ : 快速切换到该行行首
        $ : 快速切换到该行行尾
        dd : 删除光标所在行
        u : 撤销操作
        ndd :删除光标下n行,包含光标所在行
        yy :复制光标所在行
        p : 粘贴复制的内容
        np : 复制几次
        nyy : 复制光标下n行,包含光标所在行
        10000dd : 删除文件中所有行
    
        ctrl + f : 下一页  forward
        ctrl + b : 上一页  backward
        ctrl + d : 下翻半页 down
        ctrl + u : 上翻半页 up
        zt : 光标所在行顶行显示  top
        zb : 光标所在行尾行显示  bottom
        zz : 光标所在行中间显示  zhongjian
    
        底行模式:
        :set nu  显示行号
        :set nonu  取消显示行号
        :wq      保存并且退出
        :x       保存并且退出
        shift+zz 保存并且退出
        :q!      不保存,强制退出
    

    day08-linux

    1、vi

    字符串查找(常用)
       从上往下找    :/要查找的字符串   敲enter开始查找  n代表下一个  N代表上一个      
       从下往上找    ?/要查找的字符串   敲enter开始查找  n代表下一个  N代表上一个  ??
            
    字符串替换
        光标所在行时的字符串替换
            :s/孤单/幸福      将光标所在行的第一个孤单替换为幸福
            :s/孤单/幸福/g      将光标所在行的所有孤单替换为幸福
        指定行的字符串替换
            :n,ms/孤单/幸福     将n到m行第一个孤单替换为幸福
            :n,ms/孤单/幸福/g     将n到m行所有孤单替换为幸福
        所有行的字符串替换
            :%s/孤单/幸福      将所有行的第一个孤单替换为幸福
            :%s/孤单/幸福/g      将所有孤单替换为幸福
    
    vi打开快捷到某行
        vi lala.txt +n    打开文件默认到第n行行首
        vi lala.txt +     打开文件默认到尾行行首
    
    vi的配置文件  ????
        .vimrc   如果想用vi来写python代码,搞一个配置文件
        vi ~/.vimrc
    
    vi的常见错误  ????
        非法编辑退出vi的时候,会产生一个 .2.txt.swp 的一个交换文件,只要有这个文件存在, 那么打开这个文件的时候就会有提示,不想要这个提示,删除这个文件即可   
        rm -f .2.txt.swp
        vi -r 2.txt   恢复到上次编辑的内容
    

    2、文件相关指令

    文件和文件夹的相关指令,创建、删除、拷贝、移动、查看
    
    (1)创建:
        <1>创建文件:
              vi 文件路径     
              touch 文件路径
        <2>创建文件夹:
              mkdir 目录路径   创建指定的目录
              mkdir -p dudu/haha/xixi   递归创建目录
    
    (2) 删除
       一般都不删除文件,一般都是备份一下,编辑新的文件
        <1>删除文件:
             rm 文件路径    
             rm -f 文件路径   强制删除
           通配符:*
            rm -f *.txt   删除所有txt文件
            rm -f *       删除所有文件
    
        <2>删除目录:
            rmdir 目录路径    只能删除空目录
            rm -rf 目录路径    删除非空目录
    
    (3)拷贝
        <1>cp 源文件路径 目标文件路径
            拷贝文件的时候可以修改名字
        <2>cp -r 源文件夹 目标文件夹
            拷贝文件夹的时候可以修改
            cp -r lihong jielun/       使用原来的名字
            cp -r lihong jielun/hong   修改名字
    
    (4) 移动
        <1>mv 源文件路径 目标文件路径
            移动的时候可以修改文件名字
        <2>移动文件夹不用加 -r 参数
    
    (5)查看文件
        <1>vi就能查看
        <2>cat 文件名   
              -n 显示行号
        <3>tac 文件名   倒着查看
        <4>head 文件名     默认查看文件前十行
              head  -5  文件名     查看文件前五行  
        <5> tail 文件名   默认查看文件后十行
              tail  -5  文件名    查看文件后五行
        <6> more 文件名
               enter : 往下走一行
               空格 : 往下走一页
               不能向上看,按q退出
        <7> less 文件名
               enter : 往下走一行
               空格 : 往下走一页
               按q退出
               pageup   上翻页
               pagedown 下翻页
               /要查找的字符     也可在文件全文查找字符
    

    3、文件系统

    文件系统就是文件管理系统的简称,不同的文件系统存储和读取数据的方式都不一样,就会
    导致同样的东西,不同的文件系统来存,存的大小不一样
    
    apfs:苹果手机的格式
    
    常见的文件系统格式
    windows:
        fat
            fat16  已经淘汰
            fat32  经常使用,尤其在u盘领域
            fat64  (exfat)  在windows和mac都可以直接读写
        ntfs
            windows的默认系统格式
    linux:
        ext
        ext2
        ext3
        ext4  目前是这个格式  不能读写ntfs,如果要读写,安装其他软件
    mac:
        hfs
        hfs+  不能写入ntfs,如果想要写入,需要安装插件,该插件收费
    

    4、用户和组?

    linux是一个多用户多组的操作系统
    一个用户能否属于多个组  yes
    一个组能否拥有多个用户  yes
    一个用户至少必须属于一个组,一个用户必须拥有自己的主组,其他组称之为附加组
    
    用户创建
        useradd bajie   ?
        创建成功之后会留下记录,  tail /etc/passwd   ?
        创建一个用户的同时,会给当前用户创建一个名字一模一样的组作为该用户的主组
        给用户添加密码
            passwd 用户名
            (这个操作只能在root去给某个普通用户设置密码,在普通用户下只能给自己修改密码,不能设置其他普通用户密码)
    
        -d : 创建用户的时候指定家目录,不指定会在home下面创建一个和用户名一模一样的目录,一般不指定  ?
        -g : 指定主组,如果不指定,默认创建一个和用户名一模一样的组作为主组  ?
        -G : 指定附加组  ?
        -u :指定用户id    一般都不用  ?
    
    用户修改
        usermod
        -g : 修改主组  ?
            usermod -g 501 bajie   修改bajie主组
        -l : 修改用户名  ?
            usermod -l wuneng bajie   将bajie用户名修改为wuneng
        -u : 修改用户id   ?
            usermod -u 505 wuneng   将wuneng用户id修改为505
        -d : 修改家目录  ?
            usermod -d /home/lala wuneng   不用
    
    用户删除
        userdel
            userdel 用户名     只删除文件中的记录
            userdel -r 用户名  将家目录一并删除
            如果操作不规范,家目录也可手动干掉
    
    用户切换
        centos里面
        su 用户名
        从root切换到普通不用密码
        从普通切换到root,需要输入root的密码,通过exit返回上一个用户
        这里面不能sudo,因为不支持,如果要支持,需要相关配置
    
        Ubuntu里面
        不允许root直接登录,需要配置才可以。
        用普通用户登录。  sudo 指令,提示输入密码,这个密码是当前用户的密码
    
    组创建
        查看当前组,  tail /etc/group
        groupadd 组名
        -g : 可以指定组id
    
    删除组
        groupdel 组名
        【注】如果一个组是主组的话,这个组删不掉
        【注】如果一个组是一个用户的主组,并且仅仅是这个用户的主组,而且组名和用户名相同,那么在删除用户的同时,该组也就删除了
    
    修改组
        groupmod
        -g : 修改组的id号    groupmod -g 513 dudu
        -n : 修改组名        groupmod -n xixi dudu
    

    5、文件权限

    权限什么意思?系统中,文件的权限都有哪些?读、写、执行
    读:read   r   
    写:write   w    
    执行:execute  x
    
    如果写一个-代表没有这个权限
    权限表示
    rwx     111     7   
    rw-     110     6
    r-x     101     5
    r--     100     4
    -wx     011     3
    -w-     010     2
    --x     001     1
    ---     000     0
    
    rwx             r-x             r-x
    所属用户权限     组内用户权限     组外用户权限
    权限表示法:0755  
    
    常用权限:0755(rwxr-xr-x)   0777(rwxrwxrwx)   0644(rw-r--r--)
    
    修改权限修改组的指令不是乱用的,需要root用户的权限才能修改,Ubuntu下需要使用sudo,centos需要切换root执行
    
    修改权限:chmod
        格式:  chmod 权限 文件路径
        chmod 755 1.txt
        chmod g+w,g-x 1.txt   ?
            u : 修改所属用户
            g : 修改组内用户
            o : 修改组外用户
        目录权限修改
            chmod 777 目录路径    只修改该目录的权限
            chmod -R 777 目录路径   递归修改目录里面所有文件的权限
    
    修改用户:chown
        chown 用户名 文件路径         只修改用户名
        chown 用户名:组名 文件路径     用户和组都修改
        chown :组名 文件路径          只修改组名
        chown -R 用户名:组名 目录路径      递归修改目录里面所有文件的用户和组
    
    修改组:chgrp
        chgrp 组名 文件路径
        chgrp -R 组名 目录路径      递归修改
    
    umask
        是什么?
        系统创建文件默认权限是  644
        系统创建目录默认权限是  755
        目录默认比文件多了一个可执行权限,对目录来说,可执行就是打开目录
        umask就决定了文件和目录的默认权限
            0777-0022 = 0755  这就是默认权限,文件都少可执行权限
        指定umask进行修改,将umask指定为0011
            0777-0011 = 0766(目录)  0666(文件)
    

    6、文件搜索

    find
    用法如下:
    find   在哪找   怎么找   找什么
    在哪找:就是一个路径,默认是当前路径
    怎么找:按照名字、大小、用户,其实就是参数
        -name : 按照名字找
        -size : 按照大小找
        -user : 按照用户找
        -group : 按照组找
        -maxdepth : 查找最大目录级别
        -mindepth : 查找最小目录级别
    找什么:1.mp3  *.txt
    
    find / -name dudu.py
    find / -size 10k     等于10k的文件 
                +10k     大于10k的文件
                -10k     小于10k的文件
    find / *.txt -user liuyan
    find / -maxdepth 3 -mindepth 2 -name *.txt  找指定级别的文件
    

    day09-linux

    1、文件内容搜索

    grep 内容 文件路径
    参数:
    -i :忽略大小写
    --color=auto : 颜色自动提示,将grep设置为默认颜色提示,其实就是可以给grep指令器别名
    
        vi ~/.bashrc  ?
        添加一句  alias grep='grep --color=auto'
        source ~/.bashrc  让添加的指令生效
    
    -n : 显示内容出现的行号      (grep -n 内容 文件路径)  --->必须空一格
    -l : 显示内容出现在的文件名     (grep -l 内容 文件路径)
    -c : 显示出现该内容的次数     (grep -c 内容 文件路径)
    
    grep 王者荣耀 1.txt     --->找出在文件1.txt中包含王者荣耀的句子
    grep 王者荣耀 *.txt    --->找出在所有txt文件中包含王者荣耀的句子
    grep 王者荣耀 ~/.txt     --->找出所有家目录下中包含王者荣耀的句子
    
    也可以写正则表达式, 注意使用 -P
        电话号码的正则表达式:13838384380
        \d{11}
        ^1\d{10}    3456789
        ^1[3-9]\d{9}
    
       邮箱的正则表达式:  test@qq.com   duduxixi@163.com  lalahehe@sina.cn
        \w+@\w+\.(com|cn|net)
    
    grep -P '1[3-9]\d{9}' 3.txt     (正则表达式查看,P必须大写)
    grep -E '1[3-9]\d{9}' 3.txt    (-E的效果一样)
    

    2、管道

    格式: 指令1 | 指令2
    指令1的输出作为指令2的输入,指令2的输出显示到屏幕中
    常用的管道指令有:
        ls -l /etc | less
        ls -l /etc | head -5  显示内容中的前5行
        ls -l /etc | tail -5   显示内容中的后5行
        ls -l /etc | head -10 | tail -5    显示内容中前10行中的后5行(即6-10行)
        ls -l /etc | grep 找的内容   显示查找的内容
    
    查看进程相关
        ps -ef | grep ssh
    

    3、搭建主机信任

    密码学的内容--->加密-解密,用到一个东西 --->秘钥
    
    加密-解密的秘钥相同--->对称加解密
    加密-解密的秘钥不相同--->非对称加解密
    
    一对秘钥包括:公钥和私钥
    公钥:给你们,你们拿的都是公钥
    私钥:我自己拥有,
    
    公钥加密-私钥解密,
    私钥加密-公钥解密
    
    实现免密码登录,linux1登录linux2,实现免密码登录:
      (1)在linux1上,生成公钥和私钥
              ssh-keygen   一路敲enter即可
      (2)来到生成秘钥的文件中
             id_rsa : 私钥
             id_rsa.pub : 公钥
      (3)复制公钥
            cat  id_rsa.pub   显示公钥的内容,点右键复制
      (4)来到linux2中
             vi ~/.ssh/authorized_keys
             将公钥粘贴进来即可
    这样在通过linux1登录linux2的时候就实现了免密码登录
    

    6、scp

    scp:基于ssh的cp,cp是实现本机之间来回拷贝,scp是在两台linux之间进行拷贝
    
    scp的用法:
        scp 源路径 目标路径
        scp  1.txt   root@ip地址:路径
         
        如果发送文件夹,需要添加 -r 选项
        scp -r 1.txt  root@10.7.181.10:/root
    
    linux和linux之间使用scp进行互发,如果搭建了主机信任,不用输入密码
    
    winscp,实现windows和linux之间使用scp进行互发
        安装,使用即可,左边:windows目录,右边:linux目录,相互拖动即可
    

    4、重定向

    标准输入(stdin, 键盘)、标准输出(stdout, 屏幕)
    
    输出重定向:意思就是不输出到屏幕,输出到其他地方
    ls -l > 1.txt      >作用:首先清空文件,然后写入文件
    ls -l >> 1.txt     >>作用:追加内容
    
    错误重定向:指令有错,错误信息显示到哪里
    ls /lala 2> 1.txt   将错误信息显示到指定文件中
    ls /lala 2>> 1.txt  将错误信息追加到指定文件中
    

    5、挂载、磁盘相关指令

    挂载:神马意思?看图形


    挂载.png
    将u盘和目录对应的过程就是挂载
    (1)插上u盘
        u盘只能让你的linux识别,如果是虚拟机,在虚拟机设置里面点击让虚拟机识别,
    (2)linux识别成功之后,通过指令查看你的设备
        fdisk -l
        /dev/sda   就是linux系统的硬盘设备
        如果有分区  /dev/sda1   /dev/sda2  xxx
    
        u盘设备往下走
        /dev/sdb   就是你的u盘设备
        如果有分区  /dev/sdb1   /dev/sdb2
    
        挂载u盘
        mount -t  需要挂载的设备  挂载点
            auto : 自动识别
            vfat : fat32
            ntfs-3g : ntfs格式   需要插件支持
        -o iocharset=utf8  如果有中文,可以指定字符集
        mount /dev/sdb1 /mnt/usb
    
        取消挂载,不能再挂载的目录中取消挂载
        umount /dev/sdb1 /mnt/usb
        umount /dev/sdb1
        umount /mnt/usb
        如果取消挂载时候显示该设备正在忙,需要输入指令把使用的进程给干掉,再取消挂载即可
        fuser -m -k /mnt/usb
    和磁盘相关的指令
    df
        显示当前可用的设备的使用情况
        -h  人性化的显示大小
    du
        当前目录的使用情况
        -h  人性化的方式显示大小
    
    配置开机挂载
    vi /etc/fstab
    添加一行信息
    /dev/sdb1     /mnt/usb      vfat    defaults      0 0
    

    7、软硬链接

    link,为了解决文件的共享问题,引入了链接机制。分为软链接和硬链接,以软链接使用居多
    
    硬链接
        ln 源文件 目标文件
        也可以使用link
        链接之后,目标文件和源文件内容相同,修改其中一个,另外一个也被修改
        在ll之后,可以看见硬链接个数,增加
        删除其中一个,另外一个不受影响
        可以理解为,给一个文件起了一个外号、别名  
        【注1】不能给目录创建
        【注2】创建完硬链接之后,你的用户名和组信息不变
    
    软链接
        ln -s 源文件 目标文件
        软链接创建之后,修改其中一个,另一个也修改
        【注1】可以给目录创建
        【注2】创建完之后,用户和组信息是创建时候的信息
    
    软硬链接的不同之处
        在linux里面,存放一个文件,由三部分组成,一个文件名,一个是文件索引(inode),一个是数据部分
        见百鸟朝凤图
    
    软硬链接.png

    8、压缩和解压(很常用)

    在linux里面,常见压缩格式有两种,一种叫做gz,一种叫做bz2
    gzip\gunzip(后缀名是.gz)
        gzip 文件1 文件2
        生成之后,源文件不在了,只有压缩文件,每一个都生成一个压缩文件
        gunzip 文件
        不能实现打包压缩,不能实现保留源文件
    bzip2\bunzip2(后缀名是.bz2)
        bzip2 文件1 文件2
        每一个生成一个压缩文件
        -k : 保留源文件
        bunzip2 压缩文件1 压缩文件2
    tar(可以实现压缩和解压,可以实现打包的功能)
        如果打包压缩使用的gzip压缩的,那么后缀名  .tar.gz    .tgz
        如果打包压缩使用的bzip2压缩的,那么后缀名  .tar.bz2   
        常用的参数有:
        -z : 使用gzip压缩
        -j : 使用bzip2压缩
        -f : 打包压缩的时候指定压缩后的文件名
        -c : 打包文件
        -x : 解压缩使用的
        -v : 压缩和解压缩时候显示进度
    
    打包使用gzip压缩:
        tar -zcvf 压缩后的名字.tar.gz 文件1 文件2 文件3
    使用gzip解压缩
        tar -zxvf 压缩包.tar.gz
    打包使用bzip2压缩
        tar -jcvf 压缩后的名字.tar.bz2 文件1 文件2 文件3
    使用bzip2解压缩
        tar -jxvf 压缩包.tar.bz2
    

    9、软件安装之yum安装

    红帽系列软件安装使用  yum安装
    大便系列软件安装使用  apt-get安装
    去哪下载软件呢?yum源,这个源在哪呢?默认都有自己的源,但是这个源是在国外的。所以使用linux经常将源设置为国内源,阿里源、清华源、搜狐源、网易源、中科大源
    如何配置为国内源?
    打开阿里源,点击帮助
    (1)mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    (2)下载对应的源配置文件
    wget是一个专业的下载软件,但是需要安装
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    或者
    curl是自带的,不用安装
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    (3)执行
        如果是本地,需要网络,吃饭的时候执行,晚上执行,热点执行
        yum clean all
        yum make cache
    

    day10-linux

    1、软件安装

    (1)yum安装(多)
       安装: yum install -y 包名   中间一路yes
       卸载:   yum remove -y 包名
        可以只下载安装包,不安装
        yum install -y --downloadonly --downloaddir=./ wget
        下载就是.rpm的包。
    (2)rpm安装(一般不用,依赖软件太多)
        不论你用的是yum还是用的rpm安装,其实安装的都是rpm包。在linux里面,安装软件的时候,不仅仅是安装这么一个软件,与之对应的要按照很多的依赖软件
        a ==》 b===》c==》d
        如果使用rpm安装,你要知道软件依赖关系才能安装,但是使用yum的话,不用知道依赖关系,yum自动为你解决
        比如  yum install -y --downloadonly --downloaddir=./ vim
            包含vim的包以及vim依赖的包,全部下载下来之后,估计10个包,这10个都是rpm,请问先装哪个后装哪个。
            yum install -y vim   依赖关系自动解决
        -ivh :安装     rpm -ivh 包.rpm
        -e :卸载       rpm -e wget
        -ql : 列出包安装路径   rpm -ql wget
        -qi : 列出指定包的详细信息  rpm -qi wget
    (3)编译安装(多)
        相对来说,编译安装是需要编译源码的,安装的软件更加适合你的电脑,你的软硬件环境,更加的稳定,相比较yum来说稳定
        编译安装3个步骤:
        (1)配置
            ./configure --prefix=你安装路径(/user/local/mysql) --以及其它参数
        (2)编译
            linux里面的软件都是使用c、c++写的,所以你得有编译器
            gcc gcc-c++
            yum install -y gcc gcc-c++
            make 
        (3)安装
            make install
        走完一步之后,可以执行一个指令  echo $?  ,如果返回0,代表上面指令执行成功,如果返回其它,说明执行失败
        指令可以连写:   make && make install
        安装ntfs-3g
        安装python
    

    2、服务和进程相关指令

    linux的启动等级,打开这个文件   vi /etc/inittab
    0 : 关机等级
    1 : 单用户模式
    2 : 多用户的无网络模式
    3 : 多用户模式,有网络
    4 : 保留模式
    5 : 界面模式
    6 : 重启模式
    
    切换等级   init 0   init 1   init 6
    查看当前等级  runlevel   who -r
    whoami  : 我是谁,查看当前用户
    
    查看随开机启动的服务
    chkconfig --list
    
    随开机启动的服务,我们给他们起了一个非常好听的名字,守护进程(daemon)
    sshd   httpd   mysqld  其实就是一个随机开机启动的服务
    
    开启、关闭服务
        要有控制开启、关闭服务的脚本,比如iptables(防火墙)
        /etc/init.d/iptables start | stop | restart
        /etc/init.d/network start | stop | restart
        经常找脚本,太不方便了,将服务脚本放到  /etc/init.d ,如果支持服务模式,那么就可以使用如下指令开启和关闭
        service iptables start | stop | restart
        service network start | stop | restart
    
        一般情况,安装服务的时候,控制服务的脚本在安装包就有,但是有的没有,比如nginx没有
        自己按照的服务,你就可以将脚本放到  /etc/init.d 里面,然后通过service控制它的开启和关闭  service nginx start
    
    自己按照的服务随开机启动
        chkconfig nginx on   默认设置的等级为2345
        chkconfig nginx off
        还得给脚本权限,权限一般设置为755
        通过chkconfig --list 查看有没有配置成功
    
    进程相关指令
        top : 实时查看系统的运行情况
        w :查看系统的当前用户的链接情况
        free : -h  内存的使用情况
        ps : 查看进程相关信息
            ps -ef | grep ssh
            ps aux | grep ssh
        kill : 杀死一个进程
            kill -9 进程id
        netstat -lnp : 查看网络和端口使用情况
            netstat -lnp | grep 80
    

    3、shell简介(了解一下)

    shell编程   wget url    包.tar.gz
    python break : 终止循环
           continue : 结束当次循环,进入下一次循环
    

    4、ftp服务搭建

    ftp是什么?文件传输协议,用在将本地文件上传到服务器
    
    1、ftp搭建
       关闭防火墙和selinux
       setenforce 0
       依赖  gcc和openssl-devel和perl
       0、yum install -y gcc openssl-devel perl
       1、去pureftp官网    
           download==》releases==》pure-ftpd-1.0.41.tar.gz
       2、下载
           wget https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.41.tar.gz
       3、解压
           tar -zxvf 文件名
       4、配置
           ./configure                    #进行配置  -h 查看配置参数
           --prefix=/usr/local/pureftpd   #安装目录
           --without-inetd                #不使用ineted 超级服务器管理
           --with-altlog                  #采用alt日志
           --with-puredb                  #采用puredb来存储ftp虚拟用户信息
           --with-throttling              #开启带宽控制
            --with-tls                    #开启ftps支持
            
            ./configure --prefix=/usr/local/pureftpd --without-inetd --with-altlog --with-puredb --with-throttling --with-tls
    
            echo $?  如果是0说明上一步成功,其它为错误
            
            make && make install
            
            
       5、修改配置文件
           cd configuration-file/
           mkdir /usr/local/pureftpd/etc   创建目录
           cp pure-ftpd.conf  /usr/local/pureftpd/etc/
           修改:vi /usr/local/pureftpd/etc/pure-ftpd.conf 如下
               在文件最后添加如下两行
               PureDB      /usr/local/pureftpd/etc/pureftpd.pdb
               PIDFile     /var/run/pure-ftpd.pid
       6、拷贝控制文件
           cp pure-config.pl /usr/local/pureftpd/sbin/
           chmod 755 /usr/local/pureftpd/sbin/pure-config.pl
       7、启动服务
           cd /usr/local/pureftpd
           ./sbin/pure-config.pl  ./etc/pure-ftpd.conf
           检查:ps -ef | grep ftp
           
       8、添加管理用户
           useradd  test
           mkdir -p /var/www/html/
           chown -R test:test /var/www/html/
           ./bin/pure-pw useradd ftp_user1 -u test -d /var/www/html
           ftp_user1:ftp登录用户名
           -u:指定系统中存在的用户
           -d:指定访问的目录
       9、创建虚拟的用户数据库
           ./bin/pure-pw mkdb
           
           /usr/local/pureftpd/bin/pure-pw list            #查看用户列表
           /usr/local/pureftpd/bin/pure-pw userdel  用户名    #删除用户
       10、通过ftp链接工具(FileZilla)测试
       
    

    5、nfs搭建

    nfs是什么?可以实现linux之间的文件共享
    nfs客户端还有服务端
    
    nfs搭建教程
    服务器上操作
        关闭防火墙   service iptables stop
        关闭selinux  setenforce 0
        1、yum install -y nfs-utils
        2、编辑配置文件
            vi /etc/exports
            /nfstest         10.0.144.0/24(rw,sync)
            要共享的目录     网段
        3、创建目录
            mkdir /nfstest
            vi /nfstest/lala.txt
        4、启动服务
            nfs是基于rpc协议的,所以首先启动rpc
            service rpcbind start
            service nfs start
    客户端上操作
        1、yum install -y nfs-utils
        2、查看对应ip地址上面共享的目录
            showmount -e 10.0.144.156
        3、挂载nfs
            mount -t nfs 10.0.144.156:/nfstest /mnt/usb
            mount -t nfs 10.7.181.94:/nfstest /mnt/usb
        4、配置开机挂载
            vi /etc/fstab
            10.0.142.34:/test/   /root/nfs   nfs   defaults  0   0
    

    6、nginx服务搭建

    nginx是什么? web服务器   apache打交道
    nginx服务器的根目录(www)在   /usr/local/nginx/html
    ip:端口     域名(jd.com   baidu.com   taobao.com   mi.com)  
    sb.com
    DNS服务商,阿里云、腾讯云都有
    
    一个服务器是否能放多个网站呢?可以的,配置虚拟主机
    
    nginx安装
    1、关闭防火墙和selinux
    2、安装依赖软件
        yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
    3、tar -zxvf nginx-1.11.5.tar.gz
    4、创建www用户,不允许以www用户登录系统
        useradd www -s /sbin/nologin
    5、./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www   --with-http_stub_status_module --with-http_ssl_module
    6、make && make install
    7、cp nginx /etc/init.d/
    8、开启服务
        service nginx start
    9、设置开机启动
        chkconfig nginx on
        chkconfig --list      查看是否开机启动
    10、查看网络和端口使用情况
        netstat -lnp | grep nginx
        nginx默认监听的端口为80端口
    
    
    
    虚拟主机配置步骤
    (1)修改nginx配置文件
        vi /usr/local/nginx/conf/nginx.conf
        在第116行加一行代码
        include vhost/*.conf;
    (2)新建一个vhost文件夹
        mkdir /usr/local/nginx/conf/vhost
    (3)来到vhost下,新建一个虚拟主机配置文件
        vi /usr/local/nginx/conf/vhost/www.lala.com.conf
        server
        {
            server_name www.lala.com;
            root html/lala;
            index index.html;
        }
    
        [说明]:
        server_name : 域名
        root : 网站的根目录
        index : 网站的默认首页
    (4)新建虚拟主机根目录
        mkdir /usr/local/nginx/html/lala
        vi /usr/local/nginx/html/lala/index.html
    
        service nginx restart   重启服务
    (5)编辑本机的hosts文件
        C:\Windows\System32\drivers\etc\hosts
        10.9.151.154  www.lala.com
    

    Python搭建教程

    
    1、下载源码
        Gzipped source tarball    这种后缀是 .tar.gz
        yum install -y zlib*  (必须的哥们)
        tar -zxvf Python-3.6.4.tgz
        cd Python-3.6.4
        
        编译
        ./configure --prefix=/usr/local/python3 --enable-optimizations
        
        (必须的)
        vi Modules/Setup
            将第366行的那个#号去掉
            zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
            
        make && make install
    2、链接过来指令包
        ln -s /usr/local/python3/bin/python3 /usr/bin/python3
        终端输入python3,即可进入python3的终端模式
    3、pip3设置
        find / -name pip3
        ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
        pip3 -V   查看pip3版本信息
        
        升级pip
        pip3 install --upgrade pip
    

    CentOS和Ubuntu的区别

    
        1. centos中新建的非root用户是没有sudo的权限的,如果需要使用sudo权限必须在/etc/sudoers 中加入账户和权限,所以切换到root账号的时候只需要输入:su,加入root账号的密码即可。 在Ubuntu中,一般使用sudo+命令,如果是第一次使用会提示输入当前用户的密码(而不是root的密码)
        2. 在线安装软件中,centos使用的是yum命令,而ubuntu中使用的是apt-get命令。除此之外yum中还有一个从软件源中搜索摸个软件的方法:yum search + 软件名
    
    
    CentOS7.0系列新指令:
        centos7.0 没有netstat 和 ifconfig命令问题   
            yum -y install wget 
            yum -y install net-tools
        centos7.0服务管理相关指令
            https://www.cnblogs.com/lgqboke/p/6069170.html
    
    ubuntu和centos不同.png

    7、各系统指令区别总结

    centos6.8
    centos7.0
    ubuntu16.04
    

    需要执行的下载指令有
    yum install -y gcc gcc-c++
    yum install -y zlib*
    yum install -y nfs-utils
    yum install -y gcc openssl-devel perl
    yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel

    环境变量和shell编程

    1. 环境变量

    环境变量用来存储工作环境信息的变量,主要分为系统全局变量和用户级全局变量

    • 全局变量

      常见的全局环境变量 : 
        PATH    指令的搜索路径
        HOME     用户的工作目录
        LOGNAME  用户的登录名
        SHELL    当前系统shell类型
      #使用全局变量
      echo $PATH  #显示单个全局变量,注意使用全局变量,必须加$
      export name='hello' #设置新的全局变量
      
      #系统级全局变量
      这类变量对系统内的所有用户都生效,所有用户都可以使用这类变量。
      这类变量在/etc/profile文件中设置,只有root用户才能设置
      vim /etc/profile
      export a=100
      :wq #存盘退出,这个时候a不会立即生效,应该是有
      source  /etc/profile
      
      #单用户级全局变量
      在用户主目录内有三个文件 ~/.bash_profile、~/.bashrc和~/.profile 在这个文件中定义变量只针对当前用户,添加方式同系统级全局变量
      
    • 添加PATH环境变量

      echo $PATH  #x显示全局PATH环境变量
      #1 临时设置
      PATH=$PATH:/home/csl  #将/home/csl添加到系统环境变量,只针对当前登录有效
      #2 对所有用户永久有效
      vi /etc/profile
      export PATH=$PATH:/usr/local/sysbench/bin 
      source /etc/profile
      
      # 3.对登录用户有效
      # vi ~/.bashrc 在里面加入:
      export PATH=$PATH:/usr/local/mysql/bin
      source ~/.bashrc
      

    2. shell编程

    2.1 什么是shell

    shell是一个命令解释器,将用户输入的命令解释给操作系统内核。

    Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它类似于Windows下的cmd.exe,可以交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,但是Shell是不需要进行编译的,它是从脚本程序中一行一行的读取并执行命令。

    Shell有两种执行命令的方式:交互式(Interactive),用户输入一条命令,Shell就解释执行一条;批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。

    2.2 常见的shell类型

    Linux 的 Shell 种类众多,常见的有:

    (1) BourneShell(sh):是由AT&T Bell实验室的 Steven Bourne为AT&T的Unix开发的,它是Unix的默认Shell,也是其它Shell的开发基础。Bourne Shell在编程方面相当优秀,但在处理与用户的交互方面不如其它几种Shell。

    (2) BourneAgain Shell (即bash):是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个默认的Shell。Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。

    (3) ash:ash Shell是由Kenneth Almquist编写的,是Linux 中占用系统资源最少的一个小Shell,它只包含24个内部命令,因而使用起来很不方便。

    (4) CShell(csh):是加州伯克利大学的Bill Joy为BSD Unix开发的,共有52个内部命令,与sh不同,它的语法与C语言很相似。它提供了Bourne Shell所不能处理的用户交互特征,如命令补全、命令别名、历史命令替换等。但是,C Shell与BourneShell并不兼容。该Shell其实是指向/bin/tcsh这样的一个Shell,也就是说,csh其实就是tcsh。

    (5) KornShell(ksh):是AT&T Bell实验室的David Korn开发的,共有42 条内部命令,它集合了C Shell和Bourne Shell的优点,并且与Bourne Shell向下完全兼容。Korn Shell的效率很高,其命令交互界面和编程交互界面都很好。

    (6) zch:是Linux 最大的Shell之一,由Paul Falstad完成,共有84 个内部命令。如果只是一般的用途,没有必要安装这样的Shell。

    • 可以使用系统变量SHELL查看当前使用的shell:echo $SHELL
    • 也可以到/etc/shells文件里查看系统可以使用的shell

    2.3 shell的交互方式

    • 命令行

    • 脚本执行

      • 编写脚本,文件后缀名一般为.sh
      • 文件必须以#!/bin/bash开头
      • 添加脚本的可执行权限chmode +x 脚本名
      • 执行脚本:
        • 在当前目录里执行:./脚本名
        • 在其他目录中执行:使用绝对路径
      #!/bin/bash
      #使用#注释,第一行是特殊存在
      cd /
      ls -al
      
      :wq #存退出盘
      chmod +x 1.sh  #修改权限,添加可执行权限
      ./1.sh   #执行当前目录下的shell脚本
      

    2.4 定义变量

    • 变量类型

      • 局部变量:只在本shell中使用
      • 环境变量 : 使用整个系统,一般大写
    • 局部变量的使用

      #1 定义局部变量
      a=10 #注意等号两边不要留空格,否则会看成多个命令
      b=$a
      
      #2显示局部变量
      echo $b
      echo ${b}
      echo "a=$a"  #双引号中的变量解释
      
      #3.销毁变量
      unset a #干掉一个变量,不要带$符
      #注意反引号,反引号引起来的是命令,可以执行,将执行结果给变量
      d=`date`
      
      【注】:等号两边不要留空格
      
      • 位置变量

        $0 表示脚本的名称
        $1-$9表示传递给脚本的的参数
        
        #test.sh脚本
        #!/bin/bash
        echo 'hello world'
        echo $0 $1 $2
        
        执行输出:
        hello world
        ./test.sh lala dudu
        
      • 特殊变量

        $#表示传递给脚本的参数个数
        $*表示传递给脚本的所有参数
        $?表示上一个命令执行的返回值,返回值为0表示成功执行,否则命令执行错误
        
      • 常量

      readonly a=10  #定义常量
      echo $a
      a='ll'  #-bash: name: 只读变量,不能修改
      

    2.5 引号

    • 双引号中解释变量,解释转义字符
    • 单引号不解释变量、不解释转义字符
    • 反引号会执行当中的内容
    • 特殊字符要用反斜线转义:& * ?| $ ^

    2.6 字符串

    • 计算字符串长度${#字符串名}
    • 提取子串:${字符串名:start:len}从下标为start开始,提取len个字符

    2.7 数组

    • 数组定义:a=(1 2 3) #千万注意,数值之间用空格分隔
    • 获取数组元素:${a[0]}
    • 赋值$a[0]=100
    • 获取数组长度:{#a[@]}或者{#a[*]}

    2.8 seq

    • 生成连续整数
    • 示例:seq 1 10,生成1-10的连续整数

    2.9 运算

    • 数学运算
    shell默认所有变量都是字符串,执行数学计算需要用[]括起来
    a=100
    echo $[$a+10]
    echo $[$a/2]
    echo $[$a*2]
    echo $[$a-80]
    echo $[10%2]
    
    echo $((3+5))
    echo $((10/2))
    echo $((10/3))  #3 整除
    echo $((10*3))
    echo $((10%3))
    
    let a=5+6
    echo $a
    let a+=10
    echo $a
    
    echo `expr 3 + 5`  #也可以用expr进行计算
    
    • 关系运算

      运算符 说明 举例
      -eq ==,相等返回 true。 [ a -eqb ]
      -ne !=,不相等返回 true。 [ a -neb ]
      -gt >,如果是,则返回 true。 [ a -gtb ]
      -lt <,如果是,则返回 true。 [ a -ltb ]
      -ge >=,如果是,则返回 true。 [ a -geb ]
      -le <=,如果是,则返回 true。 [ a -leb ]
    • 逻辑运算

      运算符 说明 举例
      && 逻辑的 AND [[ a -lt 100 &&b -gt 100 ]] 返回 false
      || 逻辑的 OR [[ a -lt 100 ||b -gt 100 ]] 返回 true
    • 字符串判断

      运算符 说明 举例
      = 检测两个字符串是否相等,相等返回 true。 [ a =b ] 返回 false。
      != 检测两个字符串是否相等,不相等返回 true。 [ a !=b ] 返回 true。
      -z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
      str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。
    • 文件判断

      操作符 说明 举例
      -d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
      -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
      -r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
      -w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
      -x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
      -s file 检测文件是否不为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
      -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

    2.10 分支语句

    • if-else

      a=100
      if [ $a -gt 90 ]
      then
          echo "a>90"
      else
          echo "a<=90"
      fi
      
    • case

      case $变量名 in
       模式1)
       命令序列1
       ;;
       模式2)
       命令序列2
       ;; 
       *)
       默认执行的命令序列     
       ;; 
      esac
      
      1 #!/bin/bash
        2 case $1 in
        3     start | begin)
        4         echo "start"
        5         ;;
        6     stop | end)
        7         echo "stop"
        8         ;;
        9     *)
       10         echo "I don't know"
       11 esac
      

    2.11 循环语句

    for 变量 in 列表
    do
        command1
        command2
        ...
        commandN
    done
    
    示例:
    for i in 1 2 3 4 5;do
        echo $i
    done
    
    #从命令读取值
    for line in `cat 1.txt`;do 
        echo $line
    done
    
    #读取目录列表
    for file in ~/*;do 
        echo $file; 
    done
    
    for i in `seq 1 100`;do
        let sum+=$i
    done
    
    #遍历数组
    for x in ${a[*]};do 
        echo $x; 
    done
    
    • while
    #当型循环
    while condition
    do
        command
    done
    
    sum=0
    i=0
    while [ $i -lt 10];do
       let sum+=$i
       let i+=1
    done
    
    • until
    #直到型循环
    #condition为假执行循环,为真停止
    until condition  
    do
        command
    done
    
    until [ ! $i -lt 10 ];do 
        echo $i; 
        let i+=1; 
    done
    

    2.12 break和continue

    和以前的用法一模一样

    2.13 函数

    • 函数必须先定义后使用
    #函数定义
    test()
    {
        echo "简单函数"
    }
    #函数调用
    test()
    

    相关文章

      网友评论

        本文标题:Linux

        本文链接:https://www.haomeiwen.com/subject/oqeqwftx.html