新闻资讯
看你所看,想你所想

unix shell

Unix shell,通常被称作"命令行",为Unix和类Unix操作系统提供了传统的用户界面。用户通过输入shell所执行的命令,引导计算机的操作。在微软Windows操作系统平台,类似程序是command.com,或者基于Windows NT内核操作系统的cmd.exe

shell

  shell术语最普通的解释就是:用户用来输入命令的任何程序。自从在Unix操作系统中用户能够选择来自所使用的shell(能民图怀登录时应当执行哪种程序)以阶洲距切般吗来,许多shell已360百科经被开发出来。之所以被称为"shell",是因为它隐藏了shell界面下面的操作系统的细节(这与校怎某块念频值础赵最底层的"ker迫款呀适职矿航呼随nel"相反)。类似地,Unix图形化用户界面,注入GNOME、KDE和Xfce等,偶尔被称作"可视shell"或"图形shell"。shell术语通常与命令行相关联。在Unix中,任何程序都可能是用户的shell。希望使为读通用不同语法输入命令的用户,可以指定一个不同的程序作为他们的shell。

  术语shell也与一个特殊的程序相关,比如Bourne shell,sh。Bourne shell是早期版本Unix所使用的shell,并成为一个事实上的标准;任何类Unix系统至少拥有一个与Bourne shell相兼容的shell。Bourne sh基回群ell程序位于Unix系统的"/bin/sh"。在某些系统中,比如BSD,"/bin/sh"是一个或等同于Bourne shell,但在把回官Linux等其他系统上,"/bin/sh"更多的是一个兼容的、更加富功能性的shell链接。POSIX将其标准shell制定为Korn shell的一个严格子集。

  SHELL的主要功能

  一.命令执行

  二.输入/输出重定向

  三.环境控制

  四.后台处理

  五.SHELL脚本

Unix命令

目录处理命令

  ls--列目录

  这是须走氧对入且灯待最基本的档案指令。 ls 的意义为 "list",也就是将某一个目录或是

 故尽道室刘 某一个档案的内容显示出来。

  格式:ls -1ACFLRabcdfgilmnopqrstux -W[sv] [files]

  例:

  #ls (不跟任何参数以简单格式列出当前目录中所有档案)

  #ls bin (简单格式列出名为bin的文件或目录下的所有档案)

  #ls /u/ilasII_GB/li协块敌简二担胞交b (全路径,列出lib目录下的所有档案)

  ls 的常用参数如下:

  -a :在 UNIX 中若一个目录或档案名字的第一个字元为"." , 则使用 ls

  将不会显示出这个档案的名字,我们称此类档案为隐藏档。如.profile、.tcshrc等

  如果我们要察看这类档案,则必须在其后加上参数-a 。

  -l :这个参数代表使用 ls 的长( long )格式,可以显示更多的资讯,如档案存取权,档案拥有者( owner ),档案归属组,档案大小,档案最后更新时间,甚而symbolic link 的档案是 link 那一个档等等。显示结果如下所示:

  drwx机孩围值头沿金短丰奏rwxrwx 30 roo席国t bin 1024 May 23 10:38 u

  drwxrwxrwx 2 root sys 512 Jul 28 1999 uacn

难场  drwxrwxrwx 5 root sys 512 Jul 27 1999 udk

  lrwxrwxrwx 1 root sys 11 Jul 27 1999 unix -> /stand/unix

  drwxrwxrwx 35 root auth 1024 Apr 3 13:45 usr

  在开始的10个字符上系统给出文件的用户权限。该序列分成四技收含回急个域。第一个字符为类型域,第2、3、4个字符为用户主域,第5、6、7个字符为同组用户域,第8、9、10个字符为其它用户域,域中字符的含义如下:

  在类型域中: d 表示此文件是一个目录

  表示此文件是鲜林样找起一个普通文件 b 表示此文件是调封坚语一个特殊的块设备I/O文件

  c 表示此文件是一个特殊的字符设备I/O文件

  l 表示此文件是一个连接文件。在其文件名称后紧跟与它连接的文件路径及名称。如:

  unix-> /stand/unix

  在"用户主"、"同组用户"、"其它用户"域中: r 表示有读权限。含义是可以拷贝或显示该文件或目录中的内容。

  w 表示有写权限。含义是可以改变或修改该文件。

  x 表示有执行权限。含义是可以执行该文件或用cd命令进入该目录,在该目录中建

  立文件或子目录等。

  表示无权限。 chmod--变更档案模式( change mode )

  这个指令是用来更改档案的存取模式( access mode )。在UNIX 一个档案上有可读(r)可写(w)可执行(x)三种模式,分别针对该档案的所有者(onwer )、同组者( group member )( 你可以ls -lg来观看某一档案的所属的 group ),以及其他人(other )。一个档案如果改成可执行模式则系统就将其视为一个可执行档,而一个目录的可执行模式代表使用者有进入该目录之权利。chmod就是用来变更一些档案的模式。

  格式:chmod [ -fR ] mode filename ...

  主要参数的意义如下:

  -f(Force): chmod 不会理会失败的动作。

  -R(Recurive): 会将所有子树下的所有子目录及档案改为你所要改成的模式。

  Mode:指改变模式。包括三个方面:

  为哪些用户改变 u--用户本身

  g--同组用户

  o--其他用户

  如何改变 +--增加权限

  ---去掉权限

  什么权限 r--读权限

  w--写权限

  x--执行权限

  例:

  #chmodg0+w file1

  修改前file1的权限为:-rwxr--r--

  修改后file1的权限为:-rwxrw-rw-

  也可以用一个三位八进位数字来表示对某些对象的存取权。

  例:

  #chmod666 * (所有用户都可读、写)

  #chmod777 * (所有用户都可读、写、执行)

  cat--串联显示命令

  例:#catfile1 (将文件file1的内容在屏幕上不停地显示出来)

  Cat命令还可以用来建立文件,如:

  #cat>newfile

  this is a text

  Ctrl+D

  即建立newfile文件,内容为:this is a text

  #cat file1 file2 >file3 (将file1,file2两个文件接起来生成文件file3)

  #cat f1 f2>>f3 (将f1,f2两文件接在f3文件的尾)

  more--分屏显示文件内容

  more 可以将所观察的档案根据分屏显示出来,并根据使用者的要求换页或卷行。

  如果使用者要在某一个档案中搜寻一个特定的字串,则按 / 然后跟著打所要搜寻的单字即可进行搜寻。

  如果你在使用中觉得已经看到了所要看的部份,可以按'q'离开 more 的使用。

  在使用中按'v' 亦可以使用编辑器来编辑所观看的档案。

  格式: more filename

  cd--改变当前目录

  格式:cddirname

  例:

  #cd (到用户的"家"目录)

  #cd /usr (将目前目录转移到/usr目录,也即进入/usr)

  #cd .. (返回上一级目录)

  #cd ../.. (返回上一级目录的上一级目录)

  cp--拷贝

  这个指令的意义是复制("COPY"), 也就是将一个或多个档案复制成另

  一个档案或者是将其复制到另一个目录去。

  格式:cp [-fip]source_file target_file (拷贝文件)

  cp [-r|-R][-fip] source_file...target_file (拷贝目录)

  常用参数如下:

  -i :此参数是当已有档名为 f2 的档案时,若迳自使用 cp 将会将原来 f2的内容掩盖过去,因此在要盖过之前必须先询问使用者一下。如使用者的回答是y(yes)才执行复制的动作。

  -r :此参数是用来做递回复制用,可将一整颗子树都复制到另一个目录中。

  cp 的用法例举如下:

  #cpf1 f2 (将名为f1 的档案复制一份名为 f2 的档案)

  #cpf1 f2 f3 ... dir (将档案f1 f2 f3 ... 复制一份放到目录 dir 里面)

  #cp-r dir1 dir2 ( 将dir1 的全部内容全部复制到 dir2 里面)

  mv--移动或改名

  mv 的意义为 move , 主要是将一档案改名或移至另一个目录。

  格式: mv [-fi] source_file... target_file

  主要参数:

  -i : -i 的含义与 cp 的相同,均是interactive询问之意。

  -f: 强迫( force )执行 。所有其他的参数遇到 -f 均失效。

  例:

  #mvf1 f2 (将名为 f1 的档案变更成名为 f2 的档案)

  #mvdir1 dir2 ( 将名为 dir1 的目录变更成名为 dir2 的目录)

  #mvf1 f2 f3 ... dir (将档案f1 f2 f3 ... 都移至目录 dir 里面)

  rm--删除

  rm 的意义是 remove ,也就是用来删除一个档案。在 UNIX 中一个被删除的档案除非是系统恰好有做备份,否则是无法像DOS 里面一样还能够恢复。所以在做 rm 动作的时候使用者应该要特别小心。

  格式: rm [-fiRr] file...

  主要参数:

  -f :将会使得系统在删除时,不提出任何警告讯息。

  -i :在除去档案之前均会询问是否真要除去。

  -r :递归式的删除。

  注意:

  不要随便使用rm-rf , 否则有一天你会"欲哭无泪"......

  例:

  rm f1 (删除名为f1的档案)

  rm -r dir1 (删除名为dir1的目录及其下的所有档案)

  rm-i sendmarc1 (删除名为sendmarc1的文件前先提示,待回答(Y/N)?)如下:

  removesendmarc1 ? y

  mkdir--创建目录

  mkdir 是一个让使用者建立一个目录的指令。你可以在一个目录底下使用

  midir建立一个子目录。

  格式:mkdir dirname1 [ dirname2 ... ]

  例:

  #cd/u/ilasII_GB (将当前路径置换为/u/ilasII_GB)

  #mkdir ilasbak (在/u/ilasII_GB目录下创建一个名为ilasbak的子目录)

  rmdir--删除目录

  rmdir 是用来将一个"空的"目录删除。如果一个目录下面没有任何档案,你就可以用rmdir 指令将其除去。

  格式:

  rmdirdirname1 [ dirname2 .... ]

  如果一个目录底下有其他的档案,rmdir 将无法将这个目录删除,除非使用 rm 指令的 -r选项。

  例 :

  rmdir ilasbak (删除名为ilasbak的空目录)

  pwd--显示当前路径

  例如:

  #pwd

进程处理命令

  ps--显示目前你的 process或系统 processes 的状况

  格式:

  ps [-aAdefl] [-G groups] [-o format] [-p pids] [-ttermlist] [-u users] [-U users] [-g pgrplist]

  常用参数:

  -a 列出所有用户的 process 状况。

  -u 显示 user - oriented 的 process 状况 。

  -x 显示包括没有 terminal 控制的 process 状况 。

  -w 使用较宽的显示模式来显示 process 状况 。

  例:

  #ps-ae (显示所有进程的进程号及状态)

  #ps-u ilasnt1 (显示用户ilasnt1的进程状态)

  PID TTY TIME CMD

  1194 ttyp0 00:00:00 sh

  #ps-t tty1a (显示设备tty1a上的进程)

  如上所示:我们可以经由ps 取得目前 processes 的状况,如 PID(进程号) , TTY(设备名)、TIME(时间)、CMD(程序名) 等。

  kill--杀进程

  kill 指令的用途是送一个信号给某一个进程。因为大部份送的都是用来杀掉进程,因此称为 kill 。

  格式:

  kill[ -SIGNAL ] pid ...

  kill-l

  SIGNAL:为一个讯号的数字,从 0 到 31 ,其中 9 是 SIGKILL ,也就是一般用来杀掉一些无法正常终止进程的讯号。

  你也可以用kill -l 来察看可代替signal 号码的数目字。

实例

火积材论下去席湖张  #!/bin/ksh

  _compare_2_date()

  {

  if [ $# -ne 2 ];then

  can_arch迫适负之食总我ive=false

  return 1

  fi

  can_archive=队连空好false

  year1=`expr substr $1 1 4`

  month1=`expr subst来自r $1 6 2`

  day1=`expr substr $1 9 2`

  month1=`expr $month1 + 0`

  total_mo紧否带元材战劳达草提皇nth1=`expr $year1 \* 12 + $month1`

  year2=`expr substr $集响2 1 4`

  month2=`践传然expr substr $2 6 2`

  day2=`expr sub士草京点又str $2 9 2`

  month2=`expr $month2 + 0`

  total_month2=`expr $year2 \* 12 + $month2`

  # echo "$total_month1,$total_month2,$day1,$day2"

  if [ $total_month1 -lt $total_month2 ];then

  can_ar360百科chive=true

  elif [ $total_month1 -eq $total_month2 ];then

  if [ $day1 -lt $day2 ];the反异他席基n

  can_archive=true

  fi

  fi

  }

  if [ $# -ne 1 ]; then

  echo usage: 'log_file_purge.ksh [OFFSET_MONTH]'

  exit 1

  fi

  echo "Purge log j广承完球游巴因ob start at :" `date "+%Y-%m-%d %H:%M:%S"`

  export OFFSET_MONTH=${1}

  export TOTAL_FILE=0

  export ARCHIVAL_DIR=/appsdata/archive/logs

  export L严块印草井育它OG_SUFFIX=abc.log-

  if [ ! -d "${ARCHIVAL_DIR}" ]; then

  echo "Archival Log directory: ${ARCHIVAL_DIR} does not exists"

  echo 征问何械"Purge log job failed at :" `date "+%Y-%m-%d %H:%M:%S"`

  exit 1

  fi

  CURRENT_DAT反敌E=`date "+%Y-%m-%d"`

  echo "Cu员做婷过注善货消含析rrent date is $CURRENT_DATE"

  CURRENT_YEAR=`expr substr $CURRENT_DATE 1 4`

  CURRENT_MON善源均般屋TH=`expr sub系界磁水杂法效输str $CURRENT_DATE 6 2`

  CURRENT_DAY=`expr substr $CURRENT_DATE 9 2`

  ARC对别父呼好响波HIVAL_YEAR=$CURRENT_YEAR

  ARCHIVAL_MONTH=$CURRENT_MONTH

  ARCHIVAL_DAY=`expr $CURRENT_DAY + 0`

  while [ $OFFSET_MONTH -gt 0 ]

  do

  ARCHIV规差急附云城什AL_MONTH=`expr $ARCHIVAL_MO握顾负资及故护初引NTH - 1`

  if [ $ARCHIVAL_MONTH -lt 1 ]; then

  ARCHIVAL_YEAR=`expr $ARCHIVAL_YEAR - 1`

  ARCHIVAL_MONTH=`expr $ARCHIVAL_MONTH + 12`

  fi

  OFFSET_MONTH=`expr $OFFSET_MONTH - 1`

  done

  PURGE_DATE=`printf "%04s-%02s-%02s" $ARCHIVAL_YEAR $ARCHIVAL_MONTH $ARCHIVAL_DAY`

  echo "Purge cutoff date is $PURGE_DATE"

  ls -l $ARCHIVAL_DIR/$LOG_SUFFIX*|grep '^-'|awk '{print $9}'|while read file

  do

  # echo $file

  file_name=`basename "$file"`

  FILE_DATE=`expr substr $file_name 9 10`

  # echo "FILE_DATE date is $FILE_DATE"

  _compare_2_date $FILE_DATE $PURGE_DATE

  if [ "$can_archive" = "true" ];then

  echo "archive file [$file_name]"

  rm -f $ARCHIVAL_DIR/$file_name

  if [ $? -eq 0 ]; then

  TOTAL_FILE=`expr $TOTAL_FILE + 1`

  else

  echo "Purge log job failed at :" `date "+%Y-%m-%d %H:%M:%S"`

  exit 1

  fi

  fi

  done

  echo "Total purge $TOTAL_FILE log files"

  echo "Purge log job finished successfully at :" `date "+%Y-%m-%d %H:%M:%S"`

  exit 0

转载请注明出处累积网 » unix shell

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com