SHELL 命令简述

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匹配的重复出现的字符序列,只保留一个。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值