linux基本操作命令

xiaoxiao2021-02-28  121

1.基本unix/Linux命令 (1) setuid,guid  作用: suid意味着如果某个用户对属于自己的shell脚本设置了这种权限,   那么其他用户在执行这一脚本时也会具有其属主的相应权限。   guid执行相应脚本的用户将具有该文件所属用户组中用户的权限  例:chmod 4755

(2) chmod,chown,chgrp  作用:修改权限  格式:chmod [who] operator [permission] filename   who:u(文件属主) g(同组用户) o(其他用户) a(所有用户)   operator: +(增加权限) -(取消权限) =(设定权限)   permission:r(读) w(写) x(执行) s(文件属主和组set-ID) t(粘性位*) l(给文件加锁,使其他用户无法访问)  例:chmod ugo+rwx myfile 将myfile文件给u,g,o用户r,w,x的权限

(3) umask  作用:设置所创建文件/目录的缺省权限  格式:umask [value]  例: umask 022   touch file1   则file1的权限部分变为:-rw-r--r-- (4) ln    格式:ln [-s] source_path target_path

(5) touch   作用:创建一个空文档  格式:tough myfile  注解:tough myfile将创建一个文件myfile

(6) find  作用:搜索文件  格式:find pathname -options [-print -exec -ok]   -print:find命令将匹配的文件输出到标准输出   -exec:find命令对匹配的文件执行该参数所给出的shell命令,相应命令的格式为'command'{} /;   -ok:作用和-exec作用相同。只不过每一步执行都需要用户的确认      -options:(主要的)    -name:按文件名查找    -perm:按文件权限查找    -prune:使find命令不在当前指定的目录中查找    -user:按照文件属主查找    -group:按照文件所属组来查找    -mtime -n +n,按照文件的更改时间来查找,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前;此外,还有-atime,-ctime选项,和-mtime选项类似    -type:查找某一类型的文件,诸如:b(块设备文件),d(目录),c(字符设备文件),p(管道文件),l(符号链接文件),f(普通文件)    -size n[c]:查找文件长度为n块的文件  例:  在当前目录及其子目录中查找所有的"*.txt"文件   find . -name "*.txt" -print   在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件      find . -perm 755 -print   在当前目录下查找除目录以外的所有类型的文件       find . ! -type d -print     用ls -l 命令列出所匹配的文件      find . -type f -exec ls -l {} /;  在/logs目录中查找更改时间在5日以前的文件并删除它们      find logs -type f -mtime +5 -exec rm {} /; (7)echo  作用:显示文本行或变量,或者把字符串输入到文件  格式:echo string  例:   给出提示符,并输入值给变量name    echo "What's your name:/c"    read name

(8)pg  作用:显示文件  格式:pg filename

(9)read  作用:读入值给变量  格式:read var  例: read name 从键盘读入字符到name变量 (10)cat   作用:显示文件  格式:cat filename

(11)tee  作用:把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中  格式:tee filename  例:who | tee who.out 使用who命令,结果输出到屏幕上,同时保存在who.out文件中

(12)grep(全局正则表达式)  作用:允许对文本文件进行模式查找,如果找到匹配模式,grep打印包含模式的所有行  格式: grep [options] 基本正则表达式  [文件]  常用options值:   -c 只输出匹配行的计数   -i 不区分大小写(只适用于单字符)   -h 查询多文件时不显示文件名   -l 查询多文件时只输出包含匹配字符的文件名   -n 显示匹配行及行号   -s 不显示不存在或无匹配文本的错误信息   -v 显示不包含匹配文本的所有行  例:grep "sort" *.doc 在当前目录下所有的.doc文件中查找字符串"sort"      grep "48<tab>" data.f 抽取字符串后有一个<Tab>键      grep '[0-9]/{3/}/.[0-0/[3/}/.' ipfile 要抽取其中所有nnn.nnn的IP地址(原文印刷错误?)

(13)awk  格式: awk [-f field-separator] 'command' input-file(s) =====================================================================================    awk条件操作符 ===================================================================================== 操作符  描述          操作符  描述 <         小于          >=       大于等于 <=       小于等于    ~         匹配正则表达式 ==       等于          !          不匹配正则表达式 !=       不等于    ===================================================================================== 

awk内置变量 ------------------------------------------------------ ARGC  命令行参数个数 ARGV  命令行参数排列 ENVIRON  支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR  浏览文件的记录数 FS  设置输入域分隔符,等价于命令行-F选项 NF  浏览记录的域个数 NR  已读的记录数 OFS  输出域分隔符 ORS  输出记录分隔符 RS  控制记录分隔符

 注:awk中所采用的正则表达式的符号要比grep和sed多两个:+(匹配一个或多个字符),?(匹配模式出现率)

 例:   awk '{if($4~/Brown/) print $0}' grade.txt 如果field-4包含了Brwon,打印该行   awk '$3 == "48" {print $0}' grade.txt   精确匹配,如果field-3等于了 "48",则打印该行   awk '{if( $1=="p1" && $4=="p2" ) print $0}' grade.txt 同时满足两个条件,则打印该行   awk '{if( $1=="p1" || $4=="p2" ) print $0}' grade.txt 只要满足其中一个条件,则打印该行

(14)expr 用于计算或数值测试  格式:expr argument operator argument  例: expr 10 + 10 其结果为20   expr 30 / 3 其结果为10   expr 30 /* 3 其结果为90,使用乘号时,必须用反斜线屏蔽其特定含义。   expr rr + 1  当rr非整数时,将返回错误,此处为"expr:non-numeric argument"

2.文件名的匹配

 特殊的匹配符号:  * 匹配文件名中的任何字符串,包括空字符串  ? 匹配文件名中的任何单个字符串  [...] 匹配[]中包含的任何字符  [!...] 匹配[]中非感吧号!之后的字符

 例:   显示所有以.doc结尾的文件名    ls *.doc   显示以cl开头,后面跟任何字符串,最后以.sed结尾的文件名    ls cl*.sed   显示任意两个字符开头,接着是r,后面跟任何字符的文件    ls ??r*   显示以i或o开头的文件名    ls [io]*   匹配所有以log.开头,后面跟随一个数字,然后可以是任意字符串的文件名    ls log.[0-9]*   匹配所有以log.开头,使用[!0-9]来表示非数字开头的字符串    ls log.[0-9]*

 

3.文本过滤

=====================================================================================    基本元字符集及其含义 ===================================================================================== ^                       只匹配行首 $                       只匹配行尾 *                       一个单字符后紧跟*,匹配0个或多个此单字符 []                       匹配[]内字符。可以是一个单字符,也可以是字符序列,用-表示范围                          如用[1-5]代替[12345] /                        用来屏蔽一个元字符的特殊含义。如$ . ' " * ^ | ( ) / + ?

.                         匹配任意单字符 pattern/{n/}      用来匹配前面pattern出现次数。n为次数 pattern/{n,/}m  含义同上,但次数最少为n pattern/{n,m/}  含义同上,但pattern出现次数在n与m之间 =====================================================================================

例:  ^$ 匹配一个空行  ^.$ 匹配只包含一个字符的行  compu*t 匹配字符u 0次或多次,这个可匹配computer,  A/{2/}B 匹配字母A出现两次,并以B结尾  A/{2,4/}B 匹配字母A出现2到4次之间

 

 

 

4.特定shell变量

===================================================================================== $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的进程ID号 $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数 $- 显示shell使用的当前选项,与set命令功能相同 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误 ===================================================================================== 其他:$0(脚本名字) $1 $2 $3 ...$9

 

 

5.shell输入与输出

 

5.1文件描述符

=====================================================================================  文件描述符  文件   0               输入文件——标准输入  1               输出文件——标准输出  2               错误输出文件——标准错误

===================================================================================== 注: 标准输入是文件描述符0,它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出  标准输出是文件描述符1,它是命令的输出,缺省是屏幕,也可以是文件  标准错误是文件描述符2,它是命令错误的输出,缺省是屏幕,也可以是文件

5.2重定向:<,<<,>,>> ===================================================================================== command>filename  把标准输出重定向到一个新文件中 command>>filename  把标准输出重定向到一个文件中(追加) command 1>filename  把标准输出重定向到一个新文件中 command>filename 2>&1  把标准输出和标准错误一起重定向到一个文件中 command 2>filename  把标准错误重定向到一个新文件中 command 2>>filename  把标准错误重定向到一个文件中(追加) command >>filename 2>&1  把标准输出和标准错误一起重定向到一个文件中(追加) command <filename >filename 2 command命令以filename文件作为标准输入,以filename2文件作为标准输出 command <&m   把文件描述符m作为标准输入 command >&m   把标准输出重定向到文件描述符m中 command <&-   关闭标准输入

=====================================================================================

例: ############################################################################# #! /bin/sh # f_desc #把文件描述符4指定为标准输入,然后打开stock.txt文件 exec 4<&0 0<stock.txt

#读入2行文本 read line1   read line2  

#作为标准输入的文件描述符4被关闭 exec 0<&4

#显示两个变量的内容  echo &line1   echo &line2 #############################################################################

5.3管道: 命令1|命令2 who | awk '{print $1"/t"$2}'

6.条件测试

格式1:test condition 格式2:[condition]

 

=====================================================================================    文件测试状态 ===================================================================================== -d 目录        -s 文件长度大于0,非空 -f 正规文件   -w 可写 -l 符号链接   -u 文件有suid位设置 -r 可读         -x 可执行 ===================================================================================== 组合测试: -a 逻辑与 -o逻辑或 !逻辑否

 

例:  [-w results.txt -a -w scores.txt  echo $?  检查上面两个文件是不是都是可写的

 

字符串测试 string_operator 可为=(相等)  !=(不相等)  -z(空串) -n(非空串)

格式1:test "string" 格式2:test string_operator "string" 格式3:test "string" string_operator "string" 格式4:[string_operator string] 格式5:[string string_operator string]

数值测试 numeric_operator可为 -eq(相等),-ne(不相等),-gt(大于),-lt(小于),-le(小于等于),-ge(大于等于) 格式1:"number" numeric_operator "number" 格式2:["number" numeric_operator "number"]

 

7.命令执行顺序 && ,||, (), {}

&& 格式:命令1 && 命令2 说明:命令1返回真(即返回0,成功被执行)后,命令2才能够被执行 例:/apps/bin目录将会被移到/apps/dev/bin目录下,如果它没有被成功的执行,就不会删除/apps/bin目录  mv /apps/bin /apps/dev/bin && rm -r /apps/bin

 

|| 格式:命令1 || 命令2 说明:命令1未执行成功,那么就执行命令2 例: 拷贝文件没成功的话,就显示错误.  cp word.txt word.bak || echo "cp file failed!"

 

() {} 格式:(命令1;命令2;...) {命令1;命令2;...}  

8.控制流结构 if...then...else...fi,case,for,until,while,break,continue

1)返回码  观察:echo $?  退出:exit n (n为一数字)  break n  ==>跳出指定的循环个数。如break 2则跳出2个循环  continue ==>跳出循环当前步

2)流控制if...then...else...fi

 if condition1   then       command1  elif condition2   then       command2  else   command3  fi

例1:

[cpp]  view plain  copy ##############################################   #! /bin/sh   # ifwr   LOGFILE=test.txt   echo $LOGFILE   if [ ! -w "$LOGFILE" ]; then    echo "You cannot write to $LOGFILE " >&2   fi   ##############################################  

 

 

例2:

[html]  view plain  copy ##############################################   #! /bin/sh   # ifcp   #下面用2>&1重定向标准错误,去除了系统产生的错误和系统输出   if cp myfile myfile.bak >/dev/null 2>&1 ; then    echo "good copy"   else    echo "`basename $0`:error could not copy the files " >&2   fi   ##############################################  

 

例3:

[html]  view plain  copy ##############################################   #! /bin/sh   # ifcp   #将脚本参数传入系统命令   #此处检测目录是否为空   DIRECTORY=$1   if [ "`ls -A $DIRECTORY`" = ""] ; then #也可用 if [$# -lt 1] 来代替判断语句    echo "$DIRECTORY is indeed empty"   else    echo "$DIRECTORY is not empty " >&2   fi   ##############################################  

例4:

[html]  view plain  copy ##############################################   #! /bin/sh   # ifmkdir   #将脚本参数传入系统命令   #此处检测目录是否为空   DIRECTORY=$1   if [ "$DIRECTORY" = ""] ; then    echo "Usage: `basename $0` directory to create"    exit 1   fi   if [ -d $DIRECTORY ]    then : # do nothing   else    echo "The directory does exist"    echo -n "Create it now? [y..n] :"    read ANS    if [ "$ANS" = "y" ] || [ "$ANS" = "Y" ]    then     echo "creating now"     mkdir $DIRECTORY >/dev/null 2>&1     if [ $? != 0 ]; then      echo "Errors createing the directory $DIRECTORY" >&2      exit 1     fi    else : # do nothing    fi   fi   ##############################################  

3)case控制流  case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。  格式: ==========================================================================  case 值 in  模式1)   命令1   ....   ;;  模式2)   命令2   ....   ;;  esac ========================================================================== 注:每一模式必须以右括号结束,取值可以为变量或常数。 匹配发现取值符合某一模式后,其间所有命令开始执行直至“;;”

取值将检测匹配每一个模式,一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。 如果无一匹配模式,使用星号*捕获该值,再接受其他输入   模式部分可能包括元字符,与在命令行文件扩展名例子中使用过的匹配模式类型相同,即 *(任意字符),?(任意单字符),[..](类或范围中任意字符) 

 

例1:

[html]  view plain  copy ##############################################   #! /bin/sh   # caseterm   echo "choices are..vt100,vt102,vt220"   echo -n "enter your terminal type :"   read TERMINAL   case $TERMINAL in    vt100|vt102) TERM=vt100     ;;    vt220) TERM=vt220     ;;    *) echo "`basename $0`:Unknow response" >&2      echo "setting it to vt100 anyway,so there"      TERM=vt100     ;;   esac   export TERM   echo "Your terminal is set to $TERM"   ##############################################  

例2: ############################################## #! /bin/sh # caseparam if [ $# !=1 ] ; then  echo "Usage:`basename $0` [start|stop|help]" >&2  exit 1 fi #assign the parameter to the variable OPT OPT=$1 case $OPT in  start) echo "starting..`basename $0`"   ;;  stop) echo "stopping..`basename $0`"   ;;  help)   ;;  *) echo "Usage:`basename $0` [start|stop|help]"   ;; esac ##############################################

4)循环 for格式 ========================================================================== for 变量名 in 列表 do     命令1     命令2     .....     命令n done ========================================================================== 注:列表可以包含替换,字符串和文件名

 

例1: ############################################## #! /bin/sh # for_i for loop in 1 2 3 4 5  #for loop in "orange red blue grey" do      echo $loop done ##############################################

 

例2: ############################################## #! /bin/sh # for_ls for loop in `ls ` do      echo $loop done ##############################################

 

例3: #for params,不使用in列表选项时,实际上等价于 #for params in "$@" 或 #for params in "$*" ############################################## #! /bin/sh # for_param for loop in "$@" # 也可以是"$*," 这可以从命令行中取得参数

do      echo $loop done ##############################################

until(不常用)格式 ========================================================================== until 条件 do     命令1     命令2     .....     命令n done ========================================================================== 例1:监视文件系统容量,当它达到一定水平时通知超级用户 ############################################## #! /bin/sh # until_mon LOOK_OUT=`df | grep /logs | awk '{print $5}' | sed 's/%//g'` echo $LOOK_OUT until ["$LOOK_OUT" -gt "90" ] do      echo "Filesystem..logs is nearly full" | mail root     exit 0  done ##############################################

 

 

while格式 ========================================================================== while 命令 do     命令1     命令2     .....     命令n done ==========================================================================

例1:从文件中读取数据,使用重定向以保证从文件中读取数据 ######################################################################### #! /bin/sh  | SAVEDIFS=$IFS # whileread  | IFS=: while read LINE  | while read NAME DEPT ID do    | do     echo $LINE  |     echo -e "$NAME/t $DEPT/t $ID" done <names.txt  | done <names.txt    | IFS=$SAVEDIFS #########################################################################

上面右边使用IFS将域分隔符改为;号而不是空格或tab键 测试数据names.txt: Louise Conrad:Accounts:Acc889 Peter James:Payroll:PR483 #########################################################################

死循环格式 while : do     命令 done

 

 

例2: ######################################################################### #! /bin/sh # menu #set the date,user and hostname up MYDATE=`date +%d/%m/%Y` THIS_HOST=`hostname -s` USER=`whoami` #loop forever ! while : do     # clear the screen     tput clear     # here documents starts here     cat <<MAYDAY ---------------------------------------------------------------------------   User:$USER  Host:$THIS_HOST  Date:$MYDATE ---------------------------------------------------------------------------   1 : List files in current directory   2 : Use the vi editor    3 : See who is on the system   H : Help screen   Q : Exit Menu --------------------------------------------------------------------------- MADAY

    # here document finished     echo -e "/tYour Choice [1,2,3,H,Q] >"     read CHOICE     case $CHOICE in         1) ls                 ;;         2) vi          ;;         3) who          ;;         H|h)     cat <<MAYDAY  this is the help screen,nothing here yet to help you !     MAYDAY      ;;         Q|q) exit 0          ;;         *) echo -e "/t/007Unknown user response"          ;;     esac     echo -e -n "/tHit the return key to continue"     read DUMMY done #########################################################################

转载请注明原文地址: https://www.6miu.com/read-26730.html

最新回复(0)