LinuxShell应用编程专题讲座writtenby王保明第一部分shell编程基础1shell简介什么是shell存取权限和安全shell简单脚本shell特性1.1什么是shellshell是核心程序kernel之外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言。shell是命令解析器,用户输入命令,它去解析。shell类型ash、bash、ksh、csh、tcshcat/etc/shells看系统下的shellecho$SHELL看当前用户运行的shell程序在shell中运行ls命令执行过程分析shell中可以运行子shell/bin/csh退出子shelllinux下默认的shell是bashbash特点,快速(上下键);tab键盘自动补齐;自动帮助功能help在shell下执行help命令,可以查看shell提供的命令[test@localhost~]$helpGNUbash,version3.2.25(1)-release(x86_64-redhat-linux-gnu)Theseshellcommandsaredefinedinternally.Type`help'toseethislist.Type`helpname'tofindoutmoreaboutthefunction`name'.Use`infobash'tofindoutmoreabouttheshellingeneral.Use`man-k'or`info'tofindoutmoreaboutcommandsnotinthislist.Astar(*)nexttoanamemeansthatthecommandisdisabled.JOB_SPEC[&]((expression)).filename[arguments]:[arg...][[expression]]alias[-p][name[=value]...]bg[job_spec...]bind[-lpvsPVS][-mkeymap][-ffibreak[n]builtin[shell-builtin[arg...]]caller[EXPR]caseWORDin[PATTERN[|PATTERN].cd[-L|-P][dir]command[-pVv]command[arg...]compgen[-abcdefgjksuv][-ooptioncomplete[-abcdefgjksuv][-pr][-ocontinue[n]declare[-afFirtx][-p][name[=valdirs[-clpv][+N][-N]disown[-h][-ar][jobspec...]echo[-neE][arg...]enable[-pnds][-a][-ffilename]eval[arg...]exec[-cl][-aname]file[redirecexit[n]export[-nf][name[=value]...]orfalsefc[-eename][-nlr][first][lastfg[job_spec]forNAME[inWORDS...;]doCOMMAfor((exp1;exp2;exp3));doCOMfunctionNAME{COMMANDS;}orNAgetoptsoptstringname[arg]hash[-lr][-ppathname][-dt][nahelp[-s][pattern...]history[-c][-doffset][n]orhiifCOMMANDS;thenCOMMANDS;[elifjobs[-lnprs][jobspec...]orjobkill[-ssigspec|-nsignum|-siletarg[arg...]localname[=value]...logoutpopd[+N|-N][-n]printf[-vvar]format[arguments]pushd[dir|+N|-N][-n]pwd[-LP]read[-ers][-ufd][-ttimeout][readonly[-af][name[=value]...]return[n]selectNAME[inWORDS...;]doCOset[--abefhkmnptuvxBCHP][-ooptishift[n]shopt[-pqsu][-olong-option]optsourcefilename[arguments]suspend[-f]test[expr]time[-p]PIPELINEtimestrap[-lp][argsignal_spec...]truetype[-afptP]name[name...]typeset[-afFirtx][-p]name[=valuulimit[-SHacdfilmnpqstuvx][limitumask[-p][-S][mode]unalias[-a]name[name...]unset[-f][-v][name...]untilCOMMANDS;doCOMMANDS;donevariables-Somevariablenamesanwait[n]whileCOMMANDS;doCOMMANDS;done{COMMANDS;}1.2存取权限与安全简介:文件和目录的权限(-rwxr—r--)setuid(suid/guid)(chmodu+sg+sfile)chown和chgrp(chownuserfile/chgrpgroupfile)umask(umasknnn)(文件创建时的缺省权限位)文件和目录的权限(-rwxr--r--)linux下安全解决方案很多,现在讨论文件和目录的访问权限练习ls–lh文件的权限硬链接数用户名用户组文件大小、最近修改时间文件名称drwxr-xr-x2testtest4096Jun2308:07cppsocket1drwxr-xr-x8testtest4096Jun2308:08cppsocket2drwxr-xr-x9testtest4096Jun1812:32gcc-rw-r--r--1testtest59827Jun2308:11gcc_mk_gdb.tar.gzdrwxr-xr-x7testtest4096Jun2308:09mkdrwxr-xr-x4testtest4096Jun2309:47mygccdrwxr-xr-x5testtest4096Jun2311:13mymk-rw-r--r--1rootroot63Nov92013oraInst.loc-rw-rw-r--1oracleoinstall732Nov92013oratabdrwxr-xr-x2rootroot4096Nov92013pam.ddrwxr-xr-x3rootroot4096Nov82013racoonlrwxrwxrwx1rootroot7Nov82013rc-rc.d/rcdrwxr-xr-x10rootroot4096Nov82013rc.d硬链接数?d-目录–一般文件–l快捷方式–c字符设备–b块设备s-socket设备文件–p管道文件-rw-r--r--1rootroot5Jun2312:39scim-bridge-0.3.0.lockfile-0@localhost:0.0-rw-r--r--1oracleoinstall5Jun1816:13scim-bridge-0.3.0.lockfile-501@localhost:0.0srwxr-xr-x1rootroot0Jun2305:39scim-bridge-0.3.0.socket-0@localhost:0.0srwxr-xr-x1oracleoinstall0Jun1807:13scim-bridge-0.3.0.socket-501@localhost:0.0srw-------1oracleoinstall0Jun1807:13scim-helper-manager-socket-oraclesrw-------1rootroot0Jun2305:39scim-helper-manager-socket-rootsrw-------1oracleoinstall0Jun1807:13scim-panel-socket:0-oraclesrw-------1rootroot0Jun2305:39scim-panel-socket:0-rootsrw-------1oracleoinstall0Jun1807:13scim-socket-frontend-oraclesrw-------1rootroot0Jun2305:39scim-socket-frontend-rootdrwx------2rootroot4.0KJun2305:39ssh-grWlnX5288drwx------2oracleoinstall4.0KJun1807:13virtual-oracle.26qtL1drwx------2rootroot4.0KJun2305:39virtual-root.selw4P[test@localhost~]$ls-l/tmp/.X11-unix/X0srwxrwxrwx1rootroot0Jun2220:07/tmp/.X11-unix/X0这里s为socket文件[test@localhost~]$chmod改变文件或目录的权限位manchmod或者infochmodNAMEchmod–changefileaccesspermissions改变文件或者目录的权限位SYNOPSISchmod[OPTION]…MODE[,MODE]…FILE…chmod[OPTION]…OCTAL-MODEFILE…chmod[OPTION]…–reference=RFILEFILE…DESCRIPTIONchmod语法格式chmod[who]operator[permission]filenamewho(u,g,o,a)operator(+,-=)permission(r,w,x,s,t)chmod有两种用法(Theformatofasymbolicmode)1、数字方式用户用户组其他全部增加去掉=读写执行s(具有超级用户)t(执行文件在缓存)eg:chmodu=rwx,g+w,o+rmyfile注意:S位存在的意义:写一个程序,被执行是,临时拥有超级用户权限,执行完毕以后,有恢复普通身份,例如,写一个数据库脚本,这个数据库脚本具有超级管理员身份运行,运行完毕以后,恢复普通身份,避免破坏系统。查看带有s位的应用程序,命令ls–l/bin|grep‘^…s’[root@localhost01]#[root@localhost01]#ls-l/bin|grep'^...s'-rwsr-xr-x1rootroot61424Jul32009mount-rwsr-xr-x1rootroot37312Apr242009ping-rwsr-xr-x1rootroot32736Apr242009ping6-rwsr-xr-x1rootroot28336Jul132009su-rwsr-xr-x1rootroot41224Jul32009umount[root@localhost01]#[root@localhost01]#2、chmod数字方式chmodmodefilechmod775filerwx数字代表4213、chownroot.testmyfile改变myfile的用户名、用户组setuid(suid/guid)(chmodu+s,g+sfile)chown和chgrp(chownusefile/chgrpgroupfile)chown改变文件、目录所在的用户和用户组chgrp改变文件、目录所在的用户和用户组chown[-R]ownermyfilechownowner.groupmyf