Shell学习总结

shell编程

一、基础指令
    1.ls指令
        ../    上级目录
        ./    当前目录
        ls -al         
            -l 表示list,一详细列表的形式显示
            -a 表示显示所有目录和文件
    2.pwd指令
    3.cd指令
        cd~    回到家目录
    4.midir指令
        mkdir 路径
        mkdir -p 路径    创建多层目录    
    5.touch指令
        创建文件
    6.mv指令
        剪切命令
        mv 需要移动的文档路径 需要保存的位置路径
        可以移动文件夹
    7.rm指令
        -f    强制删除
        -r    递归删除文件夹
        
    8.vim指令
        
    9.cp指令
        cp 被复制的文档路径 文档被复制到的路径
        当使用cp命令对文件夹进行复制的时候,需要添加"-r"(表示递归)
    10.输出重定向
        有时候需要将一些命令的执行结果保存到文件中,进行后续的分析,则需要用到输出重定向技术。
    11.cat指令
    12.tail
        tail -F a.txt    可以实时改变
二、进阶指令:
    1.df -h(换算单位) :查看磁盘空间
    2.free -m:以MB为单位查看内存剩余
        swap:临时内存
    3.head -3
    4.tail -3
      tail -f 文件路径:可以查看一个文件的动态变化
    5.less  :查看文件,以较少的内容
    6.wc:统计文件内容信息
      wc -l  查看行数,-w 单词数,-c 字节数
    7.date
      查看时间日期  date +%F   (等价于date "+%Y-%m-%d")
      date "+%F %H-%M-%S(%T)"
      设置日期
        date -s 字符串时间
            date -s "2018-10-10 11:22:22"
        时间与网络时间一致
        ntpdate 0.asia.pool.ntp.org
    8.cal 
      cal -1  当前月份
      cal -3  上月,本月,下月
      cal -y 年份:某一年月份的日历
    10.clear  ==  Ctrl+L 
    11.grep 
        grep [] 关键词 文件路径
            -i 忽略大小写
            -c 计算个数
            -n 输出所在行数和内容
            -v 输出不包含该内容的其他东西
    12 which whereis
        查找命令在哪里
三、高级指令:
    1.hostname:主机名
    2.id:当前用户的基本信息
    3.whoami:显示自身的用户名称
    4.ps -ef:查看当前服务器的进程信息    System V 展示风格
        -e:列出全部的进程
        -f:显示所有列
       ps -aux    BSD分格
       
        如果想查看进程的CPU占用率和内存占用率,可以使用aux 
        如果想查看进程的父进程ID和完整的COMMAND命令,可以使用ef
    5.top:查看服务器进程所占的资源。
        load average 平均负载
            单核:小于等于1代表正常,大于1代表负载过高,大于2 需要增加配置
            多核:*核数
    6.du -sh:查看目录所占的磁盘空间
    7.find 范围 -type/-name
        ? 一个占位符    * 多个占位符
        
    8.service  :控制一些软件的服务启动、停止、重启
        service 服务名 start/stop/restart
    9.kill:杀死进程
        kill 进程PID
        killall [] 进程名称
            -9 强制杀死
    10.管道 |
        过滤:ls / | grep *.txt
    11.ifconfig:用于操作网卡
    12.reboot:重启
        reboot -w 模拟重启,但不重启(写日志)
    13.shutdown:关机 init 0/halt/poweroff
        shutdown -h now
        shutdown -h 12:30   shutdown -c取消关机
    14.uptime:输出计算机的持续在线时间
    15.uname:获取操作系统的类型
       uname -a 表示获取全部的信息
    16.netstat -atnlp        网络端口占用情况
       netstat:查看网络连接状态
       -t:只列出tcp协议的连接
       -n:将地址从字母组合转化成ip地址
       -l:过滤出"state(状态)"列中值为Listen(监听)的连接
       -p:显示进程pid和进程名称
    17.man(manual):包含全部Linux命令的手册。
    18.Ctrl+u 快速删除命令行中光标前的内容。
       Ctrl+k 光标后 
    19.文件权限
        -rwxr--r--  1 root root        61 Jul 27 22:54 a.c
        第一位:-:文件    d:文件夹
            权限:读写执行
        u    所有者
        g    用户组
        o    其他人
        a    所有人
        
        chmod a+x 文档路径
        chmod a = rwx    设置权限
        r = 4    w = 2    x = 1    - = 0
        chmod    777 文档路径
        chmod -r 777 目录路径        表示对当前目录及目录下所有的文件执行
    20.安装命令        yum install -y tree    
四、vim
    1.vim三种模式
        命令模式:快捷键操作(删除行,复制行,移动光标,粘贴)
        编辑模式:编辑文件
        末行模式:输入命令操作(搜索,替换,保存,退出,撤销,高亮)
    2.vim打开文件的方式
        #vim
        #vim +数字 文件的路径    :打开指定的文件,并且将光标移动的指定行
        #vim +/关键词 文件的路径  :打开指定的文件,并且高亮显示关键词
        #vim 文件路径1 文件路径2 问阿金路径3   :同时打开多个文件
    3.命令模式
        3.1 光标移动
            ①光标移动到行首    shift+6或^
            ②光标移动到行尾    shift+4或$
            ③光标移动到首行    gg
            ④光标移动到尾行    G
            ⑥翻屏              
                向上 ctrl+b   
                向下 ctrl+f
        3.2 复制
            ①复制光标所在行        yy     粘贴(p)
            ②从光标所在行开始,向下复制指定的行数    数字yy
            ③可视化复制            Ctrl+v  移动方向键选中需要复制的块 按yy  按p
        3.3剪切/删除
            ①剪切/删除 光标所在行                    dd(删除之后,下一行上移)
            ②剪切/删除 光标所在行开始,向下多行        数字dd
            ③剪切/删除 光标所在位置后边的(删除之后,下一行不上移)    D
        3.4撤销/恢复
            ①撤销    :u  或  u  (undo)
            ②恢复    ctrl+r   取消之前的撤销操作
        3.5扩展--光标的快速移动
            ①快速将光标移动到指定的行数    数字G
            ②以当前光标为准,向上/向下移动n行    数字 ↑/↓
            ③以光标为准 想左/向右                数字←/数字→
            ④末行模式下,  输入: 数字  回车
    4.末行模式
        进入方式
            在命令模式下,输入:
        退出方式
            ①按一下esc    ②按两下esc    ③将末行内容全部删除
        4.1保存操作        
            输入":w"        保存文件
            输入":w 路径"    另存为
        4.2退出操作
            输入":q"
        4.3保存并退出
            输入"wq"
            输入":x"    写入文件并退出
        4.4强制
            输入"q!"    强制退出,刚才做的修改不操作。
        4.5调用外部命令
            输入":!外部命令"
        4.6搜索/查找
            输入"/关键词"
                切换搜索结果  N/n
            如果需要取消高亮  输入":nohl"
        4.7替换
            :s/搜索关键词/新的内容            替换光标所在行的第一处符合条件的内容
            :s/搜索关键词/新的内容/g        替换光标所在行的全部符合条件的内容
            :%s/搜索关键词/新的内容            替换整个文档中所有行的第一处符合条件的内容
            :%s/搜索关键词/新的内容/g        替换整个文档中所有符合条件的内容
            
            %表示整个文档     g表示全局
        4.8显示行号
            输入":set nu"        下次进入就没了
            取消":set nonu"
        4.9扩展  打开多个文件操作
            输入":files"    查看现在打开了哪几个文件
            
            %a 表示当前打开的文件
            # 表示上一个打开的文件
            输入":open 文件名"    打开文件
            
            输入":bn" 切换到下一个文件 back next
            输入":bp" 切换到上一个文件 back prev
    5.编辑模式
        进入编辑模式:
            在命令模式下  
            按 i 在光标所在前面插入 
            按 a 在光标所在后面插入
    6.vim的实用功能
        6.1代码着色
            打开颜色显示 ":syntax on"
            关闭颜色显示  ":syntax off"
        6.2计算器的使用
            当在编辑文件的时候,突然需要使用计算器去计算一些公式,则此时需要用计算器。
            此时,用vim集成的计算器
                a.进入编辑模式
                b.按"ctrl + r",然后输入"=",此时光标变到最后一行
                c.输入需要计算的内容,按下回车。
    7.扩展功能
        7.1vim的配置
            ①在文件打开的时候在末行模式下输入的配置(临时)
            ②个人配置文件(~/.vimrc)  如果没有,可以自己创建
            ③全局配置文件(vim自带,/etc/vimrc)
        7.2异常退出
            在编辑文件后没有正常退出,突然关闭终端或断电。
            解决办法 : 将交互文件(.swp)删除即可。
        7.3别名机制
            创建一些属于自己的自定义的命令
            依靠一个别名映射文件:~/.bashrc
            
            修改之后,需要重新登录当前用户
        7.4退出方式
            :wq 文件若没有修改,但是使用了wq,则文件的修改时间会更新。
            :x 文件没有被修改,则时间不会被更新。
            :X 对文件进行加密
            
五、Linux自有服务
    1.运行模式
        也称之为运行级别
        在Linux 中存在一个进程:init(initialize,初始化),进程id是1.
        查看进程:ps -ef|grep init
        
        该进程存在一个对应的配置文件   inittab(系统运行级别配置文件,位置/etc/)
                    0---关机级别
                    1---单用户模式
            init    2---多用户模式,不带NFS
                    3---多用户模式,完全的多用户,命令行模式
                    4---被保留模式
                    5---X11,完整的图形化界面模式,图像界面模式
                    6---表示重启级别
六、用户管理
    1.用户管理
        1.1添加用户
            #useradd 选项 用户名
                选项: -g:表示指定用户的用户主组,id 或 组名
                        -G:表示用户附加组,id 或 组名 
                        -u:uid , 用户的id
            查看用户的主组 可以查看passwd文件
            查看用户的附加组可以查看group文件
        1.2修改用户
            #usermod 选项 用户名
            选项: -g:表示指定用户的用户主组,id 或 组名
                    -G:表示用户附加组,id 或 组名 
                    -u:uid , 用户的id
                    -l:修改用户名
        1.3设置密码
            前面创建的用户都处于锁定状态,需要设置密码后才能登陆计算机。
            #passwd 用户名
            输入密码
        1.4删除用户
            #userdel 选项 用户名
            选项:
                -r; 表示在删除用户的同时,删除其家目录
        1.5切换用户
            #su 用户名   (不写用户名默认为root)
            输入密码    (切换普通用户不需要输入密码;切换root需要输入密码)
        提示:所有跟用户操作的命令,(除passwd外,)都需要root才能执行。
    2.用户组管理
        涉及用户组的添加、删除和修改。组的增加,删除和修改实际上就是对/etc/group文件的更新
        文件结构:
        用户组名:密码:用户组ID:组内用户名
         密码x表示占位符
        2.1用户组添加
            groupadd    选项    用户组名
            选项 -g  用户组id
        2.2用户组编辑
            groupmod 选项    用户组名
            选项:-g 修改用户组id
                -n 修改用户组名
        2.3用户组删除
            groupdel    用户组名
            如果需要删除一个组,但是这个组是某个用户的主组,则不允许删除;
            如果确实要删除,需要将用户移走或删除。
    3.网络设置
        网卡配置路径:/etc/sysconfig/network-scripts/
        ifcfg-ens33
        ifcfg-lo
        
        3.1重启网卡:service network restart
                  /etc/init.d/network restart
        3.2创建快捷方式
            ln -s 原始文件路径  快捷方式路径
        3.3重启单个网卡
            停止某个网卡:#ifdown    网卡名
            开启某个网卡:#ifup    网卡名
    4.ssh服务
        ssh(安全外壳协议),该协议有2个常用的作用:远程连接协议,远程文件传输协议。
        4.1协议使用端口号:默认 22
            如果需要修改,则需要修改配置文件  /etc/ssh/ssh_config
                端口号范围  0~65535
        4.2服务启动/停止/重启
                service sshd start/stop/restart
        4.3终端工具
            PuTTY
            Xshell
            secureCRT
        4.4SSH服务文件传输工具
            可视化的界面传输工具  filezilla工具        
        通过命令行工具传输    pscp(通过cmd打开)
七、补充
    7.1快捷方式
        硬连接        ln    原路径    现路径
        软连接        ln    -s    原路径    现路径
        删除软连接    rm -rf 路径(后面不带/)
        ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
        
    7.2history
        查看已经执行过的历史指令,执行已经执行过的指令
        ①history    显示所有的历史指令
        ②histort 10    显示10个历史指令
        ③!编号        执行历史编号的指令
    7.3搜索查找命令
        ①find
            find [搜索范围] [选项]
                find /home hello.txt
                find /opt -user nobody    按文件拥有者查
                find / -size +20M    查大于20M的文件。(+n大于 -n小于 n等于)
        ②locate
            快速定位文件路径,利用locate数据库实现快速定位。
            第一次运行前,必须使用updatedb指令创建locate数据库
            locate 搜索文件
        ③grep 和 管道符号|
            grep,过滤查找;"|"前一个命令的处理结果交给后面的命令处理
            grep [选项] 查找内容 源文件
                [选项] -n 显示匹配及行号    -i 忽略字母大小写
                cat hello.txt | grep -ni yes
    7.4压缩和解压缩
        ①gzip/gunzip(.gz)
            gzip 文件        (压缩后,不会保留原文件)
            gunzip 文件
        ②zip/unzip
            zip [选项] XXX.zip 将要压缩的内容    (压缩文件和目录)
                -r 递归压缩目录
            unzip [选项]XXX.zip
                -d<目录> 指定压缩后的文件目录
        ③tar(打包指令 .tar.gz)
            tar [选项] XXX.tar.gz 打包文件        :打包目录,压缩后的格式为 .tar.gz
                -c 产生.tar打包文件
                -v 显示详细信息
                -f 指定压缩后的文件名
                -z 打包同时压缩
                -x 解压.tar文件
            
            压缩    tar -zcvf a.tar.gz a1.txt a2.txt
            解压    tar -zxvf a.tar.gz    -C 路径
    7.5修改文件所有者
        chown 用户名 文件名
        
        修改文件所在组
            chgrp 组名 文件名
        改变用户所在组
            usermod -g 组名 用户名
            usermod -d 目录 用户名    (改变该用户登录的初始目录)
    7.6定时任务调度(crond)
            简单的任务不需要编写脚本,对于复杂的任务需要写脚本实现。
        ①crontab进行定时任务的设置
            crontab [选项]
                -e 编辑crontab定时任务
                -l 查询crontab任务
                -r 删除当前用户所有的crontab任务
            步骤:
                crontab -e
                    分 时 日 月 星期
                    */1 * * * * ls - l /etc >> /tmp/to.txt
                        * 任何时间    
                        , 代表不连续的时间    
                        - 代表连续的时间范围
                        */n 代表每隔多久
        
    7.7磁盘分区,挂载
        7.7.1
            ①mbr分区
                最多四个主分区;系统只能安装在主分区;兼容性好
            ②gpt分区
                支持无线多个主分区
                最大支持123Eb大容量
            挂载(mount)
                将磁盘与Linux的某文件链接在一起。
                lsblk -f  查看系统的分区和挂载的情况
                
        7.7.2如何增加一块硬盘?
            虚拟机添加硬盘
            分区        fdisk /dev/sdb
            格式化        mkfs -t ext4 /dev/sdb1
            挂载        mount /dev/sdb1 /home/newdisk
            设置可以自动挂载    vim /etc/fstab
                                /dev/sdbl  /home/newdisk  ext4 defaults 0 0
            
    7.8磁盘情况查询
        7.8.1查询系统整体磁盘使用情况
            df -h
        7.8.2查询指定目录的磁盘情况
            du -h /目录
                -s 指定目录占用大小汇总
                -h 戴计量单位
                -a 含文件
                -c 列出明细的同时,增加汇总量
                --max-depth= n  子目录深度
        
        7.8.3磁盘情况---工作使用指令
            1)查看/home目录下文件的个数
                ls -l /home |grep "^-" | wc -l
            2)统计/home及子目录下的所有文件的个数
                ls -lr /home |grep "^-" | wc -l
            3)以树状显示目录结构
                tree
            
八、网络设置
    8.1 固定IP设置
        etc/sysconfig/network-scripts/ifcfg-ens33
            BOOTPROTO=static
            ONBOOT=yes
            IPADDR=192.168.1.3
            NETMASK=255.255.255.0
            GATEWAY=192.168.1.111
            DNS1=8.8.8.8            //域名解析
            DNS2=8.8.4.4
    8.2 设置hostname
        /etc/hosts    
            设置ip 和 hostname
            
            
九、补充(二)

    1.安装jdk
        卸载自带的jdk
            rpm -qa | grep jdk        检索jdk
            
            rpm -e java-1.7.0-openjdk* --node    删除
        安装
            1).安装包上传到linux系统中
            2).解压 tar -zxvf jdk* -C /usr/local
            3).配置环境变量
                vim /etc/profile
                export JAVA_HOME=/usr/local/jdk*
                export PATH=$PATH:$JAVA_HOME/bin
            4).使变量生效
                source /etc/profile
    2.传输文件
        1)rz        win往linux传文件
        2)sz file    linux往win传文件
    3.主机名修改
        vi /etc/sysconfig/network
    4.修改hosts(主机名映射)
        /etc/hosts
    5.pstree 进程树
        -p 加上pid
        -u 查看所属用户
    
    6.服务管理(service)
        6.1定义
            service 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,
            比如(mysql,防火墙,sshd),因此,我们又称为守护进程,是linux非常重要的知识点。
        6.2 使用
            service 服务名 [start|stop|restart|reload|status]
            centos7后,使用systemctl
        6.3 查看服务名
            1)使用setup -> 系统服务 九可以看到
            2)ls -l /etc/init.d 服务名称
        6.4 服务的运行级别(vi /etc/inittab)
            0:系统停机级别,
            1:单用户工作状态,root权限,用于系统维护
            2:多用户状态(没有NFS),不支持网络
            3:完全的多用户状态,登录后进入控制台命令行模式
            4:系统为使用,保留
            5:X11控制台,登录后进入图形化界面
            6:系统正常关闭并重启,默认不能设置,否则不能正常启动。
        6.5 开机运行流程
            开机->BIOS->/boot->init进程->运行级别->运行级别对应的服务
        6.6    不小心将级别设置为0或6 怎么办?
            进入单用户模式,进行设置
    7. 动态监控进程
        top和ps 都用来显示正在执行的进程,top可惜实时更新。
            top -d 10  10s刷新一次 
                p    一CUP使用率刷新,查看执行的进程
                M    以内存的使用率排序
                N    以PID排序
                q
            1)监视特定用户
                top 查看执行的精彩
                u 用户名 按回车
            2)终止指定的进程
                top: 查看进程
                输入k 回车,在输入要结束的进程ID号。
    8.监控网络端口服务
        netstat [选项]
            -an    按一定顺序输出
            -p    显示那个进程在调用
十、RPM和YUM
        1.rpm包的管理
            1.1介绍
                一种用于互联网下载包的打包及安装工具,包含在某些Linux分发版中,它生成
                .RPM扩展名的文件。
            1.2
                1.2.1 查询已安装的rpm列表        
                    rpm -qa | grep xx
                1.2.2 查询安装软件的版本等信息
                    rpm -qi 软件名
                1.2.3 查看软件包安装到哪里去了
                    rpm -ql 软件名称
                1.2.4 查询文件属于哪个软件包
                    rpm -qf 文件
            1.3 卸载RPm包
                rpm -e RPM包的名称 --nodeps
            1.4 安装rpm包
                rpm -ivh RPM包全路径名称
                    i= install 安装
                    v= verbose 提示
                    h= hash 进度条
            1.5安装高版本的MySQL
                下载一个rpm,安装上一个配置文件,(包含了mysql的yum下载配置文件)
                rpm -ivh xx.prm
                修改配置文件    /etc/yum.repos.d/mysql-community.repo
                    把5.7的 enable=0 改为 enable =1
                    把8.0的 enable=1 改为 enable=0
                安装 yum install -y mysql-community-server
                    service mysqld start
                    service mysqld restart
                查找临时密码    grep 'temporapy password' /var/log/mysqld.log
                mysql -uroot -p
                ALTER USER 'root'@'localhost' IDENTIFIEd BY '123456'
                防火墙 远程操作
        2. YUM
            2.1 介绍
                Yum是一个Shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动
                下载RPM包并且安装,可以自动处理依赖性关系,并且一次性安装所有依赖的软件包
            2.2指令
                2.2.1 查询yum服务器是否有需要安装的软件
                    yum list | grep xx
                2.2.2 安装
                    yum -y install xx
                2.2.3 卸载
                    yum -y remove xx
        3. 防火墙设置
            重启:#systemctl restart firewalld.service
            启动:# systemctl start  firewalld
            查看状态:# systemctl status firewalld 或者 firewall-cmd --state
            开机是否启动:# systemctl disable | enable firewalld
            禁用:# systemctl stop firewalld
            更新防火墙规则:
            # firewall-cmd --reload
            # firewall-cmd --complete-reload
        4. 克隆
            克隆一个一模一样的操作系统
            克隆步骤
                1) 删除/etc/udev/rules.d/70-persistent-net.rules
                2) 将克隆前的网卡序列号删除 UUID,HWADDDR
                3) 克隆(关机状态)
                4) 删除网卡eth0,将eth1改为eth0
                    /etc/udev/r*/70*net*
                5) 修改网络配置eth0
                6) 重启电脑
        5. 集群同步时间
            ntpdate 0.aira.pool.ntp.org
        6. 远程copy文件
            scp file mar01:/root
            scp -r dir mar01:/root
        7. 免密登录
            1)yum install -y openssh-clients    安装ssh客户端
            2)生成公钥和私钥
                ssh-keygen -t rsa
            3)把你的公钥发给别人(一旦其他机器接受了公钥,西祠登录就不需要密码了)
                ssh-copy-id -i /root/.ssh/id_rsa.pub hostname(ip)

            
            
            
            
 

            
         
            

猜你喜欢

转载自blog.csdn.net/qq_32539825/article/details/81745374