shell 学习笔记

一、文件安全与权限

1、文件有读r 写w 可执行x 三个权限 对应数字 4 2 1

使用ls -l 出来的最前面的就是文件的权限位

-rwxr-x-r-- 最前面-表示普通文件,剩下的三位三位读,分别表示文件的权限,文件所在组用户的权限,其他用户权限

drwxr-xr-- 最前面d表示目录。

2、改变权限,chmod [who] operator [permission] filename

who 指的是 哪个用户,u :指的是当前文件属主,g :同组用户 ,o :其他组用户 a : 所有用户

operator 指的是 + 增加权限; - 取消权限 ; = 设定权限

permission 指的是赋予什么样的权限,有 r  w  x  ,此外还有s : 文件属主和组set-ID ;t 粘性位* ; l : 给文件加锁,使其他用户无法访问;

如果本来是 r--r--r-- 想加可执行权限,则可以 chmod u + x  file 或者chmod 544 file

3、umask值 :用户设定创建文件或者文件夹时候的初始权限; 对于文件来说,系统不允许在创建文件时候就有可执行权限,所以一个文件的权限是666(6=4+2+0)

而文件夹是777(7=4+2+1); 如果umask值为022,那么创建的新的文件 权限应该是644; 文件夹的权限则是755 (记住:umask是从文件中拿走位的,比如022就是拿走 0,拿走2 ,拿走2 )

4、符号链接 ln [-s] source_path  target_path (路径可以是目录也可以是文件) ,多个文件可以指向一个源文件,想改变只要改一个源文件,而不必每个客户端用户文件都改动一遍

二、find和xagrs

1、find命令

find pathname -options [-print -exec -ok] pathname表示所要查找的目录 .表示当前目录。/表示系统根目录

-print 命令将结果打印出来 。 -exec 和 -ok都是用来对匹配的文件执行该参数所给出的shell命令 (-ok每次要确认,更加安全),相应的命令形式为:'command' {} \

例: find . -type f -exec ls -al {} \;

2、-options 就是要操作的动作  例:find . -name "[A-Z]*" -print    在当前目录下找到  名字为A到Z开头的 所有文件(-name是按照文件名查找)

3、-perm 按照文件权限找 find . -perm -755 -print

4、忽略某个目录 比如在/apps下找文件 但是忽略/apps/bin下面的内容 find /apps -name "/apps/bin" -prune -o -print

5、查找比某个文件新或旧的文件 find . -newer newfile ! -newer oldfile

查找比某个文件新的  find . -newer file -print (延伸:查找两个小时前到现在的文件,新建一个文件file1  9月6号14点(touch -t09061400 file1),时间改成两小时前,用此命令查即可)

6、使用xargs命令 :使用-exec命令每处理一个匹配到的文件都会启一个相应的进程,而使用xargs 则只启动一个进程

find . -type f -print |xargs file

三、crontab

1、可以通过cron.deny 和cron.allow 来禁止和允许用户拥有自己的crontab

命令格式:分<>时<>日<>月<>星期<>要运行的命令

第一列分:1-59 第二列小时:1-23 (0为子夜) 第三列日:1-31 第四列月:1-12 第五列星期:0-6 (0表示周日) 第六列:要运行的命令

例:30 21 * * * /apps/bin/cleanup.sh 表示每天晚上21.30 执行cleanup.sh脚本

0 23 * * 6,0 /apps/bin/cleanup.sh 表示每周六周日的23点 执行cleanup.sh脚本

0 23 1-4 * * /apps/bin/cleanup.sh 表示每个月的1-4号的23点 执行cleanup.sh脚本

crontab 每隔5分钟同步时间到服务器211.138.22.34 */5

*/5 * * * *  /usr/sbin/ntpdate 211.138.22.34 >> /data/ntpdate.log

crontab -e 编辑 -l 列出内容不编辑 -u 用户名 -r 删除 如果用当前用户登录crontab 则不需要-u命令

crontab -l -u alddms (显示alddms 用户下的ctontab 内容)

四、文件名置换(用户查找匹配文件名)

1、* 用于匹配文件名中任意字符串,包括空。

ls app* 列出app开头的所有文件 ls *.txt 列出以.txt为后缀的所有文件

2、? 用于匹配文件名中任何单个字符串

ls a?p* 列出ap中间有任意一个字符,p后面为任意字符的所有文件 如axpxx

3、[...] 用于匹配[]中包含的任意字符

ls log.[0-9] 列出以log.开头,后面是一个数字的 所有文件  如 log.3

4、[!...]用于匹配[]中!后的任意字符

ls log.[!0-9]* 列出以log.开头,.后面非数字开头的所有文件 如log.axxx

五、输入输出

1、echo read cat 管道(|) tee cat test.log |tee -a t1.log 把test.log中内容显示在桌面并且输入到t1.log中(-a表示追加输入)

六、命令执行顺序

1、命令执行控制

&& : 命令1 && 命令2 只有命令1成功后命令2才执行

|| : 命令1 || 命令2 只有命令1失败了才执行命令2

2、命令组合

() : (命令1;命令2;命令3;...) 当前命令在同一个shell中执行

{} : {命令1;命令2;命令3;...} 当前命令被放到一个子shell中执行

七、正则表达式(RE)

1、匹配行首和行尾

^ : 匹配行首

$ : 匹配行尾

匹配空行 ^$

匹配一个字符的 ^.$

* :一个单字符后紧跟*,匹配0个或者多个此单字符 如 123.txt中有 12345 12358  123 12223 12456

使用命令 cat 123.txt|grep '1234*' 结果为12345 12358 123

[] : 匹配[]中字符,可以是单个字符,也可以是字符序列,可以使用-表示序列范围,如[1-5]替代[12345]

匹配任意字母数字 [a-zA-Z0-9]

[^a-zA-Z] 匹配任意非字母型字符

[^0-9] 匹配任意非数字型字符

\ : 用来屏蔽一个元字符的特殊含义

. : 匹配任意单字符

pattern\{n\} : 用来匹配前面pattern 出现的次数n

A\{2\}B 结果为AAB

pattern\{n,m\} : 用来匹配前面pattern出现的次数, 次数在n和m之间

A\{2,4\}B 结果为AAB,AAAB,AAAAB

pattern\{n,\}m : 用来匹配前面pattern出现的次数,次数最少为n

A\{2,\}B 结果为AAB,AAAB,AAA...AB,...

2、特殊经常用到的匹配

IP地址格式 nnn.nnn.nnn.nnn [0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} 解释:[0-9]\{3\} 就是pattern\{n\} 表示由三位数0-9组成

日期格式 dd-mm-yyyy [0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\}

匹配任意字符 [^.*$]

3、fork炸弹的概念:进程递归式派生(fork,亦即自我复制),以使系统拒绝服务甚至崩溃

:(){ :|:& };:

注释如下:

:() # 定义函数,函数名为":",即每当输入":"时就会自动调用{}内代码

{ # ":"函数开始标识

: # 用递归方式调用":"函数本身

| # 并用管道(pipe)将其输出引至...

: # 另一次递归调用的":"函数

# 综上,":|:"表示的即是每次调用函数":"的时候就会生成两份拷贝

& # 调用间脱钩,以使最初的":"函数被杀死后为其所调用的两个":"函数还能继续执行

} # ":"函数结束标识

; # ":"函数定义结束后将要进行的操作...

: # 调用":"函数,"引爆"fork炸弹

其中函数名“:”只是简化的一例,实际实现时可以随意设定,一个较易理解(将函数名替换为“forkbomb”)的版本如下:

forkbomb(){ forkbomb|forkbomb &} ; forkbomb

八、grep和正则表达式

1、grep 用法: grep [选项] 基本正则表达式[文件]

-c 只输出匹配行的计数

-i 不区分大小写

-h 查询多文件时不显示文件名

-l 查询多文件时只输出包含匹配字符的文件名

-n 显示匹配行及行号

-s 不显示不存在或无匹配的错误信息

-v 显示不包含匹配文本的所有行

2、 查询多个文件

如果在所有的doc文件中查询sort,则应该这么写:grep "sort" *.doc

匹配行:在test.txt中查询包含48的有多少行

grep -c "48" test.txt 该结果只显示多少行

显示查询的结果: grep -c "48" test.txt

显示满足所有匹配结果的行号及内容

grep -n "48" test.txt   显示样式 23:48xx .....

显示非匹配行 grep -v "48"  test.txt

精确匹配 grep "48\v"  test.txt

行首不是48 grep '^[^48]' test.txt

第九章、AWK

1、三种方式调用awk 第一:awk [-F 域分隔符] 'command' inputfile 这里的command是真正的awk命令,[]里是可选的,不填默认是空格分隔

例如以:分隔 awk -F: 'command' inputfile

第二:将所有awk命令写到一个文件中,并使awk命令可行,然后用awk命令解释器作为脚本的首行,通过键入脚本名来执行

第三:将所有awk命令插入一个文件,然后调用: awk -f awk-script-file inputfile

2、域和记录:浏览域标记为$1,$2,$3,$4,$5 这种发发称为域标识 $0表示全部域 awk '{print $0}' test.txt |tee log.txt

awk '{print $1,$4}' test.txt

awk 'BEGIN {print "Begin \n"} {print $1} END {"end!"}'

3、NF 打印最后一列 ll | awk '{print $NF}' 打印第一列 ll | awk '{print $1}'

不打印最后一列 ll | awk 'NF--'    不打印第一列  ll |awk '{$1="";print $0}'

4、NR 用于快速查域记录个数 awk '{if (NR >0 && $4~/Brown/) print $0}' grade.txt 如果域记录大于0,且第四列匹配Brown,就打印那一行的信息

5、利用awk打印第一行: ll | awk 'NR==1' 打印最后一行:ll | awk 'END{print}' 不打印第一行和最后一行 awk 'NR>2{print p}{p=$0}' test.txt

6、

第十章、SED

1、打印第N行 sed -n '2p' test.txt 打印test.txt中的第二行 最后一行 sed -n '$p' test.txt

2、打印3-5行 sed -n '3,5p' test.txt

3、匹配god这个词并打印该行 sed -n '/god/'p test.txt

4、在第四行匹配god,有该词就打印 sed -n '4,/god/'p test.txt

5、匹配元字符$ sed -n '/\$/'p test.txt

6、打印1到最后一行 sed -n '1,$p' test.txt

7、将abc替换成def sed  's/abc/def/g' test.txt 替换并修改test.txt文本 则 sed -i 's/abc/def/g' test.txt

8、删除最后一行、删除1-3行 sed '$d' test.txt sed '1,3d' test.txt

windows上写的脚本到shell上面会有莫名其妙的问题,按照如下操作

  vi xxxx.sh 

    输入:

set ff    可以查看文件是dos还是unix 如果是dos 就执行下面的

:set ff=unix(或者:set fileformat=unix) 

    :wq 

或者dos2unix file -- 不一定都有dos2unix 命令

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容