zoukankan      html  css  js  c++  java
  • linux和shell的学习记录

    1.16条常用的命令

    1.文件的权限修改:(把文件1.txt的归属改为mysql的,然后ll查看)
        chown mysql:mysql 1.txt
        
    2.增加当前用户的x权限,然后ll查看:
        chomd u+x 1.txt
    
    3.对比文件的差异:
        diff 1.txt 2.txt
        
    4.查询文件位置:
        find ./ -name 1.txt
        
    5.杀掉进程
        kill -9 9865
        
    6.杀掉test用户下面的所有进程:
        ps -ef | awk '$1=="test"{print $2}'    | xargs kill -9
        
    7.查看时间:
        date 
        
    8.查看当前用户
        id
        
    9.查看当前主机信息
        uname -a
        
    10.使用root用户修改test用户密码:
        passwd test
        
    11.磁盘空间信息
        df -h
            
    12.查看当前所在目录
        pwd
    
    13.标准输出,和print类似:
        echo '123'
        
    14.查看文件前10行信息
        head -10 1.txt
        
    15.查看文件后10行
        tail -10 1.txt
        
    16.vi基本使用
        ESC后:
            x:删除一个字符
            dd:删除一行
        底行模式:
            设置行号:set nu
            查找:/字符

    2.文件权限问题命令:

    1.权限字符:
        分三列:所有者,所属组,其他
        r:读---4
        w:写---2
        x:执行---1
        
    2.增加当前用户的x权限,然后ll查看:
        chmod u+x 1.txt
        
    3.文件的权限修改:(把文件1.txt的归属改为mysql的,然后ll查看)
        chown mysql:mysql 1.txt
        
    4.例如:-rw-r--r--. 1 root root         68 Mar 27 00:40 test.sh
        所有者:root 权限:rw
        所属组:root 权限:r
        但是所有者root可以使用:sh test.sh来执行这个文件,因为可读
        直接使用./test.sh执行不了,
        需要授权:chmod +x test.sh  即可执行
        
    5.执行文件:(推荐./和sh的方式)
        有r:
            sh test.sh
            bash test.sh
            source test.sh
            
        有x:
            sh test.sh
            bash test.sh
            source test.sh
            ./test.sh  
        
    6.sh的原理:
        读取文件的命令,然后执行文件里面的命令,所以只要有r权限就能执行

    3.命令操作符号问题:

    1.符号>
        删除文件内容追加新内容,经常和cat一起使用
        cat >1.txt
        回车然后输入内容
        
    2.符号>>
        不删除文件内容追加字符,经常和cat一起使用
        cat >>1.txt
        回车然后输入内容
        
    3.符号;
        执行多条命令
        cat 1.txt ; ls
        
    4.符号|
        管道:| 表示管道,上一条命令的输出,作为下一条命令参数(输入)。
        cat 1.txt | grep 你好
        
    5.符号&&
        前面的命令执行成功才执行下一条命令
        cat 1.txt && ls
        
    6.符号||
        前面的命令执行不成功才执行下一条命令
        
    7.符号""
        输出变量值
        echo "第一个变量是:$a"
        
    8.符号''
        只会当成字符串输出
        echo '第一个变量是:$a'
        
    9.符号``
        符号内解析为一条命令
        a='date' 为字符串   echo $a  结果为date
        a=`date` 为一条命令 echo $a  结果为时间
        
    10.无底洞
        2>/dev/null  把错误的输出丢到无底洞,不会在控制台打印错误信息
        2>/dev/null     把正确的输出丢到无底洞,不会在控制台打印正确信息
        cat 1.txt 2>/dev/null 

    4.运算符号问题:

    1.输出表达式的三种方法:
        expr 12 + 2
        echo $[12 + 2]
        echo $((12 + 2))
        
    2.使用bc计算器(字符串交给bc处理)
        echo "1.2+1.3" | bc            结果:2.5
        echo "scale=2;1.2+1.3" | bc    结果:2.5
        echo "scale=2;(1.2+1.3)/1" | bc    结果:2.50

    5.判断运算的问题:

        -e    目标是否存在:    [ -e 1.txt ] || touch 1.txt
        -d    是否为路径    :     [ -d /docker ] && echo '存在' 
        -f    是否为文件
        
        -r    是否有r权限:    [ -r 1.txt ] && echo '有读权限'
        -w    
        -x
            
        整数:
        -eq    等于        [ 9 -eq 9 ] && echo '等于'
        -ne    不等于        
        -gt    大于        
        -lt    小于        
        -ge    大于或等于    
        -le    小于或等于    
        
        字符串:
        =    等于    [ 'ggg' = 'ggg' ] && echo '等于'
        !=    不等于    
        
        小数:通过bc计算器    [ `echo '1.2 > 1.3' | bc` -eq 1 ] && echo '大于'
        
        常用:
        [ $? -eq 0 ] 判断上一条命令是否执行成功

    6.read命令:

    read命令:
        -p 给出提示符
        -s 隐藏输入内容
        -t 给出等待时间,超时退出read
        -n 限制读取字符个数,超过临界值会自动执行
        

    7.-e 的作用

    -e :激活命令的作用:
        echo -e "
    "
        `echo -e "33[4;31m 你好: 33[0m"`

    8.处理海量数据;grep,awk,sed,cut

    8.1grep:行操作

        -v :内容的取反
        -n :行号+内容
        -w :精确匹配
        -i :忽略大小写
        ^  :匹配行首
        -E :正则匹配
        
        在123.sh文件提取包含user的行内容
            grep 'user' 123.sh
            
        匹配以user开头的行
            grep '^user' 123.sh
            
        匹配包含user1或user2或user3的行
            grep -E 'user1|user2|user3' 123.sh

    8.2cut:列操作

        -d :指定分割符(不加默认tab键分割)
        -f :指定截取区域
        -c :以字符为单位进行分割
        
        以':'为分割符,截取出123.sh文件第一列和第3列
        cut -d ':' -f 1,3 123.sh
        
        以':'为分割符,截取出123.sh文件第一列到第3列
        cut -d ':' -f 1-3 123.sh
        
        以':'为分割符,截取出123.sh文件第二列到最后一列
        cut -d ':' -f 2- 123.sh
        
        截取123.sh文件第二个字符到第五个字符
        cut -c 2-9 123.sh
        
        案例:
        领教教你截取所有可登陆系统的普通用户(除root)
        grep '/bin/bash' /etc/passwd | cut -d ':' -f 1 | grep -v 'root'
        cat /etc/passwd | grep 'bin/bash' | cut -d ':' -f1 | grep -v 'root'

      上述命令也可以用cat命令:
        cat 123.sh | cut -d ':' -f 1,3

    8.3强大的awk:列操作

        awk [选项] '条件{执行动作} 条件2{执行动作} ..' 文件名
        选项和条件可以不写
        
        printf:格式化输出,不会自动换行
            	:tab 
            
    :换行
            %ns:字符串  n表示字符串个数
            %ni:整型    n表示数字个数
            %.nf:浮点型 n表示小数点后个数
            printf '%s	%s	%s	\%s
    ' 1 2 3 4 5
            
        print:会自动换行
        
        例子:查看磁盘的使用率
            df -h | grep /dev/vdal | awk '{printf "/dev/vdal的使用率:"} {print $5}'
            
            浮点计算(最后的$0表示一整行)
                echo "scale=2; 0.13 + 0.1" | bc | awk '{printf "%.2f
    ",$0}'
                
                $0:一整行
                $1:第一列
                $2:第二列
                ...
                
            
        条件:
            F:指定分割符:
                cat /etc/passwd | cut -d ':' -f 1
                cat /etc/passwd | awk -F":" '{print $1}' 
            
            BEGIN:读取所有文件内容前执行,一般用于修改内置变量的值
            FS:BEGIN时定义分割符
                cat /etc/passwd | awk 'BEGIN {FS=":"} {print $1}' 
        
            END:结束时执行
                cat /etc/passwd | awk -F":" '{print $1} END{printf "以上为执行结果
    "}' 
        
            NR:行号
                df -h | awk '(NR>=2 && NR<=5) {print $5}'
                awk '(NR>=2 && NR<=5) {print $5}' /etc/passwd
            
            打印行号:
                nl /etc/passwd | awk '(NR>=2 && NR<=5) {print $1}' 
                
                

    8.4sed:先取,新增,搜索,替换,删除

        sed [选项] [动作] 文件名
            选项和动作可以不写
        
            -n:把匹配到的行打印
            p:以行为单位进行查询,通常与-n一起使用
                打印第二行:
                df -h | sed -n '2p'
                打印包含2行:
                df -h | sed -n '/2/p'
                
                
            d:删除(不会对源文件修改的)
                删除第二行:
                df -h | sed '2d'
                把文本放到一个新的文件
                df -h > newdf.txt 
                sed '2d' newdf.txt
                
            a:在行的下面插入新的内容(不修改源文件)
                sed '2a 123456789' newdf.txt
                
            i:在行的上面插入新的内容(不修改源文件)
                sed '2i 123456789' newdf.txt
            
            c:替换
                把第二行替换
                sed '2c 123456789' newdf.txt
        
            s/str1/str2/g    str2替换str1
                sed 's/%0/100%/g' newdf.txt
            
            -i:对源文件进行修改(高危操作,必须先备份)
                sed -i 's/%0/100%/g' newdf.txt
            
            -e:表示可以执行多条动作
                比如搜索内容时替换和打印两个动作
                cat newdf.txt | sed -n -e 's/0%/100%/g' -e '/100%/'
                
        
        搜索内容的方法:
            sed -n '/100%/p' newdf.txt
            cat -n newdf.txt | sed -n '/100%/p'
            
        之前学过的grep搜索:
            cat -n newdf.txt | grep 100%

    复习:

    判断运算的问题 

        -e    目标是否存在:    [ -e 1.txt ] || touch 1.txt
        -d    是否为路径    :     [ -d /docker ] && echo '存在' 
        -f    是否为文件
        
        -r    是否有r权限:    [ -r 1.txt ] && echo '有读权限'
        -w    
        -x
            
        整数:
        -eq    等于        [ 9 -eq 9 ] && echo '等于'
        -ne    不等于        
        -gt    大于        
        -lt    小于        
        -ge    大于或等于    
        -le    小于或等于    
        
        字符串:
        =    等于    [ 'ggg' = 'ggg' ] && echo '等于'
        !=    不等于    
        
        小数:通过bc计算器    [ `echo '1.2 > 1.3' | bc` -eq 1 ] && echo '大于'
        
        常用:
        [ $? -eq 0 ] 判断上一条命令是否执行成功

    运算符号问题:

    1.输出表达式的三种方法:
        expr 12 + 2
        echo $[12 + 2]
        echo $((12 + 2))
        
    2.使用bc计算器(字符串交给bc处理)
        echo "1.2+1.3" | bc            结果:2.5
        echo "scale=2;1.2+1.3" | bc    结果:2.5
        echo "scale=2;(1.2+1.3)/1" | bc    结果:2.50

    9.循环:

    9.1循环的if

    1.  if [条件];
            then
            动作
        fi
        
        
    2.  if [条件];
            then
            动作
        else
            动作
        fi
        
        例子:判断输入文件是否存在
            #!/bin/bash
            if [ -e $1 ];
                    then
                    echo "$1存在"
            else
                    echo "$1不存在"
            fi
    
            
                
    3.  if [条件];
            then
            动作
        elif [];
            动作
        fi    
    
        例子:判断输入的数字是否大于10
            #!/bin/bash
            echo '请输入一个数字:'
            read number
            if [ $number -eq 10 ];
                then
                echo "$number 等于10"
            elif [ $number -gt 10 ];
                then 
                echo "$number 大于10"
            else
                echo "$number 小于10"
            fi    

    9.2循环的for

        1.格式:
            for 变量名 in 值1 值2 ....
            do
            动作
            done
            
            例子:打印1-10
            #!/bin/bash
                for i in 1 2 3 4 5 6 7 8 9 10
                do 
                echo $i
                sleep 1
                done
        
        
        
        2.格式
            for 变量名 in `命令`
            do
            动作
            done
            
            例子:打印1-100
                #!/bin/bash
                for i in `seq 1 100`
                do 
                echo $i
                done
            
            例子:ping两下baidu是否通,通则断开
                #!/bin/bash
                for i in $(cat a.txt)
                do 
                ping -c  2 $i
                echo -e "
    "
                done
            
            a.txt文件内容
            www.taobao.com
            www.qq.com
            
        3.格式:
            for ((条件))
            do
            动作
            done
            
            例子:打印1-10
                #!/bin/bash
                for ((i=1;i<11;i++))
                do
                echo $i
                sleep 1
                done

    9.3循环的case:(匹配执行)

        1.格式:(;;表示执行完后结束)
            case 变量 in 
                值1 )
                动作
                ;;
                
                值2 )
                动作
                ;;
                
                值3 )
                动作
                ;;
                
                ...
            esac
        
        例子:查询城市天气
            echo '请输入城市'
            read city
            case $city in 
                '广州')
                echo "$city温度23,热"
                ;;
                '四川')
                echo "$city温度24,热"
                ;;
                '大良')
                echo "$city温度25,热"
                ;;
                *)
                echo "输入有误"
                ;;
            esac

    9.4循环的while

        1.格式:
            while [ 条件判断式 ]
            do
            动作
            done
        
            例子:计算0加到n的和
                #!/bin/bash
                i=0
                sum=0
                while [ $i -le $1 ]
                do
                sum=$(($sum+$i))
                i=$(($i+1))
                done
                echo 'the sum is:'$sum
  • 相关阅读:
    PHP、JAVA、C#、Object-C 通用的DES加密
    xtraScrollableControl 滚动条随鼠标滚动
    C#让TopMost窗体弹出并置顶层但不获取当前输入焦点的终极办法
    C#获取“所有用户桌面”的路径
    C#如何获取快捷方式指向的目标文件
    10
    09
    新浪微博中tableview中头部信息
    ASIHTTPRequest类库简介和使用说明
    IOS常用设计模式之委托模式
  • 原文地址:https://www.cnblogs.com/big-cut-cat/p/10661728.html
Copyright © 2011-2022 走看看