bash循环、函数、数组、内置的字符串处理、变量、trap信号捕捉

流程控制

  • 过程式编程语言:

    • 顺序执行

      • 如果是命令写错了,可以继续往下执行;但当语法错误时则不会往下继续执行;
    • 选择执行
    • 循环执行

条件选择:if语句

  • 单分支

    if 判断条件;then
           条件为真的分支代码
      fi
  • 双分支

    if 判断条件; then
            条件为真的分支代码
       else
            条件为假的分支代码
       fi
  • 多分支

    if 判断条件1; then
            条件为真的分支代码
     elif 判断条件2; then
            条件为真的分支代码
     elif 判断条件3; then
            条件为真的分支代码
     else
            以上条件都为假的分支代码
     fi
  • 逐条件进行判断,第一次遇为“真”条件时,执行其分支,
    而后结束整个if语句

条件判断:case语句

  • case支持glob风格的通配符:

    • *: 任意长度任意字符
      ?: 任意单个字符
      []:指定范围内的任意单个字符
      a|b: a或b
    case $VARAIBLE in
    PAT1)
          分支1
          ;;
    PAT2)
          分支2
          ;;
    ...
    *)
          默认分支
          ;;
    esac

循环


  • 循环执行

    1. 将某代码段重复运行多次
      重复运行多少次:

      • 循环次数事先已知
        循环次数事先未知
    2. 有进入条件和退出条件

  • for,while,until

for循环

for 变量名 in 列表;do
        循环体
  done
  • 执行机制:
    依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束

  • 列表生成方式:

    1. 直接给出列表
    2. 整数列表:

      • {start..end}
      • $(seq [start [step]] end)
      • ~]# sum=10
        ~]# eval echo {1..$sum}
        1 2 3 4 5 6 7 8 9 10
    3. 返回列表的命令
      $(COMMAND)
      反引号
    4. 使用glob,如:*.sh
    5. 变量引用;
      $@, $*
  • 特殊用法

    • 双小括号方法,即((…))格式,也可以用于算术运算
      双小括号方法也可以使bash Shell实现C语言风格的变量操作
      #I=10
      #((I++))

    • for循环的特殊格式:

      for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))
       do
          循环体
        done
      
       控制变量初始化:仅在循环代码开始运行时执行一次
       控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断

while循环

while CONDITION; do
        循环体
done
  • CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环

  • 因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正

  • 进入条件:CONDITION为true
    退出条件:CONDITION为false

  • 特殊用法
    while循环的特殊用法(遍历文件的每一行):

    while read line; do
           循环体
     done < /PATH/FROM/SOMEFILE

    依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line

  • 死循环

    while ture;do
        循环体
    done
    • 退出方式:某个测试条件满足时,让循环体执行break命令;

until循环

until CONDITION; do
         循环体
    done
  • 进入条件: CONDITION 为false
    退出条件: CONDITION 为true

循环控制语句continue

  • 用于循环体中

  • continue [N]:提前结束 [第N层] 本轮循环,而直接进入下一轮判断;最内层为第1层;结束continue [N] 所在的循环

    while CONDTIITON1; do
         CMD1
         ...
         if CONDITION2; then
               continue
         fi
         CMDn
         ...
       done

循环控制语句break

  • 用于循环体中

  • break [N]:提前结束 [第N层] 循环,最内层为第1层;结束整个循环

while CONDTIITON1; do
       CMD1
       ...
       if CONDITION2; then
             break
       fi
       CMDn
       ...
done

循环控制shift命令

  • shift [n]

  • 用于将参量列表 list 左移指定次数,缺省为左移一次。
    参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。

  • while 循环遍历位置变量列表时,常用到 shift

  • ./doit.sh a b c d e f g h
    ./shfit.sh a b c d e f g h

  • 示例:

    #!/bin/bash
    while [ $# -gt 0 ] # or (( $# > 0 ))
    do
      echo $*
      shift
    done
    #!/bin/bash
    #step through all the positional parameters
    until [ -z "$1" ]
    do
      echo "$1"
      shift
    done
    echo

select循环与菜单

select variable in list
       do
            循环体命令
       done
  • select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示 PS3 提示符,等待用户输入

    • 用户输入菜单列表中的某个数字,执行相应的命令
      用户输入被保存在内置变量 REPLY 中
  • select与case

    • select 是个无限循环,因此要记住用 break 命令退出循环,或用 exit 命令终止脚本。也可以按 ctrl+c退出循环
    • select 经常和 case 联合使用
    • 与 for 循环类似,可以省略 in list,此时使用位置参量

函数

函数介绍

  • 函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程

  • 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分

  • 函数和shell程序比较相似,区别在于:

    1. Shell程序在子Shell中运行
    2. 而Shell函数在当前Shell中运行。因此在当前Shell中,函数可以对shell中变量进行修改

定义函数

help function
函数由两部分组成:函数名和函数体

语法一:
       function f_name {
              ...函数体...
       }
   语法二:
       function f_name () {
              ...函数体...
       }
   语法三:
     f_name (){
           ...函数体...
     }

函数使用


  • 函数的定义和使用:

    • 可在交互式环境下定义函数
      可将函数放在脚本文件中作为它的一部分
      可放在只包含函数的单独文件中
  • 调用:函数只有被调用才会执行

    • 调用:给定函数名
      函数名出现的地方,会被自动替换为函数代码
  • 函数的生命周期:被调用时创建,返回时终止

  • 函数返回值

    1. 函数的执行结果返回值:
      (1) 使用echo或printf等命令进行输出
      (2) 函数体中调用命令的输出结果
    2. 函数的退出状态码:
      (1) 默认取决于函数中执行的最后一条命令的退出状态码
      (2) 自定义退出状态码,其格式为:
      return 从函数中返回,用最后状态命令决定返回值
      return 0 无错误返回。
      return 1-255 有错误返回

交互式环境下定义和使用函数

  • 示例:

    $dir() {
    ls -l
    }
  • 定义该函数后,若在$后面键入dir,其显示结果同ls -l的作用相同
    $dir

  • 该dir函数将一直保留到用户从系统退出,或执行了如下所示的unset命令:
    $ unset dir

在脚本中定义及使用函数

  • 函数在使用前必须定义,因此应将函数定义放在脚本开始部分,直至shell首次发现它后才能使用

  • 调用函数仅使用其函数名即可

    示例:

    $cat func1
      #!/bin/bash
      # func1
      hello()
      {
        echo "Hello there today's date is `date +%F`"
      }
      echo "now going to the function hello"
      hello
      echo "back from the function"

使用函数文件

  • 可以将经常使用的函数存入函数文件,然后将函数文件载入shell
    文件名可任意选取,但最好与相关任务有某种联系。例如:functions.main

  • 一旦函数文件载入shell,就可以在命令行或脚本中调用函数。可以使用set命令查看所有定义的函数,其输出列表包括已经载入shell的所有函数

  • 若要改动函数,首先用unset命令从shell中删除函数。改动完毕后,再重新载入此文件

    • 创建函数文件

      函数文件示例:

      $cat functions.main
      #!/bin/bash
      #functions.main
      findit()
      {
       if [ $# -lt 1 ] ; then
          echo "Usage:findit file"
          return 1
       fi
       find / -name $1 –print
      }
    • 载入函数
      函数文件已创建好后,要将它载入shell

      • 定位函数文件并载入shell的格式:
        . filename 或 source filename
        注意:此即<点> <空格> <文件名>;这里的文件名要带正确路径

      示例:上例中的函数,可使用如下命令:
      $ . functions.main

    • 检查载入函数
      使用set命令检查函数是否已载入。set命令将在shell中显示所有的载入函数

      示例:

      $set
       findit=( )
      {
         if [ $# -lt 1 ]; then
         echo "usage :findit file";
         return 1
         fi
         find / -name $1 -print
      }
    • 执行shell函数
      要执行函数,简单地键入函数名即可

      示例:

      $findit groups
      /usr/bin/groups
      /usr/local/backups/groups.bak
    • 删除shell函数

      1. 现在对函数做一些改动后,需要先删除函数,使其对shell不可用。使用unset命令完成删除函数

        • 命令格式为:
          unset function_name

          示例:$unset findit

      2. 再键入set命令,函数将不再显示

环境函数

  • 使子进程也可使用
    声明:export –f function_name
    查看:export -f 或 declare -xf

函数参数


  • 函数可以接受参数:

    • 传递参数给函数:调用函数时,在函数名后面以空白分隔给定参数列表即可;例如“testfunc arg1 arg2 …”

    • 在函数体中当中,可使用$1, $2, …引用这些参数;还可以使用$@或 $*引用所有参数, $#引用传递的参数的个数;

    • 位置参数
      script $1 此$1,为脚本位置参数
      f_name $1 此$1,为函数位置参数

函数变量

  • 变量作用域:

    • 环境变量:当前shell和其子shell有效

    • 本地变量:作用域是运行脚本的shell进程的生命周期;因此,其作用范围为当前shell脚本程序文件,包括脚本中的函数;

      • 只在当前shell进程有效,为执行脚本会启动专用子shell进程;
    • 局部变量:作用域是函数的生命周期;函数结束时变量被自动销毁;

      • 在函数中定义局部变量的方法
        local NAME=VALUE
      • 如果函数中的变量未定义局部变量;则在函数执行之后对脚本的环境有效
        注意:如果函数中有局部变量,如果其名称同本地变量,会使用局部变量

函数递归

  • 函数递归:
    函数直接或间接调用自身
    注意:递归层数

  • 递归实例:
    阶乘是基斯顿 卡曼于 1808 年发明的运算符号,是数学术语一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且有0的阶乘为1,自然数n的阶乘写作n!

    n!=1×2×3×…×n

    • 阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n

      n!=n(n-1)(n-2)...1
      n(n-1)! = n(n-1)(n-2)!
  • 阶乘示例:

    #!/bin/bash
    #
    fact() {
       if [ $1 -eq 0 -o $1 -eq 1 ]; then
              echo 1
       else
              echo $[$1*$(fact $[$1-1])]
       fi
    }
    fact $1
  • fork炸弹
    fork炸弹是一种恶意程序,它的内部是一个不断在fork进程的无限循环,实质是一个简单的递归程序。由于程序是递归的,如果没有任何限制,这会导致这个简单的程序迅速耗尽系统里面的所有资源

    • 函数实现

      :(){ :|:& };:
      bomb() { bomb | bomb & }; bomb
    • 脚本实现

      cat Bomb.sh
      #!/bin/bash
      
      ./$0|./$0&

数组

数组

  • 变量:存储单个元素的内存空间
  • 数组:存储多个元素的连续的内存空间,相当于多个变量的集合

    • 数组名和索引

      • 数组名:整个数组只有一个名字;
      • 索引:编号从0开始,属于数值索引
        注意:索引可支持使用自定义的格式,而不仅是数值格式,此即为关联索引,bash4.0版本之后开始支持
    • bash的数组支持稀疏格式(索引不连续)
  • 声明数组:
    declare -a ARRAY_NAME:声明索引数组;
    declare -A ARRAY_NAME:声明关联数组
    注意:两者不可相互转换

数组赋值

  • 索引数组

    • (1) 一次只赋值一个元素;

      ARRAY_NAME[INDEX]=VALUE
      
      weekdays[0]="Sunday"
      weekdays[4]="Thursday"
    • (2) 一次赋值全部元素:

      ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
    • (3) 只赋值特定元素:支持稀疏格式的数组

      ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
    • (4) 交互式数组值对赋值

      read -a ARRAY_NAME
  • 关联数组:注意:必须先声明,再调用

    declare -A ARRAY_NAME 
    ARRAY_NAME=([idx_name1]='val1' [idx_name2]='val2‘...)

引用数组

  • 引用数组元素:${ARRAY_NAME[INDEX]}
    注意:引用时,只给数组名,省略[INDEX]表示引用下标为0的元素

    • 引用数组中的所有元素:
      ${ARRAY_NAME[*]}
      ${ARRAY_NAME[@]}
  • 数组的长度(数组中元素的个数):

    ${#ARRAY_NAME} :表示数组中第一个元素中的字符串的长度;
    
    数组中元素的个数:
    ${#ARRAY_NAME[*]} 
    ${#ARRAY_NAME[@]}
  • 示例:生成10个随机数保存于数组中,并找出其最大值和最小值

    #!/bin/bash
    declare -a rand
    declare -i max=0
    declare –i min=32767
    for i in {0..9}; do
            rand[$i]=$RANDOM
            echo ${rand[$i]}
            [ ${rand[$i]} -gt $max ] && max=${rand[$i]}
            [ ${rand[$i]} -lt $min ] && min=${rand[$i]}
    done
    echo "Max: $max Min:$min"

数组数据处理

  • 引用数组中的所有元素:

    • ${ARRAY_NAME[@]}
      ${ARRAY_NAME[*]}
    • 数组切片:${ARRAY[@]:offset:number}

      • offset: 要跳过的元素个数
      • number: 要取出的元素个数;省略number时,表示取偏移量之后的所有元素;
        ${ARRAY[@]:offset}
  • 向非稀疏格式数组中追加元素:
    ARRAY[${#ARRAY[*]}]

  • 删除数组中的某元素:
    unset ARRAY[INDEX]

  • 删除整个数组:unset ARRAY

base的内置字符串处理工具

字符串切片:基于位置取子串

  • ${#var}:返回字符串变量var的长度

  • ${var:offset}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值在0 到 ${#var}-1 之间(bash4.2后,允许为负值)

  • ${var:offset:number}:返回字符串变量var中从第offset个
    字符后(不包括第offset个字符)的字符开始,长度为
    number的部分

  • ${var: -length}:取字符串的最右侧几个字符
    注意:冒号后必须有一空白字符

  • ${var:offset:-length}:从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容

  • ${var: -length:-offset}:先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容

基于模式取子串

  • ${var#*word}:其中word可以是指定的任意字符;
    功能:自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word字符之间的所有字符

  • ${var##*word}:同上,贪婪模式,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容

    ~]# file="var/log/messages“
    ~]# echo ${file#*/} 
    log/messages
    ~]# echo ${file##*/}
    messages
  • ${var%word*}:其中word可以是指定的任意字符;
    功能:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符之间的所有字符;

    ~]# file="/var/log/messages"
    ~]# echo ${file%/*}
    /var/log
  • ${var%%word*}:同上,只不过删除字符串最右侧的字符向
    左至最后一次出现word字符之间的所有字符;

    url=http://www.magedu.com:80
    ~]# echo ${url##*:} 
    80
    ~]# echo ${url%%:*} 
    http

查找替换

  • ${var/pattern/substr}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之

  • ${var//pattern/substr}: 查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之

  • ${var/#pattern/substr}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之;如果不是串首则不予替换;

  • ${var/%pattern/substr}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之;如果不是串尾则不予替换;

    注意:pattern中使用glob风格和通配符;

查找并删除

  • ${var/pattern}:查找var所表示的字符串中,删除第一次被pattern所匹配到的字符串

  • ${var//pattern}:查找var所表示的字符串中,删除所有被pattern所匹配到的字符串

  • ${var/#pattern}:查找var所表示的字符串中,删除行首被pattern所匹配到的字符串

  • ${var/%pattern}:查找var所表示的字符串中,删除行尾被pattern所匹配到的字符串

  • 字符大小写转换

    • ${var^^}:把var中的所有小写字母转换为大写

    • ${var,,}:把var中的所有大写字母转换为小写

高级变量

变量赋值

  • ${var:-value}:如果var为空或未设置,那么返回value;否则返回var本身的值;可省略冒号;

  • ${var:+value}:如果var不空,则返回value,否则返回空值;可省略冒号;

  • ${var:=value}:如果var为空或未设置,那么返回value,并将value赋值给var;否则返回var的值

  • ${var:?error_info}:如果var为空或未设置,那么在当前终端打印error_info;否则返回var的值

  • 为脚本程序使用配置文件,实现变量赋值

    • (1) 定义文本文件,每行定义“name=value”
      (2) 在脚本中source此文件即可

高级变量用法-有类型变量

  • Shell变量一般是无类型的,但是bash Shell提供了declare和typeset两个命令用于指定变量的类型,两个命令是等价的

  • declare [选项] 变量名

    • -r 声明或显示只读变量
      -i 将变量定义为整型数
      -a 将变量定义为数组
      -A 将变量定义为关联数组
      -f 显示此脚本前定义过的所有函数名及其内容
      -F 仅显示此脚本前定义过的所有函数名
      -x 声明或显示环境变量和函数
      -l 声明变量为小写字母 declare –l var=UPPER
      -u 声明变量为大写字母 declare –u var=lower
  • eval命令

    • eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量.该命令对变量进行两次扫描

      示例:

      [root@server ~]# CMD=whoami
      [root@server ~]# echo $CMD
      whoami
      [root@server ~]# eval $CMD
      root
      [root@server ~]# n=10
      [root@server ~]# echo {0..$n}
      {0..10}
      [root@server ~]# eval echo {0..$n}
      0 1 2 3 4 5 6 7 8 9 10

间接变量引用

  • 如果第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值就称为间接变量引用

  • variable1的值是variable2,而variable2又是变量名,variable2的值为value,间接变量引用是指通过variable1获得变量值value的行为

    variable1=variable2
    variable2=value
  • bash Shell提供了两种格式实现间接变量引用

    • eval tempvar=\$$variable1

    • tempvar=${!variable1}

    示例:

    [root@server ~]# N=NAME
    [root@server ~]# NAME=xxxxxx
    [root@server ~]# N1=${!N}
    [root@server ~]# echo $N1
    xxxxxx
    [root@server ~]# eval N2=\$$N
    [root@server ~]# echo $N2
    xxxxxx

创建临时文件

  • mktemp命令:创建并显示临时文件,可避免冲突

  • mktemp [OPTION]… [TEMPLATE]

    • TEMPLATE:
      filename.XXX;X至少要出现三个

    • OPTION:
      -d: 创建临时目录
      -p DIR或–tmpdir=DIR:指明临时文件所存放目录位置

      示例:
      # mktemp /tmp/test.XXX
      # tmpdir=`mktemp –d /tmp/testdir.XXX`
      # mktemp --tmpdir=/testdir test.XXXXXX

安装复制文件

  • install命令:
    install [OPTION]… [-T] SOURCE DEST 单文件
    install [OPTION]… SOURCE… DIRECTORY
    install [OPTION]… -t DIRECTORY SOURCE…
    install [OPTION]… -d DIRECTORY…创建空目录

    • 选项:
      -m MODE,默认755
      -o OWNER
      -g GROUP

    示例:
    install -m 700 -o wang -g admins srcfile desfile
    install –m –d /testdir/installdir

信号捕捉

  • trap ‘触发指令’ 信号
    自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作

  • trap ” 信号
    忽略信号的操作

  • trap ‘-‘ 信号
    恢复原信号的操作

  • trap -p
    列出自定义信号操作

  • 列出信号:
    trap -l
    kill -l

  • 获取信号详细信息:man 7 signal

  • trap ‘COMMAND’ SIGNALS

    常可以进行捕捉的信号:1)SIGHUP、2)SIGINT

    #!/bin/bash
    #
    
    declare -a hosttmpfiles
    trap 'mytrap' INT
    
    mytrap(){
            echo "Quit"
            rm -f ${hosttmpfiles[@]}
            exit 1
    }
    
    for i in {1..254};do
            tmpfile=$(mktemp /root/ping.XXXXX)
            if ping -W 1 -c 1 172.16.$i.1 &> /dev/null;then
                    echo "172.16.$i.1 is up"|tee $tmpfile
            else
                    echo "172.16.$i.1 is down"|tee $tmpfile
            fi
            hosttmpfiles[${#hosttmpfiles[*]}]=$tmpfile
    done
    
    rm -f ${hosttmpfiles[@]}
    #!/bin/bash
    trap 'echo “signal:SIGINT"' int
    trap -p
    for((i=0;i<=10;i++))
    do
            sleep 1
            echo $i
    done
    trap '' int
    trap -p
    for((i=11;i<=20;i++))
    do
            sleep 1
            echo $i
    done
    trap '-' int
    trap -p
    for((i=21;i<=30;i++))
    do
            sleep 1
            echo $i
    done

bash中使用ACSII颜色

\033[31m hello \033[0m
  ##m:
    左侧#:
        3:前景颜色
        4:背景颜色
    右侧#:颜色种类
        1,2,3,4,5,6,7

  #m:
    加粗、闪烁等功能;

    多种控制符,可组合使用,彼此之间用分号隔开;

  可设置PS1,export设置;最好不要设置,有符号不容易消除;

dialog

  • 可实现窗口化编程;
    主要是如下:

    • 各窗体控件使用方式;
    • 如何获取用户选择或键入的内容?

      • 默认,其输出信息被定向到了错误输出流;为使得其标准输出,使用:–stdout
    • dialog是默认安装的,如使用必须自己安装

原创文章,作者:s,如若转载,请注明出处:http://www.178linux.com/76530

(0)
ss
上一篇 2017-05-21
下一篇 2017-05-21

相关推荐

  • mariadb基础应用

    mariadb基础应用 一、 前言 MariaDB is one of the most popular database servers in the world. It’s made by the original developers of MySQL and guaranteed to stay open source. Notable users …

    Linux干货 2016-12-16
  • 马哥教育网络班21期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。 网桥:桥接器,是连接两个局域网的一种存储/转发设备,它能将一个大的LAN分割为多个网段,或将两个以上的LAN互联为一个逻辑LAN,使LAN上的所有用户都可访问服务器 集线器:集线器的英文称为“Hub”.集线器(hub)属于纯硬件网络底层设备,基本上不具有类似于交换机的"…

    Linux干货 2016-08-29
  • 常用的MySQL数据库备份

    常用的MySQL数据库备份方式 前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lvm2快照备份数据 使用Xtrabackup备份 总结 前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可…

    2016-10-01
  • 软链接与硬链接的分析

    Linux引用硬链接与软链接,是为了实现文件的共享,更有隐藏文件路径、增加权限安全及节省存储等的好处。很多新手不知道软链接与硬链接的区别,今天大家一起总结它们的区别吧^_^ 一,硬链接 硬链接的特性可以体现出什么是硬链接: 通过索引节点来进行链接,文件要有相同的inode及data block 不允许跨分区创建 只有在同一文件系统中的文件之间才可以,不能交叉…

    2017-07-22
  • Linux系统修复

    在boot里面我们可以根据自己的需求去设置一些启动选项,我们今天来了解一下Linux启动流程,以及boot下的选项。       加载BIOS的硬件信息,获取第一个启动设备。 读取第一个启动设备MBR的引导加载程序(grub)的启动信息 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备。 核型执行init程序…

    Linux干货 2016-09-13
  • 对虚拟机键入Ctrl+Alt+Delete的详细说明

            日常中我们用Windows系统时经常使用Ctrl+Alt+Delete来换出任务管理的菜单,进行任务管理,linux中也有这样的键入命令,但不是管理任务,而是重启系统!!!那么我们就应该注意了,不要误操作重启服务器。       &n…

    2017-03-28