suid/guid分析
suid/guid位可以使文件的执行者获得文件创建者或所在组的权限。比如当对某个脚本设置了suid位,那么其他用户在执行这一脚本时也会具有
该脚本属主的相应权限,执行完毕后又回到原有权限。
在设置该位之前,相应的执行权限位必须要被设置。
下面是使用符号模式的设置。
$ls
$ rwx r-x r-x filename
$chmod u+s filename
$ls
$ rws r-x r-x filename
umask分析
umask命令确定了你创建文件的缺省模式。对应每一类用户存在一个相应的umask值中的数字。
一般形式:
umask nnn需要注意的是,文件在创建的时候是不允许有执行权限的。
文件的最大权限 rwx rwx rwx 777
$umask 002
目录权限 rwx rwx r-x 775
文件权限 rw- rw- r-- 664
find分析
一般形式
find pathname -options [-print -exec -ok]
-exec:find命令对匹配的文件执行该参数给出的shell命令。相应命令的形式为'command' {} /;
-ok:和-exec作用相同,以一种更安全的模式来执行命令。在执行每一个命令之前,都会给出提示。
下面分析一下选项:
-name:文件名称
-perm:文件权限
-user:文件属主
-group:文件所属的组
-mtime -n +n:文件的更改时间
-nogroup:无效所属组
-nouser:无效属主
-newer file1 ! file2:更改事件比file1新但比file2旧
-type:文件类型
-depth:现在当前目录,再在其子目录
-follow:跟踪符号连接文件
可以使用xargs代替-exec选项,这样可以提高性能
比如:
$find / -type f -print | xargs file
$find / -type f -print | xargs grep "device"
后台执行命令分析
cron
cron是系统主要的调度进程。可以使用crontab命令允许用户提交、编辑或者删除相应的作业。需要了解crontab文件的格式:
分<>时<>日<>月<>星期<>要运行的命令
0,30 18-23 * * * /apps/bin/dbcheck.sh
表示每天晚上18:00-23:00之间每隔30分钟允许脚本dbcheck.sh
crontab命令格式
crontab [-u user] -e -l -r
at
可以使用at命令向cron进程提交任务
基本形式如下:
at [-f script] [-m -l -r] [time] [date]
-l:查看所提交的作业
清除一个作业
atrm -r [job no]
&
使用&命令可以把作业放到后台执行。
需要注意的是,当作业在后台工作的时候,作业的输出仍然会输出到屏幕上
nohup
nohup可以使你在退出帐户后进程还能够运行
nohup command &
标准输入、输出和重定向
command > filename
command 1 > filename
command 2 >filename
command >filename 2>&1
command <filename
command <&m 将文件描述符m作为标准输入
command >&m 将文件描述符作为标准输出
command <&_ 关闭标准输入
command << delimiter 从标准输入中读入,直至遇到delimiter分界符
正则表达式
^ 只匹配行首
$ 只匹配行尾
* 一个单字符后紧跟*,匹配0个或多个此单字符
. 匹配任意单个字符
pattern/{n/} 用来匹配前面pattern出现次数,n为次数
pattern/}n,/}m 用来匹配前面pattern出现次数,但次数最少为n
pattern/{n,m/} 用来匹配前面pattern出现次数,但pattern出现次数在n和m之间
[] 用来匹配一定范围。如果^字符直接用在括号内,用来否定或者不匹配括号内的内容,比如:
ls -l | grep '^[^d]' 头一行不是以d开头的。
grep
常用grep选项:
-c 只输出匹配行的计数
-i 不区分大小写
-h 查询多文件时不显示文件名
-l 查询多文件时只输出包含匹配字符的文件名
-n 显示匹配行和行号
-s 不显示不存在或无匹配文本的错误信息
-v 显示不包含匹配文本的所有行
awk
命令行格式:
awk [-F field-separator] 'commands' input-files
awk使用空格作为默认的域分隔符。如果使用自己定义的分隔符,则设定_F选项。
awk在执行时,通过分隔符将一行分成许多域,分别用$1,$2...$n表示。$0表示一行。
awk命令中的command部分分成三部分,分别是BEING,command,END
需要注意的:
整个awk命令必须用单引号括起来
如果在awk命令中使用正则表达式,则用斜线括起来,例如/^d/
一些条件操作符
< 小于
<= 小于等于
!= 不等于
== 等于
~ 匹配正则表达式
!~ 不匹配正则表达式
如果需要匹配两个以上的表达式,可以用“|”连接,例如 if ( $1 ~ /Green|green/ ) print %0
awk内涵一些字符操作函数
gsub 替换字符串 gsub(/目标模式/,替换模式) gsub(/44/,45)
index 查询字符串s中t出现的第一位置 index("sunny","ny")
length 返回字符串长度 length("sunny")
match 测试目标字符串是否包含查找字符的一部分。包含的话则返回排列数,否则返回0
match("ANCD",/d/)
split 返回字符串数组元素个数,结果存在数组里
split("AD2-KP9-LP",array,"-")。返回3,各个元素存在array中
sub 发现并替换模式的第一次出现位置
sub(/op/,"OP",$0)
substr 按照起始位置及长度返回字符串
substr("sunny",1,2),返回su
sed
sed命令行格式
sed [选项] 'commands' input-files
sed脚本格式
sed [选项] -f sed脚本 input-files
具有sed命令解释器的sed脚本
sed脚本 [选项] input-files
选项:
n 不打印
p 打印编辑行
c 下一命令是编辑命令,使用多项编辑时加入此选项
f 调用sed脚本文件
定位文件
x 定位第x行
x,y 定位x--y行
/pattern/ 符合模式,可以是正则表达式
/pattern/,x 给定行号上查询包含模式
sed编辑命令
p 打印匹配行
= 显示文件行号
a/ 在定位行号后附加新文本信息
i/ 在定位行号后插入新文本信息
d 删除定位行
sed '[address[,adress]]d' input-files
c/ 用新文本替换定位文本
s 使用替换模式替换相应模式
sed '[address[,address]] s/pattern-to-find/replacement-pattern/[g p w n]' input-files
r 从另一个文件中读文本
q 第一个模式匹配完成后退出
{} 在定位行执行的命令组
l 显示与八进制等价的控制代码
n 从另一个文件中读文本下一行,并附加到下一行
一个sed脚本
#!/bin/sed -f
/penny/ a/
you got a ball
/tom/ i/
hello linux
/allen/ c/
this world has been changed
sort
sort一般格式
sort -cmu -o output-file [other-options] +pos1 +pos2 input-files
参数
-c 测试文件是否已经分类
-m 合并两个分类文件
-u 删除所有相同行
-o 存储sort结果的输出文件名
other-options
-b 使用域进行分类时,忽略第一个空格
-n 指定分类时域上的数字分类
-t 指定域分隔符;默认为空格。
-r 对分类次序或比较求逆
+n n为域号,使用此域号开始分类
pos1 传递到m,n。m为域号,n为开始分类字符。
-k 指定分类键。这里的第一域从1开始。
sed中将第一个域参照为域0,和awk中需要区别。
sed -t: -k2 temp:以“:”为分隔符,第2列为关键域
sed -m file1 file2:合并两个文件。需要注意,file1,file2必须实现排过序
unig
unig用来删除重复行。需要注意的是,在unig中,重复行指那些连续出现的重复行
unig -u d c -f input-file output-file
-u 只显示不重复行
-d 只显示有重复数据行
-c 打印每一重复行出现次数
-f n为数字,前n个域被忽略
join
join用来将来自两个分类文件文本的行连在一起。
格式如下:
join [options] files1 files2
选项解释如下:
an n为数字,用来连接时从文件n中显示不匹配行
o n.m n为文件号,m为域号
j n m n为文件号,m为域号。使用其它域作连接域。
t 域分隔符
join a1 a2 files1 files2
join o 1.1 2.2 files1 files2
join j1 4 j2 5 files1 file2
cut
cut用来从标准输入或文本文件中剪切列或域
格式如下:
cut [options] file1 file2
选项解释如下:
-c list 指定剪切字符数
-f field 指定剪切域数
-d 指定分隔符
-c 1,5-7 剪切第1个字符,然后是5-7个字符
-f1,5 剪切第1,5两个域
-f1-5 剪切1-5个域
paste
paste用来将相关数据粘贴起来形成相关文件。paste将按行将不同文件行信息放在一行。需要注意的是,两个文件的行数必须相同。
格式如下:
paste -d -s -file1 file2
选项解释如下:
-d 指定域分隔符
-s 将每个文件合并成行而不是按行粘贴。
- 使用标准输入。比如ls | paste -,用一列显示
split
split用来将大文件分隔成小文件。
格式如下:
split -output-file-size input-filename output-filename
output-file-size指文本文件被分隔的行数。
tr
tr主要用于删除文件中的控制字符或进行字符转换
格式:
tr -c -d -s ["strin1"] ["string2"] file
参数解释:
-c 用字符串1的补集替换此字符串
-d 删除字符串1中的匹配字符
-s 删除所有和字符串1匹配的重复出现的字符序列,只保留一个。