• 常用Linux及awk命令学习


    Linux命令

    快捷键

    Ctrl+L 清屏
    Ctrl+K 从光标位置删除到末尾
    Ctrl+U 从光标位置删除到开头

    文件权限

    一共10位,第一位表示文件类型,其他9位3个一组,顺序是rwx(读、写、可执行)
    每组分别代表owner的权限、与当前用户同组的用户权限、其他用户权限

    文件类型有几种标识
    d:目录
    -:文件
    l:链接

    修改文件、目录权限的命令

    chmod u=rwx,g=rw,o=r aaa.txt

    u是属主,g是当前用户所在组同组的用户,o是其他用户

    还可以用数字表示

    chmod 764 aaa.txt

    修改文件所属用户和所属组

    chown username:groupName aa.txt
    chown username:aa.txt
    chown:groupName aa.txt

    -R:递归子目录修改所属者和所属组

    cd

    进入目录
    用法:绝对路径、相对路径

    cd /root/Documents
    cd ./path # 进入同级的path目录
    cd ../path # 进入上一级的path目录
    cd - # 进入上一级目录

    ls

    list
    加参数展示内容不同
    -a # 列出全部文件,包括隐藏文件
    -l # 列出文件属性和权限
    -R # 连子文件夹里的内容也一起列出
    -h # 文件大小展示更友好

    ls -l相当于ll

    grep

    抓取包含某内容的一行
    通常与管道命令一起使用

    grep [-acinv][--color=auto]'字符串'filename

    -a # binary文件以text文件的方式查找
    -c # 计算查找到的次数
    -i # 忽略大小写
    -v # 反向选择

    man

    man [命令]
    列出命令的使用方法

    wc

    wordcount
    返回结果里有4个值,分别表示行数、单词数、字符数、文件名

    参数
    -l:查看行数
    -w:查看单词数
    -c:查看字符数

    du

    查看文件大小
    -h:人性化显示单位(文件大小以k为单位)
    -s:不递归,只统计该文件目录的大小

    mkdir、rmdir

    创建、删除文件夹

    mkdir -p test/a/b  # 在test下的a下创建文件夹b。创建文件夹时,如果上面的文件夹都不存在,就创建一个
    rmdir test  # 删除test目录。test目录必须是空目录

    touch、rm

    rm test.txt  # 带询问的删除
    rm -f test.txt  # 不询问直接删除
    rm -r test  # 递归删除,即删除目录以及其目录下的子目录(带询问的删除)
    rm -rf test  # 直接删除test目录及其子目录

    -f:force,强制删除
    -i:互动模式
    -r:递归删除

    打包解包

    tar -zcvf [打包压缩后的文件名.tar.gz] [要打包压缩的文件]

    -z:调用gzip压缩命令进行压缩
    -c:打包文件
    -v:显示运行过程
    -f:指定文件名

    解压也是tar
    参数
    -x:解压
    -C:指定解压的位置

    tar -xvf xxx.tar.gz -C /usr
    tar -xvf xxx.tar.gz

    cp

    cp [-adfilprsu] 来源文件 目标文件

    -a相当于-pdr
    -p:复制文件的属性(备份常用)
    -d:若来源是link file,就复制link file属性而非文件本身
    -r:递归复制,一般用在目录复制时

    -i:如果目标档已存在,覆盖前询问

    mv

    -f:force,强制删除
    -i:互动模式
    -u:如果目标文件已存在,且source比较新,就会升级(update)

    更名

    mv mvtest mvtest2

    文件查看

    cat # 从第一行显示文件内容
    tac # 从最后一行倒着显示文件
    nl # 输出内容带行号
    more # 一页一页输出
    less # 和more类似,但可以往前翻页
    tail
    head

    tail -n100  # -n后面接数字表示显示几行
    tail -f

    awk

    以文件的一行内容为处理对象,根据指定的条件判断是否处理此行内容。若符合条件,按照动作处理文本

    语法

    处理文件内容

    awk 'condition{action}' filename

    处理其他命令执行结果

    command | awk 'condition{action}'

    常用参数

    $1表示打印echo的结果里的第一个空格分隔出来的单词。
    从1开始数,不从0开始
    $0表示当前整行内容

    [User1@vultr ~]$ echo "aa bb cc dd   ee   ff" | awk '{print $1}'
    aa
    [User1@vultr ~]$ echo "aa bb cc dd   ee   ff" | awk '{print $4}'
    dd
    [User1@vultr ~]$ echo "aa bb cc dd   ee   ff" | awk '{print $5}'
    ee

    -F这个参数可以指定分隔符

    [User1@vultr ~]$ echo "aa bb cc 1 dd   ee   ff" | awk -F '1' '{print $1}'
    aa bb cc
    [User1@vultr ~]$ echo "aa bb: cc dd   ee   ff" | awk -F ':' '{print $1}'
    aa bb

    NF表示当前行字段个数 所以第NF个字段表示最后一个字段,$(NF-1)表示倒数第二个字段

    [User1@vultr ~]$ echo "aa bb: cc dd   ee   ff" | awk -F ':' '{print $NF}'
     cc dd   ee   ff
    [User1@vultr ~]$ echo "aa bb: cc dd   ee   ff" | awk -F ':' '{print $(NF-1)}'
    aa bb

    NR表示行号
    逗号分隔变量,会以空格分隔输出
    注意右括号,必须用双引号括起来,才能正常输出

    [User1@vultr ~]$ cat testfile
    test file ouput
    line2
    line3
    [User1@vultr ~]$ cat testfile | awk '{print NR")",$0}'
    1) test file ouput
    2) line2
    3) line3

    FILENAME表示当前文件名
    只有awk+filename这种形式才能打印出文件名

    [User1@vultr ~]$ awk '{print FILENAME,NR")",$0}' testfile
    testfile 1) test file ouput
    testfile 2) line2
    testfile 3) line3

    使用管道形式打印时,文件名会输出为”-“

    [User1@vultr ~]$ cat testfile | awk '{print FILENAME, NR")",$0}'
    - 1) test file ouput
    - 2) line2
    - 3) line3

    RS表示行分隔符,默认是换行符

    [User1@vultr ~]$ cat testfile | awk '{print $0,RS}'
    test file ouput
    
    line2
    
    line3

    OFS表示用空格分隔内容

    ORS表示用换行符分隔内容

    [User1@vultr ~]$ echo "aa1bb1cc1dd" | awk -F "1" '{print $1 ORS}'
    aa

    tolower()

    toupper()

    [User1@vultr ~]$ echo "aa1bb1cc1dd" | awk -F "1" '{print toupper($1)}'
    AA

    length()
    substr($1,2) # 分割字符,$1表示第一个单词,2表示从这个单词的第二个字符开始到结尾
    substr($1,2,1) # 分割字符,$1表示第一个单词,2和1表示从第二个字符开始,往后取1个字符

    [User1@vultr ~]$ echo "abcd1efgh1ijkl1mnop" | awk -F "1" '{print substr($1,2)}'
    bcd
    [User1@vultr ~]$ echo "abcd1efgh1ijkl1mnop" | awk -F "1" '{print substr($1,2,1)}'
    b

    rand()表示随机数

    printf

    printf跟C语言的差不多,可以格式化字符

    匹配字符串内容

    打印包含某字符串的行
    特殊的字符需要转义(比如要找/,需要在前面打一个)

    [User1@vultr ~]$ cat testfile
    test file ouput
    line2
    line3
    [User1@vultr ~]$ cat testfile | awk '/line/ {print $0}'
    line2
    line3

    某个字段完全匹配某个值

    [User1@vultr ~]$ echo "abcd1efgh1ijkl1mnop" | awk -F "1" '$1=="abcd" {print $0}'
    abcd1efgh1ijkl1mnop

    布尔值

    [User1@vultr ~]$ cat testfile | awk 'NR==2 {print $0}'
    line2
    [User1@vultr ~]$ cat testfile | awk 'NR>1 {print $0}'
    line2
    line3
    [User1@vultr ~]$ cat testfile | awk 'NR%2==1 {print $0}'
    test file ouput
    line3

    if...else...

    if和else语句用;分隔
    if条件用括号括起来

    [User1@vultr ~]$ echo "abcd1efgh1ijkl1mnop" | awk -F "1" '{if ($1=="abcd") print "1";else print "0"}'
    1

    BEGIN和END

    表示程序执行前/执行后,需要执行的一段代码

    [User1@vultr ~]$ awk 'BEGIN {print "start!"}
    > {print $0}
    > END {print "EOF"}' testfile
    start!
    test file ouput
    line2
    line3
    EOF
  • 相关阅读:
    机器学习-线性模型
    机器学习-性能度量
    机器学习-模型评估
    机器学习-术语笔记本
    linux中文在线帮助文档
    【docker】搭建本地私有镜像库(转)
    【VUE】VUE问题记录
    【JS】闭包的本质
    【Maven】Maven使用记录
    【JS】纯JS实现div中的文字双击可编辑
  • 原文地址:https://www.cnblogs.com/wuhuohanke/p/11920985.html
Copyright © 2020-2023  润新知