最近阅读《Linux命令与Shell脚本编程大全》,重新学习了一下Linux基础,对一些常用的命令进行了笔记。

有幸刚毕业的时候就接触到了Linux,对一些常用的命令相对比较熟悉。如今工作中用到Linux的机会不是很多,

重新学习一下,加深理解,以便对后边Linux相关的学习有所帮助。
1.常用命令
    ln    sourceFile  destinationFile    创建硬链接文件
     ln -s sourceFile destinationFile  创建软连接文件,源文件删除 软连接文件不可用
    df     查看挂载磁盘的信息(物理空间,可用空间,剩余空间等)    -h  以M为单位
    du    查看当前目录下的文件和子目录所占空间大小
    ps  -ef  查询某刻正在运行的进程,并以完整格式显示出来
    ps -l     查询某刻正在运行的进程,并以长格式显示出来
    top     动态显示正在运行的进程
    top -Hp pid  显示该进程下的所有线程

2.内建命令,外部命令命令区分
    type  [-a]  +命令   查看该命令是内建命令还是外部命令
    外部命令需要生成子进程来执行,因此,相比之下 内建命令速度快,效率高

3.命令列表,进程列表区分
    命令列表;  pwd ; ls ; cd ; ....      不会生成子shell
    进程列表: (pwd ; ls ; cd ; ....)     会生成子shell
    bash  命令会生成子shell

4.后台进程
    命令 + &   该命令在后台进行   会生成一个 作业号 和进程id 如:
    sleep 20&       
    [1]  2184
    可以通过pe -ef   或 jobs进行查看

5.协程
    协程: coproc  不仅会创建子shell,还会进入后台模式
    coproc  sleep 10
    [1] 2544

6.history命令
    history   查询使用过的命令
    存放在 .bash_history文件中

7.查询已定义变量
    set  vs  env/printenv
    set :显示全局变量/局部变量/用户自定义变量
    env/printenv:只显示全局变量     printenv HOME 可以输出单个变量的值

8.变量相关
    变量名=value  
    unset + 变量名   删除环境变量
    echo $变量名    输出环境变量
    export  变量名   将变量设为全局变量  可以在子shell中使用,子shell修改删除此全局变量,仅在子shell中生效,父shell依然能访问
    变量永久化:将变量的声明和赋值写在.bashrc启动文件中

9.系统重要配置文件
    系统全局变量 :/etc目录
    profile,  .bash_profile, .bash_login,  .bashrc,  .profile   
    profile文件是bash shell 默认的主启动文件,每个用户登录都会执行这个启动文件
    另外四个文件针对用户
    
    $HOME目录下的启动文件
    .bash_profile,  .bashrc,  .bash_login,  .profile
    大多数Linux发行版只用到了以上一到两个
    shell 会按照以下顺序读取
    .bash_profile
    .bash_login
    .profile
    没有.bashrc的原因: 该文件通过其他文件运行
    $HOME 表示某个用户的主目录,和~的作用一样

10.数组
    数组:   arr=(one two three)
    echo $arr     结果 one
    echo ${arr[1]}  结果two    注意括号
    echo ${arr[*]}  结果 one two three
    unset ${arr[1]}   echo ${arr[*]}  结果  one    three
    unset arr  删除数据变量

11.用户,组
    管理用户:
    useradd   userdel  usermod
    useradd username 增加用户
    passwd username    修改密码
    userdel  username   删除用户信息,不会删除文件   -r  删除对应文件目录
    usermod username -l(L小写)  newusername  改变用户登录名
    usermod username -L 锁定账户  -U接触锁定
    
    管理组:
    groupadd  groupmod
    
    文件  全权限  666   减去 unmask 022   默认权限 644
    目录  全权限  777  减去  unmask 022  默认权限  755
    unmask   026  设置 需从对象减去的默认权限
    
    设置文件权限:
    八进制模式
    chmod  760  filename
    符号模式:
    chmod [ugoa] [+-=] [rwxXstugo....]
    
    chown  [u][u.g][.g]  filename  更改文件属主,属组   .或者:
    chgrp  g filename 更改文件属组
    
    echo  
    -n  将文本字符串和命令输出显示在同一行

12.命令替换:
    将命令输入复制给变量   方式:  1)var1=`date`  2)var1=$(date)

13.重定向:
    输出重定向: >      用例:echo hello world > b.txt
    输出追加重定向: >>
    输入重定向: <     用例:cat < b.txt
    内联输入重定向:<<   用例: cat << EOF
    > hello
    > morning
    > bye
    >........
    > EOF

14.管道:  |
    用例:  cat b.txt | sort

15.数学运算: 
     expr   1 + 5   (运算符与值之间必须有空格, 特殊符号 用\转义  \*)   相当于一个命令输出
    可以使用变量   expr  $var1 + $var2
    $[1+6]   相当于 数学运算 + 命令替换 ,给变量赋值   运算符与值可以没有空格  只支持整数运算
    可以使用变量  $[$var1 + $var2]

16.bc计算器:  可以计算浮点数
    用例: [oxx@localhost Documents]$ bc
    bc 1.06.95
    Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'. 
    2.2*2
    4.4                                                  //计算结果
    3.250 * 4
    13.000
    scale=4;3+3
    6
    1/3
    .3333
    scale=5                        //设置小数位数
    1/3
    .33333
    
    双括号((condition))  可以是任意数学赋值或比较表达式 ,如>>, <<, **(幂乘),...
    双方括号[[condition]]  支持字符串的高级特性,模式匹配,如 if [[ $USER == r* ]] ,USER变量是否以r开头
    $?   上一条以执行命令的状态码 0~255 ,如果退出状态码超出255  则会模256
    命令成功执行 $? 输出为0
    shell脚本以最后一个命令的退出状态码退出
    
    exit  指定状态码
    用例:  var1=300
    exit $var1

17.结构化命令:
    1)if语句:    只有当if后边的命令退出状态码为0 才执行then后边的语句
     格式 :  
    if  commands                          if commands; then
         then                         commands
            commands                  fi
     fi

2)if  else语句
    if commads
    then
    commands
    else
    commands
    fi

3)if elif语句
    if commands
    then
    commands
    elif commands
    then
    commands
    else
    commands
    fi

18.test测试命令    
    范围:整数(-eq,-ge,-gl,-le,-lt,-ne),字符串(=,!=,>, <,-n 长度非0,-z 长度为0  ‘’或未定义的变量长度为零),文件(-d, -e(文件/目录是否存在),-f,-r,-s(文件内容是否非空),-w,-x,-O(文件是否属于当前用户所有),-G(文件默认组是否与当前用户相同), file1 -nt file2 (file1是否比file2新), file1 ot file2(文件file1 是否比file2 旧))
    字符串比较时,  > , <  必须用\转义,否则当重定向处理
    test命令  中的条件成立 ,退出状态码为0,否则退出状态码非0
    if test condition
    then
    commands
    fi
    等价于:
    if [ condition ]                   //方括号 必须与 内部的条件留有空格
    then
    commands
    fi

19.case用法:
    case  variable in
    pattern1 | pattern2)  commands;;
    pattern3) commands;;
    *)  commands;;
    esac

20.for用法:
    for var in  option
    do
      commands
    done
    
    option: 1) var1 var2 var3 var4   用空格分开
         2) $var   变量    
         3) $( cat filename  )    命令替换
         4)  /bin/* /etc/passwd   通配符读取目录
    
    C语言风格的for
      for (( a=1,b=10; a <= 10; a++,b--))
    do
    commands
    done

21.内部字段分隔符IFS
    默认情况下 bash shell 会将空格,制表符,换行当做字段分隔符
    IFS=:;“   改变IFS默认值,  $'\n'换行符专用

22.while用法:
     多条命令 必须换行, 且以最后一条命令的退出状态码为准,为0执行循环语句
    while  test condition1
    condition2
    do
    commands   #如需计算赋值 记得用 $[]  或 expr方式
    done

23.until用法:
    多条命令 必须换行, 且以最后一条命令的退出状态码为准,为非0执行循环语句
    until test condition1
    condition2
    do
    commands
    done

24.退出循环: 
    break n:  默认break  退出一个循环   n指定退出几个循环
    continue n: 默认 continue 退出一个循环的当前循环   n指定退出的循环数

25.位置参数: 
    $0,$1,$2.....${10},${11} 跟在脚本后边
    $0  返回脚本名(可能会带有全路径或者命令./)
    basename $0  返回脚本名(不会带有全路径)

26. $* VS $@
    $#  返回命令行参数的个数
    $*  $@   返回命令行所有参数
    $*  会将所有参数当作一个字符串
    $@ 会将所有参数当作统一字符串的不同单词
    可用for循环 遍历  for param in "$*"   注意 引号

27.对循环的输出进行管道或重定向:
   在done命令之后添加| 或者 > 
   也可以使用输入重定向<  将内容传送个循环条件

28.read命令
    read 读取用户输入
    read -p 命令行显示提示
    read -t   设置超时时间
    read -s  命令行输入,但不显示在控制台(如密码)
    
    read -s -t 3 -p "echo your name:"  [parameterName]
    echo  your name is $REPLY   //如果parameterName 为空  默认赋值给REPLY

29.shift  命令
    向左删除位置参数 
    sh  test.sh  a b c d   
     $1 是 a    shift 之后 $1 是b

30.文件描述符:
     0:标准输入   1:标准输出  2:错误输出
    cat test1 > test2   将正常信息输入到test2
    cat test1 2> test2 将错误信息输入到test2
    cat test1 2>test2  1>test3 将正常输出输到test3,将错误信息输到test2
    cat test1 &> test2 将正常输出和错误信息输到test2
    cat test1 >> test2 将正常输出追加到test2

31.脚本中使用重定向:
1)临时重定向  
    test.sh中:
    #!/bin/bash
    echo "msg ouput in redirect test file" >&1
    echo "error msg output in redirect test01 file" >&2
    echo "end message ouput in terminal" 
    
    执行: sh test.sh 1> corrFile  2> errFile
    corrFile内容:
    msg ouput in redirect test file
    end message ouput in terminal
    errFile内容:
    error msg output in redirect test01 file
    结论:默认标准输出  所以corrFile中有两条数据

2)永久重定向  exec命令
     标准输出及错误输出案例
    redirect02.sh内容:
    #!/bin/bash
    exec 1>corrFile
    exec 2>errFile
    echo "corr message ouput in corrFile";
    echo "err message ouput in errFile" >&2;
    
    
    执行sh redirect02.sh
    corrFile内容:
    corr message ouput in corrFile
    errFile内容:
    err message ouput in errFile
     标准输入案例
    #!/bin/bash
    redirect03.sh内容:
    exec 0< content
    count=1;
    while read line        #从文件中读取
    do
      echo $count line: $line
      count=$[ $count + 1  ]
    done
    
    执行 sh redirect03.sh
    控制台输出:
    1 line: English
    2 line: Chinese
    3 line: Japanese
    4 line: Indian people
      自定义重定向   数字 3-8可供使用   0标准输入 1标准输出 2错误输出
                redirect04.sh内容:
     #!/bin/bash
    exec 5> corrFile
    echo "This is my defined command" >&5
    
    执行 sh redirect04.sh
    corrFile内容:
    This is my defined command
    恢复已重定向的文件描述符
         redirect05.sh内容:
    #!/bin/bash
    
    exec 3>&1
    exec 1> corrFile
    echo "hello everybody"
    exec 1>&3
    echo "I'm back"
    
    执行 sh redirect05.sh
    corrFile 内容:
    hello everybody
    控制台输出:
    I'm back
    可使用3-8等供使用的文件描述符  记住之前的重定向文件符进行恢复  1>&3 必须挨着写
    
    同理:  输入重定向恢复    exec  6<&0
                                           exec   0<   content   
      ....
    exec 0<&6 
     读写文件描述符  exec 5<> test.txt    
    写的内容会覆盖原来的内容     read  line <$4       <$4必须加上,因为不是标准输入,read默认从标准输入STDIN读取
     关闭文件描述符&-: 案例   exec  3>&-  
    关闭之后 重新启用该文件描述符,操作同一个文件 如有输出会内容覆盖
     阻止信息输出   案例  ls -al  >  /dev/null
     清空文件   cat /dev/null > test.txt

32.创建临时文件
     创建本地临时文件  mktemp  filename.XXXXXX   
    6个大写的X不能少  执行命令之后会输出文件全路径     1.dO7w7u
     mktemp -t  filename.XXXXXX  会在系统的临时目录/tmp 穿件
     穿件临时文件夹  mktemp -d dir.XXXXXX

33.记录消息:tee
    会将消息显示在标准输出的同时,还会在指定文件保存一份
    date | tee test.txt
    控制台:  Sun Jan 17 06:33:37 PST 2021
    test.txt内容:Sun Jan 17 06:33:37 PST 2021
    
    tee  -a  test.txt 追加内容

34.捕获信号 trap:  
    trap  commands  signals
    以SIGINT为例, ctrl+c会触发SIGINT信号
    cat trapScript.sh   
    
    #!/bin/bash
    trap "echo sorry, you can\'t stop script" SIGINT
    for ((  i = 0; i < 5; i++  ))
    do 
        sleep 3
        echo $i
    done
    
    将捕获所有的ctrl+c 命令  脚本继续运行  trap - SIGINT  恢复默认行为,也是终止脚本

35.后台模式运行 &
    运行脚本会生成一个作业号:
     sh trapScript.sh &
    [1] 5100
    [***@localhost myscripts]$ 0
    1
    2
    3
    4

后台脚本的STDOUT,STDERR消息会显示到控制台  终端回话退出,后台脚本也会退出

36.nohup命令
    nohup + command  允许命令在退出终端后继续执行
    nohup: 脚本不会随着终端回话退出而退出
    hohup   sh trapScript.sh &   
    会将STDOUT  STDERR消息显示到当前目录的nohut.out文件中

37.查看作业: jobs
    jobs  -l 会显示作业号 
    -p  只列出作业的PID
    -r  只列出运行中的作业
    -s  只列出已经停止的作业

38.作业相关
    ctrl+z  停止作业   
    bg  + 作业号   以后台的形式重启作业
    fg  +  作业号   以前台的形式重启作业

39.优先级
    设置优先级: -20~19  值越小优先级越高  默认为0
    nice -num  command  设置num优先级   普通用户只能降低优先级
    renice 可以设置运行中进程的优先级  renice -num -p pid 将pid的优先级设为num

40.定时任务:
    at  vs cron
    at:
    at [-f filename] time   -f读取文件名
      例如: at -f xx.sh now
    
    cron:
    min hour dayofmonth month dayofweek command
    cron 允许使用特定值,取值范围(1~5),通配符 *
    
    at命令在预设的时间运行脚本;cron程序定期运行脚本

41.函数:
格式:
1)function   name(){commands}
2)name(){commands}
    shell中 用return 给函数返回特定的状态码 模256,只能是数值
    函数返回字符串:
    fun4(){
        echo hello
    }

result=$(fun4)
    2.函数传参数
    fun5(){
         echo $[ $1 + $2 ]
    }
    result=$(fun5 1 2)

42.函数局部变量   local + name

43.函数库:
    将多个函数定义在一个文件中,脚本中调用时首先得引用函数库
    . ./functions 或 source functions   (函数库和脚本在同一目录下)
    例如: 库函数 cat funLibscript.sh
    #!/bin/bash 
    function add(){
     echo $[ $1 + $2 ]
    }
    multiply(){
    echo $[ $1 * $2 ]
    }
    divide(){
    echo $[ $1 / $2 ]
    }
    minus(){
    echo $[ $1 - $2 ]
    }
    
    测试:
    #!/bin/bash
    source ./funLibscript.sh
    value1=12
    value2=4
    addResult=$(add value1 value2)
    echo "add result is $addResult"
    mulResult=$( multiply value1 value2 )
    echo "multiply result is $mulResult"
    divideResult=$(divide value1 value2)
    echo "divide result is $divideResult"
    minusResult=$(minus value1 value2)
    echo "minus result is $minusResult"
    
    echo -e  识别 \t 等符号
    echo -en 去掉末尾的换行符

44.sed 行编辑器  不会改变原文件中的数据
   1. sed options script file
    -e  使用多个编辑命令
    -f  使用脚本中的编辑命令,如果编辑命令较多,可以放入一个脚本中
    sed编辑器会将指定的命令应用到STDIN输入流上,可以通过管道输入给sed编辑器进行管理
    echo 'hello world' | sed 's/world/xindanding/'  将world用xindanding替换,最后的/不能省, 多个命令 单引号不能省
    2.处理文件  
    sed 's/world/xindanding/'  sedContent  将文件中的每行的第一个world用xindandin替换
    3.多个编辑命令 
    sed -e 's/world/xindanding/;s/black/white' sedContent 将文件中每行的第一个替换
    4.使用脚本
    sed -f sedCommand.sed sedContent   
    cat sedCommand:
    s/world/xindanding/
    s/black/white/
    5.替换标记
    s/pattern/repacement/flags
    默认只替换每行的第一个
    数字: 表名新文本将替换第几处模式匹配的地方
    g:表名新文本将替换所有匹配的文本
    p:将原先的文本内容打印出来
    w file:将替换结果写到文件中
    6.使用地址:
    数字方式寻址
    sed '2s/dog/cat/' data1.txt
    只修改第二行的文本,同理  2,3s/.... 修改2-3行的文本,2,$s/..修改从第二行到最后一行的文本。
    sed '2{
    s/fox/elephant/
    s/dog/cat/
    }'  data1.txt
    命令分组
    使用模式匹配
    sed '/xindanding/s/cat/dog/'  data1.txt
    对匹配xindanding的行 进行替换
    7.删除行,不会修改原始文件
    sed 'd'  data1.txt
    删除所有的行   sed '3d' data.txt 删除第三行  '2,3d',  '2,$d'同理
    sed '/xindanding/d' data1.txt
    删除匹配的行
    8.插入行
    insert:  在指定行之前插入
    echo 'hello world' | sed 'i\ xindanding'
    输出:  xindanding
       hello world
    对于文本文件可以指定行  3i,等等   反斜杠可以不加 识别第一个i字符
    append: 在指定行之后插入
    echo ‘hello world’ | sed 'a\xindanding'
    输出: hello world
    xindanding
    9.修改行
    sed '3c\ hello' data1.txt
    第三行用hello代替
    sed ‘/xindanding/c\ hello’ data1.txt
    匹配xindanding的行 用hello代替
    10.转换命令  
    sed ‘y/123/789' data1.txt
    全局的,不只针对一行  会对转换的字符一一对应,7替换1,8替换2....

45.gawk : 
     gawk options script file
    -F  指定行中字段分隔符
    -f 从指定文件中读取程序
    gawk程序必须放到{}中,如果脚本是单个文本字符串,还需要用‘’单引号包裹
    gawk '{print "hello world"}'  没有指定文件名 默认从STDIN中接收
    数据字段变量
    $0 代表整个文本  $1代表第一个数据字段  $2代表第二个数据字段....
    gawk '{print $1}' gawkContent  
    
    默认识别空格和制表符  输出每行的第一个字段
    gawk -F: '{print $1}' gawkContent  
    
    以:作为分隔符
    在脚本中使用多个命令
    echo "my name is joke" | gawk '{$4="xindanding";print $0}'
    my name is xindanding
    
    
    xindanding必须用引号包含
    使用脚本
    gawk -f gawkCommand.gawk gawkContent 
    
    cat gawkCommand
    {print $1 , $2}
    
    处理数据的前后运行的脚本 ,区分大小写
    BEGIN ‘{}’   处理数据前运行的脚本
    END '{}'  处理数据后运行的脚本
    gawkCommand.gawk:
    BEGIN{print "starting...."}
    
    {print $1,$2}
    
    END {print "end...."}
    
    
    运行:
    [oxx@localhost myScripts]$ gawk -f gawkCommand.gawk gawkContent 
    starting....
    One line
    Two line
    Three line
     
    end....

46.网络连接方式:
1.桥接:
客户机就相当于真是主机。可以访问互联网,设置IP,互相访问。
如果没有网络,主机之间无法连接。
2.NAT: 网络地址转换
client和宿主机形成网络,客户机可以访问互联网,由宿主机做
DNS和NAT,IP也是由宿主机分配,客户机无法访问网络中的其他主机
没有网络的情况下,宿主机和客户机仍然是连通的,但客户机不能修改IP
3.Only host: 和NAT非常相似,只不过,client机不能访问互联网

Linux 命令介绍相关推荐

  1. 常见linux命令介绍-ps

    原文地址:常见linux命令介绍-ps 前言 ps(Process Status)命令是linux中最常见的命令之一,它用来列出当前系统中运行的那些进程的状态信息,当然了,它只显示命令执行时的进程状态 ...

  2. linux df命令各项表示什么意思,linux命令介绍:df使用介绍

    linux中df命令参数功能:检查文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 语法:df [选项] 说明:linux中df命令可显示所有文件系统对 ...

  3. linux中dpkg找不到命令_工作中常用的Linux命令介绍与实践

    点击上方可关注! 前言 做后端开发的同学,一般都会接触到服务器,而我们现在的系统用的比较多的服务器系统就是linux了,平时多多少少也会接触到一些linux下的shell命令.我们来介绍下linux一 ...

  4. Linux命令介绍及思维导图

    学习工具.网站.方法     分享代码的平台:GitHub.码云(每个大的项目)      总结知识点平台:CSDN.博客园(写博客至少每周一篇)      笔试面试题:牛客网[专项练习.剑指offi ...

  5. linux pmap was java,jvm 《九》pmap linux 命令介绍 及使用

    用法 pmap [ -x | -d ] [ -q ] pids... pmap -V 选项含义 -x   extended       Show the extended format. 显示扩展格式 ...

  6. linux下mknod命令介绍

    2019独角兽企业重金招聘Python工程师标准>>> linux下mknod命令介绍 mknod - make block or character special files m ...

  7. linux 命令 读phy_CentOS教程(七)- 常用命令使用介绍(上)

    "一切皆文件"是Linux的基本哲学之一.普通的文件.目录.设备等一切"东西"在Linux中均是以文件形式展现. 好的,让我们来记住上面引言的话: 一切皆文件 ...

  8. linux tf命令,Linux系统命令介绍之vmstat命令详解

    今天小编要跟大家介绍的vmstat命令详解.熟悉Linux系统和使用Linux系统工作的小伙伴都知道Linux的命令有很多,而真正在工作中用到的命令应该不超过几十个,为了让大家更好的掌握这些命令,小编 ...

  9. linux系统防火墙相关问题及常用命令介绍

    今天介绍关于linux系统防火墙:centos5.centos6.redhat6系统自带的是iptables防火墙,centos7.redhat7自带firewall防火墙,ubuntu系统使用的是u ...

最新文章

  1. 某短视频程序员吐槽:公司要求每天刷短视频的时长和绩效挂钩,这合理吗?网友:那某陌员工要按照奔现次数算绩效吗?...
  2. 在DWR中实现直接获取一个JAVA类的返回值的两种方法
  3. 网工基础测试题(附HCIA题库)
  4. JQUERY GET
  5. 【大话Hibernate】hibernate缓存详解
  6. 网络流之最大流算法(EdmondsKarp)
  7. POJ 2960 博弈论
  8. java中的10的算法,Java中10个常用的排序算法
  9. thymeleaf学习
  10. php无限分类下载,php无限分类
  11. BZOJ_1011_[HNOI2008]_遥远的行星_(近似)
  12. 大牛直播SDK-Windows RTMP/RTSP/本地FLV播放器使用说明...
  13. 是HTML+CSS的学习笔记捏
  14. Spark独到见解--Action算子总结
  15. 知识图谱的构建及用Neo4j和grapheco/InteractiveGraph实现知识图谱的可视化
  16. *基于类平衡自我训练的无监督域自适应用于语义分割
  17. 博睿数据智能监测终端全面升级,计算能力强大、用户体验真实性高
  18. 分销APP联盟商家入驻商城系统开发
  19. 16. 设计模式之契约原则:如何做好 API 接口设计?
  20. python计算列表元素之和,python实现计算列表元素之和

热门文章

  1. java基础之测试1
  2. 如何干净地清除电脑中的木马病毒
  3. java毕业设计二手交易系统Mybatis+系统+数据库+调试部署
  4. 嵌入式Linux的低功耗策略
  5. 结构偶然性(第一部分)
  6. Java开发游戏脚本(第五卷)
  7. 对于nth-child()的理解
  8. Jdeveloper 10g开发体验之二
  9. WebGoat——XST
  10. Spring Cloud教程(十二)加密和解密