`

LINUX 部分命令

 
阅读更多

1.

[root@test root]# grep [-acinv] '搜寻字符串' filename
参数说明:
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
eg://[] 以及 [^] 以及 [] 



 1.grep -n 't[ae]st' regular_express.txt
 2.last | grep root
 3.grep -n 'oo' regular_express.txt
 4.grep -n '[^g]oo' regular_express.txt//如果我不想要 oo 前面有 g 的话呢?此时,可以利用在集合字符的反向选择 [^] 来
 5.grep -n '[^a-z]oo' regular_express.txt//前面不要小字
 6. grep -n '[0-9]' regular_express.txt// 取得有数字的行
 ///行首与行尾字符 ^ $
  1.grep -n '^the' regular_express.txt
  2. grep -n '\.$' regular_express.txt
  3. grep -n '^$' regular_express.txt//空白行
  4. grep -v '^$' /etc/syslog.conf | grep -v '^#'//去取空行,和#开头的行

////任意一个字符 . 与重复字符 *
 * 代表的是『重复 0 个或多个前面的 RE 字符』
『 . 』则代表『绝对有一个任意字符』的意思
grep -n 'ooo*' regular_express.txt//至少两个 o 以上的字符串
//限定连续 RE 字符范围 {}
 grep -n 'o\{2\}' regular_express.txt//假设我要找到两个 o 的字符串

2.格式化打印: printf

[root@linux ~]# printf '打印格式' 实际内容
参数:
关于格式方面的几个特殊样式:
\a 警告声音输出
\b 退格键(backspace)
\f 清除屏幕 (form feed)
\n 输出新的一行
\r 亦即 Enter 按键
\t 水平的 [tab] 按键
\v 垂直的 [tabl] 按键
\xNN NN 为两位数的数字,可以转换数字成为字符。
关于 C 程序语言内,常见的变数格式
%ns 那个 n 是数字, s 代表 string ,亦即多少个字符;
%ni 那个 n 是数字, i 代表 integer ,亦即多少整数字数;
%N.nf 那个 n 与 N 都是数字, f 代表 floating (浮点),如果有小数字数,
假设我共要十个位数,但小数点有两位,即为 %10.2f 啰!
范例:


范例一:将刚刚上头的数据变成档案,仅列出姓名与成绩:(用 [tab] 分隔
[root@linux ~]# printf '%s\t %s\t %s\t %s\t %s\t \n' `cat printf.txt`
Name Chinese English Math Average
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33
# 假设我将上面的档案存成 printf.txt 档案档名,则可利用上面的案例,
# 将每个单字中间以 [tab] 按键隔开。由上面的输出来看,虽然第二行以后是 OK 的,
# 但是第一行则因为某些单字长度较长,所以就无法对齐了!而 %s 表示以字符串 (string)
# 的方式来展现该内容。而每个内容则以 \t 即 [tab] 来隔开啊!


范例二:将上述资料关于第二行以后,分别以字符串、整数、小数点来显示:
[root@linux ~]# printf '%10s %5i %5i %5i %8.2f \n' `cat printf.txt |\
> grep -v Name`
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33
# 这个时候的输出可就有趣了!我将几个内容分成不同的数据格式来输出,
# 最有趣的应该是 %8.2f 这个项目了!我可以针对不同的小数字数来进行格式输出,
# 例如变成底下的样子时,您自己试看看,会是输出什么结果喔!
# printf '%10s %5i %5i %5i %8.1f \n' `cat printf.txt | grep -v Name`


范例三:列出数值 45 代表的字符为何?
[root@linux ~]# printf '\x45\n'
E
# 这东西也很好玩~他可以将数值转换成为字符,如果您会写 script 的话,
# 可以自行测试一下,由 20~80 之间的数值代表的字符是啥喔!

3.sed 工具简介

[root@linux ~]# sed [-nefr] [动作]
参数:
-n  :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN
      的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过
      sed 特殊处理的那一行(或者动作)才会被列出来。
-e  :直接在指令列模式上进行 sed 的动作编辑;
-f  :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的
      sed 动作;
-r  :sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i  :直接修改读取的档案内容,而不是由屏幕输出。

动作说明:  [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作
         是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

function 有底下这些咚咚:
a   :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
c   :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d   :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i   :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p   :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s   :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配
      正规表示法!例如 1,20s/old/new/g 就是啦!
范例:

范例一:将 /etc/passwd 的内容列出,并且我需要打印行号,同时,请将第 2~5 行删除!
[root@linux ~]# nl /etc/passwd | sed '2,5d'
     1  root:x:0:0:root:/root:/bin/bash
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(后面省略).....
# 看到了吧?因为 2-5 行给他删除了,所以显示的数据中,就没有 2-5 行啰~
# 另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!
# 同时也要注意的是, sed 后面接的动作,请务必以 '' 两个单引号括住喔!
# 而,如果只要删除第 2 行,可以使用 nl /etc/passwd | sed '2d' 来达成,
# 至于第 3 到最后一行,则是 nl /etc/passwd | sed '3,$d' 的啦! 

范例二:承上题,在第二行后(亦即是加在第三行)加上『drink tea?』字样!
[root@linux ~]# nl /etc/passwd | sed '2a drink tea'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 嘿嘿!在 a 后面加上的字符串就已将出现在第二行后面啰!那如果是要在第二行前呢?
# nl /etc/passwd | sed '2i drink tea' 就对啦!

范例三:在第二行后面加入两行字,例如『Drink tea or .....』『drink beer?』
[root@linux ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 这个范例的重点是,我们可以新增不只一行喔!可以新增好几行~
# 但是每一行之间都必须要以反斜线 \ 来进行新行的增加喔!所以,上面的例子中,
# 我们可以发现在第一行的最后面就有 \ 存在啦!那是一定要的喔!

范例四:我想将第2-5行的内容取代成为『No 2-5 number』呢?
[root@linux ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
     1  root:x:0:0:root:/root:/bin/bash
No 2-5 number
     6  sync:x:5:0:sync:/sbin:/bin/sync
# 没有了 2-5 行,嘿嘿嘿嘿!我们要的数据就出现啦!

范例五:仅列出第 5-7 行
[root@linux ~]# nl /etc/passwd | sed -n '5,7p'
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
# 为什么要加 -n 的参数呢?您可以自行下达 sed '5,7p' 就知道了!(5-7行会重复输出)
# 有没有加上 -n 的参数时,输出的数据可是差很多的喔!

范例六:我们可以使用 ifconfig 来列出 IP ,若仅要 eth0 的 IP 时?
[root@linux ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:51:FD:52:9A:CA
          inet addr:192.168.1.12  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::250:fcff:fe22:9acb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
.....(以下省略).....
# 其实,我们要的只是那个 inet addr:..那一行而已,所以啰,利用 grep 与 sed 来捉
[root@linux ~]# ifconfig eth0 | grep 'inet ' | sed 's/^.*addr://g' | \
> sed 's/Bcast.*$//g'
# 您可以将每个管线 (|) 的过程都分开来执行,就会晓得原因啰!
# 去头去尾之后,就会得到我们所需要的 IP 亦即是 192.168.1.12 啰~

范例七:将 /etc/man.config 档案的内容中,有 MAN 的设定就取出来,但不要说明内容。
[root@linux ~]# cat /etc/man.config | grep 'MAN'| sed 's/#.*$//g' | \
> sed '/^$/d'
# 每一行当中,若有 # 表示该行为批注,但是要注意的是,有时候,
# 批注并不是写在第一个字符,亦即是写在某个指令后方,如底下的模样:
# 『shutdown -h now # 这个是关机的指令』,批注 # 就在指令的后方了。
# 因此,我们才会使用到将 #.*$ 这个正规表示法!

范例八:利用 sed 直接在 ~/.bashrc 最后一行加入『# This is a test』
[root@linux ~]# sed -i '$a # This is a test'  ~/.bashrc
# 上头的 -i 参数可以让你的 sed 直接去修改后面接的档案内容喔!而不是由屏幕输出。
# 至于那个 $a  则代表最后一行才新增的意思。
4.declare 宣告变量内容 
[test @test test]# declare [-afirx] 
参数说明: 
-a  :定义为数组 array 
-f  :定义为函数 function  
-i  :定义为整数 integer 
-r  :定义为『只读』 
-x  :定义为透过环境输出变量 
范例: 
[test @test test]# declare -i a=3 
[test @test test]# declare -i b=5 
[test @test test]# declare -i c=$a*$b 
[test @test test]# echo $c 
15  <==变成数字啰!
5.read 的功能就是『依据您在键盘输入的结果 input 到变量内容中
6.条件式判断:if...then...fi, case.....esac 
if [ 条件判断一 ] && (||) [ 条件判断二 ]; then      <== if 是起始的意思,后面可以接若干个判断式,使用 && 或 || 
      执行内容程序 
elif [ 条件判断三 ] && (||) [ 条件判断四 ]; then      <==第二段的判断,如果第一段没有符合就来此搜寻条件 
      执行第二段内容程序 
else      <==当前两段都不符合时,就以这段内容来执行! 
      执行第三段内容程序 
fi      <==结束 if then 的条件判断!
eg:
echo "Press y to continue" 
read yn 
if [ "$yn" = "y" ]; then 
      echo "script is running..." 
else 
      echo "STOP!" 
fi 
---------------------------逻辑判断式--------------------
if [ ! -e logical ]; then //断定到底有没有档案(用 -e )
     touch logical 
     echo "Just make a file logical" 
     exit 1 
elif [ -e logical ] && [ -f logical ]; then //名称是属于目录或者是档案( -d -f ),
     rm logical 
     mkdir logical 
     echo "remove file ==> logical" 
     echo "and make directory logical" 
     exit 1 
elif [ -e logical ] && [ -d logical ]; then 
     rm -rf logical 
     echo "remove directory ==> logical" 
     exit 1 
else 
     echo "Does here have anything?" 
fi
-----使用 case ...esac 的方式 
case 种类方式(string) in      <==开始阶段,那个种类方式可分成两种类型,通常使用 $1 这一种直接下达类型! 
      种类方式一) 
      程序执行段 
      ;;      <==种类方式一的结束符号! 
      种类方式二) 
      程序执行段 
      ;; 
      *) 
      echo "Usage: {种类方式一|种类方式二}"      <==列出可以利用的参数值! 
      exit 1 
esac      <==这个 case 的设定结束处!
eg:
case $1 in      <==使用直接下达指令型态! 
  one) 
      echo "your choice is one" 
      ;; 
  two) 
      echo "your choice is two" 
      ;; 
  three) 
      echo "your choice is three" 
      ;; 
  *) 
      echo "Usage {one|two|three}"      <==列出可以使用的参数(如果使用者下达错误的参数时) 
      exit 1 
esac 
  
7.循环:for....do....done, while...do...done, until...do...done,
  • for (( 条件一; 条件二; 条件三 )) declare -i s # <==变量宣告 for (( i=1; i<=100; i=i+1 )) do s=s+i done echo "The count is ==> $s"
  • ____________________-

    LIST="Tomy Jony Mary Geoge"

    for i in $LIST do echo $i done

  • ----将你的 Linux 主机上的账号 ( account ) 印出来呢
    account=`cut -d ":" -f1 /etc/passwd|sort` 
    echo "The following is your linux server's account" 

    for i in $account do echo $i done

    
    
  • while [ condition1 ] && { || } [ condition2 ] ...//当条件相同的时候,就继续做!
  • declare -i i declare -i s while [ "$i" != "101" ] do s=s+i i=i+1 done echo "The count is ==> $s"
  • until [ condition1 ] && { || } [ condition2 ] ... //until:直到条件相同的时候才离开程序 declare -i i declare -i s until [ "$i" = "101" ] do s=s+i i=i+1 done echo "The count is ==> $s" ----------- echo "Press Y/y to stop" until [ "$yn" = "Y" ] || [ "$yn" = "y" ] do read yn done echo "Stop here"
  • 先查看一下 /root/test/logical 这个名称是否存在;
    1. 若不存在,则建立一个档案,使用 touch 来建立,建立完成后离开;
    2. 如果存在的话,判断该名称是否为档案,若为档案则将之删除后建立一个档案,档名为 logical ,之后离开;
    3. 如果存在的话,而且该名称为目录,则移除此目录!

    if [ ! -e logical ]; then
    touch logical
    echo "Just make a file logical"
    exit 1
    elif [ -e logical ] && [ -f logical ]; then
    rm logical
    mkdir logical
    echo "remove file ==> logical"
    echo "and make directory logical"
    exit 1
    elif [ -e logical ] && [ -d logical ]; then
    rm -rf logical
    echo "remove directory ==> logical"
    exit 1
    else
    echo "Does here have anything?"
    fi

    8.script 如何 debug
    sh [-nvx] scripts
    -n :不要执行 scripts ,查询 scripts 内的语法,若有错误则予以列出!
    -v :在执行 scripts 之前,先将 scripts 的内容显示在屏幕上;
    -x :将有使用到的 scripts 内容显示在屏幕上,与 -v 稍微不同!

    9.groupadd
    groupadd [-g GID] groupname
    参数说明:
    -g GID :自行设定 GID 的大小
    范例:
    [root @test /root]# groupadd -g 55 testing<==设定一个群组,GID为 55

    Sed 命令列可分成编辑指令与文件档部份。其中 , 编辑指令负责控制所有的编辑工作 ; 文件档表示所处理的档案

    //////////////////////////////////////////////////////////////////////////////////////////////

    1.gcc hello.c
    # 这个时候,在本目录下会产生一个名为 a.out 的执行档!
    # 在预设的状态下,如果我们直接以 gcc 编译原始码,并且没有加上
    # 任何参数,则执行档的档名会被自动设定为 a.out 这个文件名称!

    运行:./a.out

    2.gcc -c hello.c
    # 会产生一个名为 hello.o 的目标文件,object file 的附档名为 *.o 喔!
     
    gcc -o hello hello.o
    # 这个步骤是利用 hello.o 这个目标文件制作出一个名为 hello 的执行档
    # 详细的 gcc 语法我们会在后续章节中继续介绍!
    # 透过这个动作后,我们可以得到 hello 及 hello.o 两个档案,
    # 真正可以执行的是 hello 这个 binary file 喔!

     
    # 3. 执行一下这个档案:
    ./hello


    3. thanks.c调用thanks_2.c程序
    gcc -c thanks.c thanks_2.c
    # 产生了两个目标文件!
    gcc -o thanks thanks.o thanks_2.o
     
    # 3. 执行一下这个档案:
    ./thanks

    4.Gcc 参数
    gcc -O -c thanks.c thanks_2.c # -O 为产生最佳化的参数
    gcc -Wall -c thanks.c thanks_2.c
    thanks.c: In function `main':
    thanks.c:5: warning: implicit declaration of function `thanks_2'
    thanks.c:6: warning: control reaches end of non-void function
    thanks_2.c: In function `thanks_2':
    thanks_2.c:3: warning: implicit declaration of function `printf'
    # -Wall 为产生更详细的编译过程信息。上面的讯息为警告讯息( warning )
    # 所以不用理会也没有关系!

    ============在编译与连结的时候将这个函式库给他连结进执行档里面=======
    gcc sin.c -lm -L/lib -L/usr/lib
    # 特别注意,那个 -lm 可以拆开成两部份来看,
    # -l 是『加入某个函式库(library)』的意思,而
    # m 则是 libm.so 这个函式库,其中, lib 与附档名(.a 或 .so)不需要写
    # 所以 -lm 表示使用 libm.so (或 libm.a) 这个函式库的意思~
    # 至于那个 -L 后面接的路径呢?这表示:
    #『我要的函式库 libm.so 请到 /lib 或 /usr/lib 里面搜寻!
    #运行 ./a.out
    注意:由于 Linux 预设是将函式库放置在 /lib 与 /usr/lib 当中
    ============关于程序中的#include <stdio.h>============
    说的是要将一些定义数据由 stdio.h 这个档案读入,这包括 printf 的相关设定。这个档案其实是放置在 /usr/include/stdio.h 的!那么万一这个档案并非放置在这里呢?那么我们就可以使用底下的方式来定义出要读取的 include 档案放置的目录:gcc sin.c -lm -I/usr/include//默认值是放置在 /usr/include
    =================================================
    # 仅将原始码编译成为目标文件,并不制作连结等功能:
    [guest@test guest]# gcc -c hello.c
    # 会自动的产生 hello.o 这个档案,但是并不会产生 binary 执行档。
     
    # 在编译的时候,依据作业环境给予最佳化执行速度

    [guest@test guest]# gcc -O hello.c -c
    # 会自动的产生 hello.o 这个档案,并且进行最佳化喔!
     
    # 在进行 binary file 制作时,将连结的函式库与相关的路径填入
    [guest@test guest]# gcc sin.c -lm -L/usr/lib -I/usr/include
    # 这个指令较常下达在最终连结成 binary file 的时候,
    # -lm 指的是 libm.so 或 libm.a 这个函式库档案;
    # -L 后面接的路径是刚刚上面那个函式库的搜寻目录;
    # -I 后面接的是原始码内的 include 档案之所在目录。
     
    # 将编译的结果输出成某个特定档名
    [guest@test guest]# gcc -o hello hello.c
    # -o 后片接的是要输出的 binary file 檔名
     
    # 在编译的时候,输出较多的讯息说明
    [guest@test guest]# gcc -o hello hello.c -Wall
    # 加入 -Wall 之后,程序的编译会变的较为严谨一点,
    # 所以警告讯息也会显示出来!


    /////////////////////////////////////////////////////////////////

    nl: 在每一行前面加上行号
    eg: ls | nl

    joint: 根据给定的字段(field)把两个文件中的行连接起来

    cut: 剪除一行中的指定字段
    csplit: 将一个文件中的指定行去除

    banner: 用字符来组成字符
    eg: banner -c a hello
    用字母a组成一个hello的字样

    od: 用二进制来显示文件内容

    seq: 顺序的产生一组数字(1,3,5,7,。。。)
    eg: seq 2 2 10
    产生2,4,6,8,10

    ascii: 显示ascii table

    sort: 排序
    uniq: 去除相同的行

    watch: 循环运行指定的命令
    eg: watch -n 3 -d ps U wangwei
    每3秒运行一次命令" ps U wangwei ",同时将两次不同的地方以反白显示出来

    sed: stream editor
    tee: 将stdin中的数据copy出一份,同时将数据传送给stdout

    zip,unzip: zip data

    tar: 将多个文件打包

    diff,patch: 文件比较,补丁工具
    umount /dev/hdb2
    mount -a
    more /etc/mtab
    mount -a -o remount <==这个指令可以重新将 /etc/fstab 的咚咚 mount 下来!



    分享到:
    评论

    相关推荐

      Linux部分命令解释

      Linux部分命令解释 Linux部分命令解释 看看吧。。。

      Linux部分命令解释.chm

      Linux部分命令解释.chm

      网络安全学习linux部分命令

      兄弟连Linux常用命令 1.1命令格式 Linux命令格式 ​ 命令 [-选项] [参数] ​ ctrl+l清屏 1.2目录处理命令 1. ls----显示目录文件 ​ 组里每个成员都享有这个组的权限 ​ -d 查看目录属性 显示目录本身,而不...

      Linux部分命令简介

      linux常用命令,比较集中,新手参考

      linux部分命令解释.rar

      基本LINUX 命令.很实用的!呵呵 这个我学LINUX时候特别喜欢看的哦!!希望大家支持我!

      Linux部分命令

      Linux简单命令,不是特别有用,希望能有所帮助吧

      Linux基础命令教程(豪华版)

      Linux基础命令教程(豪华版) 豪华版主张学到更多的Linux命令知识。  从这里开始学习Linux命令,本课程让你更清楚地了解...这只是非常简单的,你能学会的,shell是Linux四个主要部分之一,其实上Shell是一个命令解释器。

      C实现Linux中Shell部分命令.zip

      用C语言实现了Linux中Shell的部分功能,包括ls rm echo等基本常用命令,每个命令都有详细代码实现。

      Linux常用命令常用命令命令名必须是小写的英文字母

      Linux常用命令命令名必须是小写的英文字母 一般格式中由方括号括起来的部分是可选的 选项以“-”开始,多个选项可用“-”连起来 命令行的参数提供命令运行的信息或者命令执行过程中所使用的文件名

      Linux 命令详解词典.pdf【第二部分】

      Linux 命令详解词典.pdf,施威铭研究室著,大小 74 MB,被压缩成两部分分别上传。这是第二部分,第一部分下载地址:http://download.csdn.net/source/2685010。 本书精选了 381 个 Linux 命令,详细罗列 1729 个范例...

      Linux常用命令全集.

      Linux常用命令全集,集成大部分linux系统命令,学习linux系统的必备秘笈

      Linux的命令解释

      Linux命令解释,提供linux 的大部分命令解释。

      linux常用命令大全--

      linux常用命令大全,包含大部分常用命令,并且标注了必须掌握的命令

      Linux使用技巧集

      LINUX的引导过程 Linux部分命令简介 Linux下即插即用设备的安装 RedHatLinux用户管理经验点滴 如何编译Linux的内核 对RedHat系统的一些概括性描述 Linux系统的简介及安装过程 深入Linux的LILO ...

      linux教程网收集整理了部分linux常用命令编撰成这一部linux命令大全,我们通常使用的linux 关机命令

      linux教程网收集整理了部分linux常用命令编撰成这一部linux命令大全,我们通常使用的linux 关机命令

      linux必须的60个命令

      Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统, 就必须从Linux...

      Linux中文手册

      10.Linux部分命令简介 11.Lilo.conf (LILO 配置文件) 手册 12.设置和修改 X Window 的显示模式 13.linux使用经验点滴 14.Linux下文件操作编程和GAWK的介绍和应用 15.如何为Linux添加软件详解 16.LINUX的引导...

      Linux基础命令教程豪华版Pdf.rar

      Linux基础命令教程(豪华版)是专门为打算学习linux系统的朋友制作的PDF文档,从这里开始学习Linux命令,本课程让你更...这只是非常简单的,你能学会的,shell是Linux四个主要部分之一,其实上Shell是一个命令解释器。

    Global site tag (gtag.js) - Google Analytics