shell编程笔记.docx
- 文档编号:26545169
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:23
- 大小:27.31KB
shell编程笔记.docx
《shell编程笔记.docx》由会员分享,可在线阅读,更多相关《shell编程笔记.docx(23页珍藏版)》请在冰豆网上搜索。
shell编程笔记
shell编程笔记1----文件安全与权限
第一章文件安全与权限
文件的三种访问方式:
读(r,read)、写(w,write)、执行(x,execute)
文件的权限分为三类
文件属主(u,user),同组用户(g,group),其他用户(o,other)
通过ls-l命令查看如下:
-rwxr--r-- 1xxxuser wnms 181Jun2109:
28sie_hw_btsdata.sh
drwxr-xr-x 2xxxuser wnms 512Sep1210:
58test
下面从左到右分别介绍
-rwxr--r--是文件的权限位,第一位可能出现的为-(普通文件),d(目录文件),l(符号链接文件),s(套接字文件),b(块设备文件),c(字符设备文件),p(命名管道文件)
1是该文件的硬连接数
xxxuser是该文件的属主
wnms是该文件的属主的组
181表示文件的大小,单位是字节
Jun2109:
28文件最后修改的时间
sie_hw_btsdata.sh文件名
改变权限位
语法
chmod[who]operator[permission]filename
who包括u,g,o,a,分别表示user,group,other,all
operator包括+,-,=
permission包括r,w,x,s(文件属主或组SETID),t(粘性位),l(给文件加锁)
一个目录上出现t,说明该目录下的文件只有属主才可以删除。
一个文件上出现t,说明该脚本或程序在执行时会被放到交换分区
如下面的例子:
hnxxxdb%ls-l
drwxrwxr-t 2informixinformix 512Apr1412:
06INFORMIXTMP
另,可以通过绝对模式来chmod,如chmod777filename。
目录的权限会覆盖该目录中文件的权限,即目录权限的优先级比该目录下文件权限的优先级高。
例如:
hnxxxdb%ls-l
drwxr-xr-x 2resuser wnms 512Sep1210:
58test
hnxxxdb%cdtest
hnxxxdb%ls-l
-rwxrwxrwx 1resuser wnms 181Jul2817:
49nokia_bts_data.sh
与wnms同组的用户将不能写nokia_bts_data,因为test目录不允许写
suid/guid
某个用户对自己的shell脚本设置了suid这样的权限,那么其他用户也对该shell脚本有相应的权限,guid也是这样。
例如:
hnxxxdb%pwd
/usr/bin
hnxxxdb%ls-l|grep'^...s..s'
-r-sr-sr-x 1root sys 23500Jul20 2005passwd
hnresdb%ls-l|grep'^...s'
-r-s--x--x 1root sys 342712Sep21 2002admintool
-rwsr-xr-x 1root sys 37784Aug31 2005at
-rwsr-xr-x 1root sys 13728Aug31 2005atq
-rwsr-xr-x 1root sys 12688Aug31 2005atrm
-r-s--x--x 1root lp 9736Jan 6 2000cancel
-r-sr-xr-x 1root sys 41820Jul20 2005chkey
-r-sr-xr-x 1root bin 17224Aug31 2005crontab
---s--x--x 1root uucp 69784Jan 6 2000ct
---s--x--x 1uucp uucp 83808Feb27 2001cu
-r-sr-xr-x 1root bin 13808Jan 6 2000eject
-r-sr-xr-x 1root bin 26372Jan 6 2000fdformat
-r-sr-xr-x 1root bin 29508Jul20 2005login
-r-s--x--x 1root lp 23076Jul15 2005lp
-r-s--x--x 1root lp 7116Jan 6 2000lpset
-r-s--x--x 1root lp 22456Jul15 2005lpstat
-rwsr-xr-x 1root sys 7696Dec16 2004newgrp
-rwsr-xr-x 1root sys 7764Mar16 2000newtask
-r-sr-sr-x 1root sys 23500Jul20 2005passwd
-r-sr-xr-x 1root bin 9520Aug31 2005pfexec
-r-sr-xr-x 1root bin 231808Jul20 2005pppd
-r-sr-xr-x 1root bin 21008Jan 6 2000rcp
-r-sr-xr-x 1root bin 55480Jan 6 2000rdist
-r-sr-xr-x 1root bin 16012Jan 6 2000rlogin
-r-sr-xr-x 1root bin 39044Mar12 2003rmformat
-r-sr-xr-x 1root bin 8964Jan 6 2000rsh
-r-sr-xr-x 1root sys 21192Jul20 2005su
-r-s--x--x 1uucp bin 55368Jun27 2001tip
---s--x--x 1uucp uucp 67192Jul29 2003uucp
---s--x--x 1uucp uucp 22588Jul29 2003uuglist
---s--x--x 1uucp uucp 19568Jan 6 2000uuname
---s--x--x 1uucp uucp 62012Jul29 2003uustat
---s--x--x 1uucp uucp 71032Jul29 2003uux
-r-sr-xr-x 1root bin 5980Jan 6 2000volcheck
-r-sr-xr-x 1root bin 12580Mar12 2005volrmmount
设置方法
设置suid,在权限位之前加4,设置guid,在权限位之前加2,两个都设置,在权限位之前加6。
chmod4731filename,chmod6711filename
chown/chgrp
只有文件的属主和系统管理员可以改变文件的所有权
chown-R-hownerfile
R参数表示递归到下面的子目录进行同样的操作,h参数表示改变符号链接文件的属主时不影响指向链接的目标文件
chgrp命令用法同chown
也可以用chown命令同时改变组和用户。
chowngroup:
ownerfile
找出自己属于哪些组,可以用下面的命令
group
id
找某个用户属于哪些组
groupusername
umask
系统管理员为你最初登陆到系统时确定的创建文件的缺省权限
一般来说umask命令是在/etc/profile文件里设置,这个是给所有用户使用的。
如果喜欢永久性的设置自己的umask值,可以放在自己的家目录下的.cshrc(csh)
-----------------------------------------------------------------------------
hnxxxdb%more.cshrc
umask022
sttyerase^H
setpath=(/bin/usr/bin/opt/informix/opt/informix/bin/opt/informix/etc.)
setenvINFORMIXSERVERresserver
setenvINFORMIXDIR/opt/informix
setenvONCONFIGonconfig
if($?
prompt)then
sethistory=32
endif
setenvLANGC
setenvEDITORvi
-----------------------------------------------------------------------------
创建一目录
hnxxxdb%mkdirtest
hnxxxdb%ls-al
drwxr-xr-x 2xxxuser wnms 512Jun2119:
20test
目录默认的权限为755
创建一文件
hnxxxdb%touchtest.sql
hnxxxdb%ls-al
-rw-r--r-- 1resuser wnms 0Jun2119:
22test.sql
文件默认的权限为644
对于目录来说,每类用户(user,group,other)在umask中的值最大为7,对于文件来说,在umask中最大的值为6
改变umask的值,可通过命令umasknnn,其中nnn为000-777之间的值,直接键入umask查出umask的值,值对应的权限为
umask 文件 目录
0 6 7
1 6 6
2 4 5
3 4 4
4 2 3
5 2 2
6 0 1
7 0 0
符号链接
软链接、硬链接
软链接就是一个指向文件的指针。
作用:
可以将多个链接指向同一个文件,即在多个用户的家目录下做个链接指向同一个文件,当要做修改时只要改原文件,其他链接文件看到的也就是修改后的。
ln-s源文件(即实实在在的文件)目标文件(即符号)
目标文件可以不用先创建,如果没有系统会自动创建
shell编程笔记2----find和xargs
第二章find和xargs
find遍利目录或文件系统查找某些文件或目录
语法:
findpathname-options[-print-exec-ok]
pathname是路径
-print将匹配的文件输出的标准输出
-execfind命令对匹配的文件执行该参数所给出的shell命令,命令形式为'command'{}\;,注意{}和\;之间有空格。
-ok和-exec一样,不过更为安全,执行一个命令前会给出提示。
-options选项有很多参数,比如:
-name按文件名查找文件
-perm按文件权限查找文件
-prune不在当前指定的目录找,如果同时使用了-depth,则-prune被忽略
-user按文件属主查找
-group按文件所属的组查找
-mtime-n+n按文件更改时间查找,-n文件更改时间距现在n天内,+n文件更改时间距现在n天前
-nogroup查找无效所属组的文件
-nouser查找无效属主的文件
-newerfile1!
file2查找更改时间比file1新但比file2旧的文件
-type查找某一类型的文件
文件类型有d(目录文件),l(符号链接文件),b(块设备文件),c(字符设备文件),p(命名管道文件)。
f(普通文件)
-sizen[c]查找文件长度为n块的文件,带有c时表示文件长度以字节记
-depth查找文件时,先查找当前目录中的文件,再在其子目录中查找
-mount查找文件时不跨文件系统的mount点
-follow如果遇到符号链接文件就跟踪到链接所指向的文件
-cpio对匹配的我文件备份到磁带中
查找某种文件名模式匹配时用双引号引起来
find~"*.txt"-print
find."*.txt"-print
文件权限模式
find.perm755-print
忽略某个目录
find/app-name"/app/bin"-prune-o-print
按照文件属主查找
find.-userdal-print
查找属主帐号已经删除的文件
find/home-nouser-print
-group同上
按更改时间查找
更改时间在2天内的
find~-mtime-2 -print
更改时间在3天前的
find~-mtime+3-print
find~-newertest1.txt!
test2.txt-execls-l{}\;
type选项,可以使用!
排除
find~-typed-print
size选项
find~-size+10000c-print
depth选项
find/etc"test.txt"-depth-print
mount选项
find~-name"abc.txt"-mount-print
删除log目录下三天前的文件
findlog-mtime+3-execrm{}\;
xargs命令同exec,但是是分批处理,不会出现溢出错误
find/-typef|xargsfile
shell编程笔记3----后台执行命令
第三章后台执行命令
cron系统调度进程
at命令,特定时间运行特殊作业
&后台运行一个占用时间不长的进程
nohup后台运行一个命令,即使用户推出也不受影响
cron是系统的主要的调度进程,每个用户有一个crontab文件来保存调度信息。
系统管理员可以通过cron.allow和cron.deny来允许和禁止用户拥有自己的crontab文件。
格式为
分时日月星期命令
也可以用*号来代替表示全部,用-表示时间范围,用,表示时间点,如下面的例子
2003***/app/bin/clean.sh>/dev/null
后面的>/dev/null表示不写日志,把日志信息丢掉
crontab命令格式为
crontab-u[user]-l-e-r
-l列出crontab文件内容
-e编辑crontab文件
-r删除crontab文件
恢复丢失了的crontab文件
将副本拷贝到/var/spool/cron/
如果没有权限,可以用crontab
at命令
root用户可以通过at.deny和at.allow文件控制哪些用户可以有at命令
命令格式
at[-fscript][-m-l-r][time][date]
ctrl+d退出
&命令
command&
查看进程
ps-ef
ps-ef|grepuser
结束进程
kill-9进程号
nohup命令
用户退出命令不挂起nohungup
nohupcommand&
shell编程笔记4----文件名置换
第四章文件名置换
*匹配文件名中任何字符串
?
匹配文件名中的一个字符串
[...]匹配[]中的所包含的任何字符串
[!
...]匹配[]中的非!
的字符串
显示所有以a开头的文件/目录
lsa*
显示前两个字母任意,第三个字母为a的文件/目录
ls?
?
a
列出一i或o开头的文件/目录
ls[io]*
列出以log.开头,后面是一个数字,然后是其他字符的文件
lslog.[0-9]*
列出一非数字开头的文件/目录
ls[!
0-9]*
shell编程笔记5----shell输入与输出
第五章shell输入与输出
echo
使用echo可以输出文本和变量,\c不换行,\f进纸,\t跳格,\n换行
echo"what'syourname:
\c"
read
从键盘或文本中读入信息,并赋给变量
readnamejohn
echo$name
cat
完整显示一个文件内容
如果要分页显示,可以通过管道
catfile|more
catfile|pg
显示控制字符
cat-vfile
显示多个文件
catfile1file2file3
三个文件创建到一个文件中
catfile1file2file3>bigfile
从键盘输入文字到文件,ctrl+d结束
cat>file
管道
一个命令的输出作为另一个命令的输入
管道特别适用与sed、awk、grep
who|awk'{print$1"\t"$2}'
tee
一个输出到副本,另一个输出到标准输出
who|teewho.out
这样一个输出到屏幕,同时也输出到who.out文件
-a参数,不覆盖前面的输出
标准输入、输出和错误
当我们在shell中执行命令的时候,每个进程都会和三个打开的文件相联系,这三个文件是标准输入文件STDIN(缺省是键盘,也可以是文件)、标准输出文件STDOUT(缺省是屏幕,也可以是文件)、标准错误文件STDERR(缺省是屏幕,也可以是文件),描述符分别用0、1、2
lsa.txtb.txt1>1.log2>2.log
如果要把标准输出和错误输出到相同的文件,使用lsa.txtb.txt1>1.log2>&1
注意:
csh有所不同,使用下面的命令(lsa.txtb.txt>1.log)>&2.log
对于标准错误输出,必须使用文件描述符,标准输入和标准输出则不需要
文件重定向
command>filename标准输出重定向到文件
command>>filename标准输出重定向追加到文件
command1>file标准输出重定向到文件
command1>file2>&1标准输出和错误输出到同一个文件
command2>filename标准错误重定向到文件
command2>>filename标准错误重定向追加到文件
command>>filename2>&1标准输出和错误追加到一个文件
command
command command< command<&m把文件描述符m作为标准输入 command>&m把标准输出重定向到文件描述符m中 command<&_关闭标准输入 shell编程笔记6----命令执行顺序 第六章命令执行顺序 command1&&command2 command1执行成功则执行command2 command1||command2 command1执行不成功则执行command2 ()和{} (command1;command2;command3) {command1;command2;command3}相应的命令在子shell中执行 shell编程笔记7----正则表达式 第七章 正则表达式 .匹配任意单字符 例如: ..xc..表示第一、二、五、六个字母任意三四个字母是xc的字符串 ^匹配字符串的开头的字母 例如: ^d表示以d开头的字符串 $匹配字符串结尾的字母 trobule$表示匹配以trobule结尾的行 d$表示匹配以字母d结尾的字符 ^$表示匹配空行 ^.$匹配只包含一个字母的行 *匹配字符串中单个字符或其重复序列 compu*t表示匹配一个或多个u的字符串,如compuut,comput,compuuuut等 \屏蔽一个特殊字符 特殊字符包括: $.'"*[]^|0\+? 如要显示*.pas,则可用\*\.pas表示 []匹配一个范围或集合 比如[0-9]表示匹配0到9的十个数字 \{\}匹配模式结果出现的次数 比如: pattern\{n\}匹配模式出现n次 pattern\{n,\}匹配模式至少出现n次 pattern\{n,m\}匹配模式出现n到m次 经常使用的正则表达式 ^行首 $行尾 ^[the]以the开头 [Ss]igna[Ll]匹配Signal,signal,signaL,SignaL [Ss]igna[Ll]\.同时,加一句号. [mayMAY]包含may大写或小些字母的行 ^user$只包含user的行 [tty]$以tty结尾的行 \.带句号的行 ^d..x..x..x用户、组、其他用户均有执行权限的目录 ^[^l]排除关联目录的目录列表 [.*0]0之前后之后加任意字符 [000*]000或者更多个 [^$]空行 [^.*$]匹配行中任意字符串 ^......$包括6个字符的行 [a-zA-Z]任意单字符 [^0-9\$]非数字或$字母 [123]数字1到3中的一个 [Dd]evice单词Device或device de..ce前两个是de后跟两个任意字符,最后两个是ce \^q以^q开始行 ^.$只有一个字符的行 ^\.[0-9][0-9]以.和两个数字开始的行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- shell 编程 笔记