首页 > 系统服务 > 详细

linux和shell的学习记录

时间:2019-04-06 15:08:37      阅读:139      评论:0      收藏:0      [点我收藏+]

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 "\n"
    `echo -e "\033[4;31m 你好: \033[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:格式化输出,不会自动换行
        \t:tab 
        \n:换行
        %ns:字符串  n表示字符串个数
        %ni:整型    n表示数字个数
        %.nf:浮点型 n表示小数点后个数
        printf %s\t%s\t%s\t\%s\n 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\n",$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 "以上为执行结果\n"} 
    
        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 "\n"
            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

 

linux和shell的学习记录

原文:https://www.cnblogs.com/big-cut-cat/p/10661728.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!