shell 基本命令

    技术2022-05-12  5

    Shell基本命令

    1.ls 列出目录下的文件,不同类型的文件颜色不同,例如蓝色是文件夹,白色是文件

    [root@restoretmp steph]# ls

    file.html public_html  test

    [root@restoretmp steph]#

    参数:

    ls -a 列出所有文件,包括隐藏文件

    [root@restoretmp steph]# ls -a

    .  ..  .bash_logout  .bash_profile  .bashrc  file.html public_html  test

    [root@restoretmp steph]#

    ls -l 列出所有者 size 文件权限 修改日期

    ls -R 递归列出所有子目录的内容

     

    2. cd  转移目录

    cd /home/steph 将转移到/home/steph

    cd .. 上移一个目录

    cd 回到根目录

    cd  dir 改变目录位置至d i r目录下。

    cd  user  改变目录位置至用户的工作目录。

    cd  .. 改变目录位置至当前目录的父目录。

    cd  ../user 改变目录位置至相对路径 user 的目录下。

    cd  /../.. 改变目录位置至绝对路径的目录位置下。

     

    3. 建立新文件和文件夹

    touch new-filename 建立新文件

    mkdir new-directory 建立新目录

     

    4.删除文件和目录

    rm  -r filename 删除名为 filename的文件

    rmdir foldername 删除名为foldername的目录

    rm –r file? 删除文件名中有五个字符且前四个字符为file 的所有文件。

    rm –r f* 删除文件名中以 f 为字首的所有文件。

     

    5.修改文件夹权限

    1. 改变文件或目录的读、写、执行权限

    语法:chmod [-R] mode name

    name :文件名或目录名。

    mode: 38位数字或r w x的组合。r- read ()w - wri te ()x - execute (执行)u - user (当前用户)g - group(组) o - other(其他用户)

    chmod  755  dir1对于目录dir1,设定成任何使用者皆有读取及执行的权利,但只有所有者可做修改。

    chmod  700  file1 对于文件f i l e 1,设定只有所有者可以读、写和执行的权利。

    chmod  u+x  file2 对于文件f i l e 2,增加当前用户可以执行的权利。

    chmod  g+x  file3 对于文件f i l e 3,增加工作组使用者可执行的权利。

    chmod  o-r  file4 对于文件f i l e 4,删除其他使用者可读取的权利。

       2.改变文件或目录的所有权

    语法:chown [-R] 用户名 name

    name:文件名或目录名。

    例如

    chown user file1 将文件 file1 改为用户user 所有。

    chown -R user dir1 将目录 d i r 1及其子目录下面的所有文件改为用户user 所有。

     

    7. 压缩和解压缩文件

    gzip gunzip

    压缩:

    gzip  filename

    文件即会被压缩,并被保存为 filename.gz

    解压缩:

    gunzip filename.gz

    filename.gz 会被删除,而继之以 filename

    可以通过命令man gip man gunzip获得命令的详细说明.

    zip unzip

    要使用 zip 来压缩文件,在 shell 提示下键入下面的命令:

    zip -r filename.zip filesdir

    在这个例子里,filename.zip 代表你创建的文件,filesdir 代表你想放置新 zip 文件的目录。-r 选项指定你想递归地(recursively)包括所有包括在 filesdir 目录中的文件。

    要解压缩 zip 文件的内容,键入以下命令:

    unzip filename.zip

    你可以使用 zip 命令同时处理多个文件和目录,方法是将它们逐一列出,并用空格间隔:

    zip -r filename.zip file1 file2 file3 /usr/work/school

    上面的命令把 file1file2 file3、以及 /usr/work/school 目录的内容(假设这个目录存在)压缩起来,然后放入 filename.zip 文件中。

     

    8.tar 把多个文件或目录打包成一个文件,或者把已经打包的文件展开

    %tar cvf RMS RMStar 把目录打包成一个文件

    %tar xvf RMStar 把打包的文件展开。

     

    9.compress 把文件压缩成后缀为.Z的压缩文件  

    %compress RMStar

    uncompress 把后缀为.Z的压缩文件解压缩

    %uncompress RMStar.Z

     

    10.df -k 查看各文件系统剩余的空间,-k说明单位是千字节(kb)

    11.使用 l o g o u t命令退出shell

    12、更改帐号密码

    语法:passwd

    Old password: <输入旧密码>

    New password: <输入新密码〉

    Retype new password: <再输入一次密码>

    13、联机帮助

    语法: man 命令 

    man ls

     

    14、远程登录

    语法:rlogin 主机名 [-l 用户名]

    rlogin aa           远程登录到工作站 aa 中。

    rlogin aa -l user   使用 user 帐号登录到工作站 aa 中。

    语法:telnet 主机名 telnet IP地址

    telnet aa

    telnet 130.129.21.250

     

    15、复制文件

    语法: cp [-r] 源地址 目的地址

    cp file1 file2 将文件 file1 复制成 f i l e 2

    cp file1 dir1 将文件 file1 复制到目录 dir1 下,文件名仍为 f i l e 1

    cp /tmp/file1 . 将目录 /tmp 下的文件 file1 复制到当前目录下,文件名仍为 f i l e 1

    cp /tmp/file1 file2 将目录 /tmp 下的文件 file1 复制到当前目录下,文件名为f i l e 2

    cp -r dir1 dir2 复制整个目录。

     

    16、移动或更改文件、目录名称

    语法:mv 源地址 目的地址

    mv file1 dir1 将文件 f i l e 1移到目录 dir1 下,文件名仍为 f i l e 1

    mv dir1 dir2 将目录 dir1 更改为目录 d i r 2

     

    17、列出当前所在的目录位置

    语法: pwd

    18、查看文件内容

    语法: cat文件名

    cat file1以连续显示方式,查看文件名 file1 的内容。

     

    19、分页查看文件内容

    语法: more 文件名 cat 文件名 | more

    more file1 以分页方式查看文件名 file1 的内容。

    cat file1 | more 以分页方式查看文件名 file1 的内容。

     

    20、查看目录所占磁盘容量

    语法: du [-s] 目录

    du dir1 显示目录 dir1 的总容量及其子目录的容量(KB 为单位)

    du -s dir1 显示目录 dir1 的总容量。

     

    21、检查自己所属的工作组名称

    语法:groups

    22  改变文件或目录工作组所有权

    语法:chgrp [-R] 工作组名 name

    n a m e:文件名或目录名

    chgrp vlsi file1 将文件 file1 的工作组所有权改为 vlsi 工作组所有。

    chgrp -R image dir1 将目录d i r 1及其子目录下面的所有文件,改为 image 工作组所有。

    23 改变文件或目录的最后修改时间

    语法:touch name

    name:文件名或目录名。

    24、文件的链接

    同一文件,可拥有一个以上的名称,也就是把一个文件进行链接。

    语法:ln 老文件名 新文件名

    例如

    ln file1 file2   将文件 f i l e 2链接至文件 f i l e 1

    语法:ln -s  老文件名 新文件名

    例如

    ln -s file3 file4 将文件 file4 链接至文件f i l e 3

    25、文件中字符串的查寻

    语法:grep string file

    grep abc file1      寻找文件f i l e 1中包含字符串 abc 所在行的文本内容。

     

    26.查寻文件或命令的路径

    语法:whereis command 显示命令的路径。

    语法:which command 显示命令的路径,及使用者所定义的别名。

    语法:whatis command 显示命令功能的摘要。

    语法:find search-path -name filename -print      搜寻指定路径下某文件的路径

    例如

    find / -name file1 -print 自根目录下寻找文件 file1 的路径。

     

    27、比较文件或目录的内容

    语法:diff [-r] name1 name2

    name1 name2:可同时为文件名或目录名。

    diff file1 file2 比较文件file1 file2 内各行的不同之处。

    diff -r dir1 dir2 比较目录 dir1 dir2 内各文件的不同之处。

    28、文件打印输出

    用户可用 .login 文件中的 setenv PRINTER来设定打印机名。

    setenv PRINTER sp 设定自sp打印机打印资料。

    一般文件的打印

    语法:lpr [-P打印机名] 文件名

    例如:

    lpr file1 lpr -Psp file1      s p打印机打印文件 f i l e 1

    语法:enscript [-P打印机名] 文件名

    例如:

    enscript file3 enscript -Psp file3      s p打印机打印文件 f i l e 3

    29troff 文件的打印

    语法:p t r o ff [-P打印机名] [-man][-ms] 文件名

    例如:

    ptroff -Psp -man /usr/man/man1/lpr1      troff 格式,自 sp 打印机打印lpr1 命令的使用说明。

    打印机控制命令

    1.检查打印机状态、打印作业顺序号和用户名

    语法:lpq [-P打印机名]

    lpq lpq -Psp      检查 sp 打印机的状态。

    2. 删除打印机内的打印作业( 用户仅可删除自己的打印作业 )

    语法:lprm [-P打印机名] 用户名 作业编号

    lprm userlprm -Psp user      删除s p打印机中用户user 的打印作业,此时用户名必须为u s e r

    lprm -Psp 456      删除 sp 打印机上编号为 456 的打印作业。

    30、进程控制

    1.查看系统中的进程

    语法:ps [-aux]

    例如:

    p sps -x 查看系统中,属于自己的进程。

    ps -au 查看系统中,所有用户的进程。

    ps -aux 查看系统中,包含系统内部的及所有用户的进程。

    2. 结束或终止进程

    语法:kill [-9] PID

    PID:利用 ps 命令所查出的进程号。

    例如:

    kill 456kill -9 456      终止进程号为456的进程。

    3. 在后台执行进程的方式

    语法:命令 &

    cc file1.c &   将编译 file1.c 文件的工作置于后台执行。

    语法:按下 C o n t r o l + Z键,暂停正在执行的进程。键入b g命令,将暂停的进程置于后台继续执行。

    cc file2.c

    ^ Z

    S t o p p e d

    b g

    4. 查看正在后台中执行的进程

    语法:j o b s

    5. 结束或终止后台中的进程

    语法:kill  %n

    n:利用j o b s命令查看出的后台作业号

    kill  % 终止在后台中的第一个进程。

    kill  %2 终止在后台中的第二个进程。

     

    30shell变量

    1. 查看shell变量的设定值

    语法:set  查看所有shell变量的设定值。

    语法:echo $变量名    显示指定的shell变量的设定值。

    2. 设定shell变量

    语法:set var = value

    set term="vt100"      设定shell变量 termVT100型终端。

    3. 删除shell变量

    语法:unset var

    unset PRINTER      删除shell变量 PRINTER 的设定值。

     

    31、别名

    1. 查看所定义的命令的别名

    语法: alias 查看自己目前定义的所有命令,及所对应的别名。

    语法: alias name 查看指定的name 命令的别名。

    alias dir 查看别名dir所定义的命令。

    ls -atl

    2. 定义命令的别名

    语法: alias name‘command line’

    例如:

    alias dir ‘ls -l’ 将命令 ls - l 定义别名为 d i r

    3. 删除所定义的别名

    语法: unalias name

    例如:

    unalias dir 删除别名 dir 的定义。

    unalias *  删除所有别名的设定。

     

    32、历史命令

    1. 设定命令记录表的长度

    语法: set history = n

    set history = 40      设定命令记录表的长度为 40 (可记录执行过的前面 40 个命令)

    2. 查看命令记录表的内容

    语法: h i s t o r y

    3. 使用命令记录表

    语法: !!      重复执行前一个命令。

    语法: ! n

    n:命令记录表的命令编号。

    语法: ! s t r i n g 重复前面执行过的以 string 为起始字符串的命令。

    例如: ! c a t 重复前面执行过的以 cat 为起始字符串的命令。

    4. 显示前一个命令的内容

    语法: ! !p

    5. 更改前一个命令的内容并执行

    语法: ^oldstring ^newstring      将前一个命令中 oldstring 的部份改成 n e w s t r i n g并执

    行。

    例如:

    find . -name file1.c -print

    ^ f i l e 1 . c ^ c o r e

    find . -name core -print

     

    33、管道命令的使用

    语法:命令1 | 命令2      将命令1的执行结果送到命令2,做为命令2的输入。

    例如:

    ls -Rl | more      以分页方式列出当前目录及其子目录下所有文件的名称。

    cat file1 | more      以分页方式列出文件 file1 的内容。

     

    34、输入/输出控制

    1. 标准输入的控制

    语法:命令 < 文件 将文件做为命令的输入。

    例如:

    mail -s “mail test” 电子邮件地址 < file1     将文件file 当做信件的内容,主

    题名称为 mail test,送给收信人。

    2. 标准输出的控制

    语法:命令 > 文件 将命令的执行结果送至指定的文件中。

    例如:

    ls -l > list      将执行 “ls -l” 命令的结果写入文件list 中。

    语法:命令>! 文件 将命令的执行结果送至指定的文件中,若文件已经存在,则覆盖。

    例如:

    ls -lg >! list      将执行 “ls - lg” 命令的结果覆盖写入文件 list 中。

    语法:命令 >& 文件 将命令执行时屏幕上所产生的任何信息写入指定的文件中。

    例如:

    cc file1.c >& error      将编译 file1.c 文件时所产生的任何信息写入文件 error 中。

    语法:命令>> 文件 将命令执行的结果附加到指定的文件中。

    ls - lag >> list      将执行 “ls - lag” 命令的结果附加到文件 list 中。

    语法:命令 >>& 文件 将命令执行时屏幕上所产生的任何信息附加到指定的文件中。

    cc file2.c >>& error      将编译 file2.c 文件时屏幕所产生的任何信息附加到文件error 中。

     

    35、查看系统中的用户

    语法: who  f i n g e r

    语法: w

    语法: finger 用户名 finger 用户名@域名

     改变用户名

    语法: su 用户名

    例如:

    su user 进入用户user 的帐号。

    p a s s w r o d : <输入用户user 的密码>

     

    36、查看用户名

    语法: who am i 查看登录时的用户名。

    语法: w h o a m i 查看当前的用户名。若已执行过s u命令,则显示出此用户的用

    户名。

    37、查看当前系统上所有工作站的用户

    语法: rusers

    Ctrl+C>  结束

    38、与某工作站上的用户交谈

    语法: talk 用户名@主机名或talk 用户名@ I P地址

    例如:

    1) 可先利用 rusers 指令查看网络上的用户;

    2) 假设自己的帐号是 ddd ,在工作站 aaa上使用,现在想要与 bbb 上的ccc 交谈。

    talk ccc@bbb

    可按Ct r l + C结束。

    39、检查网络是否连通

    语法:ping 主机名或ping IP地址

     

     

     

    40vi

      vi是在工作站上广泛使用的编辑软件。对初学者而言,

      常因其特殊的使用方法,而不得其门而入;对已经在使用 vi 的使用者来说,也

      常见因对 vi 的不熟悉或不够了解,而无法发挥出 vi 强大的编辑能力,以下将

      简单介绍 vi 的使用方法。不必死记硬背,多实际操作几次就能记住常用的命令。

      进入vi

      直接执行 vi编辑程序即可:

      %vi test

      此刻屏幕上会出现 vi 的编辑屏幕,同时 vi 会将文件复制一份至内存中的缓冲区 (buffer) vi会保留在硬盘中的文件不变,而先对缓冲区的文件作编辑,编辑完成后,使用者可决定是否要取代原来旧有的文件。

      离开vi

      若在输入模式下,则先利用《ESC》进入指令模式,而后即可选用下列指令

      离开vi

      :q! 离开vi,并放弃刚在缓冲区内编辑的内容。

      :wq 将缓冲区内的资料写入硬盘中,并离开vi

      :ZZ wq

      :x wq

      :w 将缓冲区内的资料写入硬盘中,但并不离开vi

      :q 离开vi,若文件被修改过,则会被要求确认是否放弃修改的内容。

    此指令可与:w 配合使用。

     

      vi 的操作模式

     

      vi 提供两种操作模式:输入模式(insert mode)和指令模式(command mode)

      。当使用者进入 vi 后,即处在指令模式下,此刻键入的任何字符都被视为

      指令。在此模式下可进行删除、修改等动作。若要输入资料,则需进入输入

      模式。

     

      输入模式

     

      如何进入输入模式

      a (append) 由光标之后加入资料。

      A 由该行之末加入资料。

      i (insert) 由光标之前加入资料。

      I 由该行之首加入资料。

      o (open) 新增一行于该行之下以供输入资料。

      O 新增一行于该行之上以供输入资料。

     

      如何离开输入模式

      《ESC 结束输入模式。

     

      指令模式

     

      光标的移动

      h 向左移一个字符。

      j 向上移一个字符。

      k 向下移一个字符。

      l 向右移一个字符。

      0 移至该行之首

      ?$ 移至该行之末。

      ^ 移至该行的第一个字符处。

      H 移至屏幕的第一列。

      M 移至屏幕的中间那列。

      L 移至屏幕的最后一列。

      G 移至该文件的最后一列。

      + 移至下一列的第一个字符处。

      - 移至上一列的第一个字符处。

      ( 移至该句之首。 (注一)

      ) 移至该句之末。

      { 移至该段落之首。 (注二)

      } 移至该段落之末。

      nG 移至该文件的第 n 列。

      n+ 移至光标所在位置之后的第 n 列。

      n- 移至光标所在位置之前的第 n 列。

      <Ctrl><g> 会显示该行的行号、文件名称、文件中最末行的行号、光标

      所在行号占总行号的百分比。

     

      注一:句子(sentence)vi中是指以『!』、『.』或『?』结束的一串字。

      注二:段落(paragraph)vi中是指以空白行隔开的文字。

     

      屏幕的移动

     

      <Ctrl><f> 屏幕往下卷一页。

      <Ctrl> 屏幕往上卷一页。

      <Ctrl><d> 屏幕往下卷半页。

      <Ctrl> 屏幕往上卷半页。

      <Ctrl><e> 屏幕往下卷一行。

      <Ctrl><y> 屏幕往上卷一行。

     

      删除、复制及修改指令介绍 (此单元较少使用)

     

      d(delete)c(change)y(yank)这一类的指令在 vi 中的指令格式为:

      Operator + Scope = command

      (运算子) (范围)

      运算子:

      d 删除指令。删除资料,但会将删除资料复制到内存缓冲区。

      y 将资料(字组、行列、句子或段落)复制到缓冲区。

      p 放置(put)指令,与 d y 配和使用。可将最后deleteyank的资

      料放置于光标所在位置的行列下。

      c 修改(change)指令,类似deleteinsert的组合。删除一个词组、句

      子等的资料,并插入新输入的资料。

     

      范围:

      e 由光标所在位置至该字符串的最后一个字符。

      w 由光标所在位置至下一个字符串的第一个字符。

      b 由光标所在位置至前一个字符串的第一个字符。

      ?$ 由光标所在位置至该行的最后一个字符。

      0 由光标所在位置至该行的第一个字符。

      ) 由光标所在位置至下一个句子的第一个字符。

      ( 由光标所在位置至该句子的第一个字符。

      { 由光标所在位置至该段落的最后一个字符。

      } 由光标所在位置至该段落的第一个字符。

     

      整行动作

      dd 删除整行。

      D 以行为单位,删除光标后的所有字符。

      cc 修改整行的内容。

      yy yank整行,使光标所在该行复制到内存缓冲区。

     

      删除与修改

     

      x 删除光标所在该字符。

      X 删除光标所在之前一字符。

      dd 删除光标所在该行。

      r 用接于此指令之后的字符取代(replace)光标所在字符。

      如: ra 将光标所在字符以 a 取代之。

      R 进入取代状态,直到《ESC》为止。

      s 删除光标所在的字符,并进入输入模式直到《ESC》。

      S 删除光标所在的该行资料,并进入输入模式直到《ESC》。

     

      移动与复制

     

      利用 delete put 指令可完成资料移动的目的。

      利用 yank put 指令可完成资料复制的目的。

      yank delete 可将指定的资料复制到内存缓冲区,而通过 put 指令

      可将缓冲区内的资料复制到屏幕上。

      例:

      移动一行 .在该行执行 dd

      .光标移至目的地

      .执行 p

      复制一行 .在该行执行 yy

      .光标移至目的地

      .执行 p

     

      指令重复

     

      在指令模式中,可在指令前面加入一数字 n,则此指令动作会重复执行 n

      次。

      例:

      删除10 10dd

      复制10 10yy

      .光标移至目的地

      .p

      指标往下移10 10j

      取消前一动作(Undo)

      即复原执行上一指令前的内容。

      u 恢复最后一个指令之前的结果。

      U 恢复光标该行的所有改变。

      查找

      vi中可查找某一字符串,使光标移至该处。

      /字符串 往光标之后寻找该字符串。

      ?字符串 往光标之前寻找该字符串。

      n 往下继续寻找下一个相同的字符串。

      N 往上继续寻找下一个相同的字符串。

      资料的连接

      J 句子的连接。将光标所在的下一行连接至光标该行的后面。

      若某行资料太长亦可将其分成两行,只要将光标移至分开点,进入输入模式

      (可利用 ai等指令)再按《Enter》即可。

      环境的设定

      :set nu 设定资料的行号。

      :set nonu 取消行号设定。

      :set ai 自动内缩。

      :set noai 取消自动内缩。

      自动内缩(automatic indentation)

      在编辑文件或程序时,有时会遇到需要内缩的状况,『:set ai』即提供自

      动内缩的功能,用下例解释:

      .vi test

      .(进入编辑屏幕后)

      this is the test for auto indent

      《Tabstart indent ← set ai (设自动内缩)

      《Tabdata

      《Tabdata

      《Tabdata ← set noai (取消自动内缩)

      the end of auto indent.

      .注:<Ctrl><d> 可删除《Tab》字符。

      ex指令

      读写资料

      :w 将缓冲区的资料写入硬盘中。

      :10,20w test 将第10行至第20行的资料写入test文件。

      :10,20w>>test 将第10行至第20行的资料加在test文件之后。

    r test test文件的资料读入编辑缓冲区的最后。

     

      删除、复制及移动

      :10,20d 删除第10行至第20行的资料。

      :10d 删除第10行的资料。

      :%d 删除整个编辑缓冲区。

      :10,20co30 将第10行至第20行的资料复制至第30行之后。

    10,20mo30 将第10行至第20行的资料移动至第30行之后。

     

      字符串搜寻与取代

      s(substitute)指令可查找某行列范围。

      g(global)指令则可查找整个编辑缓冲区的资料。

      s指令以第一个满足该条件的字符串为其取代的对象,若该行有数个满足该条

      件的字符串,也仅能取代第一个,若想取代所有的字符串则需加上g参数。

      :1,?$s/old/new/g 将文件中所有的『old』改成『new』。

      :10,20s/^/ / 将第10行至第20行资料的最前面插入5个空白。

      :%s/old/new/g 将编辑缓冲区中所有的『old』改成『new』。

      恢复编辑时被中断的文件

      在编辑过程中,若系统当掉或连线中断,而缓冲区的资料并还未

      被写回硬盘时,当再次回到系统,执行下列指令即可回复中断前

      的文件内容。

      %vi -r filename

      编辑多个文件

      vi还提供同时编辑多个文件的功能,方法如下:

      %vi file1 file2 ..

      当第一个文件编辑完成后,可利用『:w』将该缓冲区存档,而后

    再利用 『:n』载入下一个文件。


    最新回复(0)