[Linux]鸟哥的linux私房菜-shell RE

来源:互联网 发布:房屋租赁软件 编辑:程序博客网 时间:2024/05/17 21:47

command tee

[root @test /root ]# last | tee last.list | cut -d " " -f1
有没有发现在命令重导向的时候,如果我们要将数据送出到档案的时候,屏幕上就不会出现任何的数据!那么如果我们需要将数据同时显示在屏幕上跟档案中呢?呵呵!这个时候就需要 tee 这个指令啰!使用last 可以查看到这个月份的登入数据,而使用了 tee 之后,会将数据同时传给下一个命令去执行,也会将数据写入 last.list 这个档案中!也是个好帮手!

umask illustrate

建立文件时是去除x属性的,所以即使umask 003,666-003 != 663,而是664(-rw-rw-rw-) - (--------wx) = -rw-rw-r--
也就是说,一开始建立的文件属性中还是不可能有x的

last, cut and sort example

将 last 的结果中,独立出账号,并且印出本月份曾经登入过的账号
last | cut -d " " -f1 | sort | uniq

关于路径搜寻的问题!为何不执行目前所在目录下的档案?

咦!刚刚不是提到『.』与『..』吗?那么那个『 . 』是干嘛用的?!眼尖的朋友应该已经发现了,就是『我在执行档案的时候,基本上,并不会主动搜寻目前目录下的档案』举个例子来说,我安装的 squid 这个执行档在 /usr/local/squid/bin/squid 这个档案,然而我在 /usr/local/squid/bin 下达 squid 的时候,系统会告诉你『查不到这个档案!』真是见鬼了!明明有这个档案的呀!这是因为系统预设的 PATH (路径)并没有执行目前目录下的设定,也就是『.』这个路径!你可以使用『 echo $PATH 』看看,就可以知道为什么了!那么为何不要设定这个路径呢?这是因为『安全』的考虑。由于系统预设是允许任何人在 /tmp 底下写入任何档案的, 那么万一有居心不良的使用者或者是 Cracker 入侵你的计算机,并在你的 /tmp 里头埋了一个小木马,并取名为 ls ,好了,改天你以 root 身份登入后,到 /tmp 底下,并执行 ls ,你看会有什么结果?!这个 /tmp/ls 由其它身份的人来执行或许没有问题,但是由 root 来执行却可能会导致 Cracker 所乐意见到的结果!那晓得为何了吧?!当然啰!您还是可以选择在 ~/.bashrc 当中设定你的 . 在你的 PATH 当中,不过并不这么建议就是了!


命令重导向里面几个常用的符号与装置

< :由 < 的右边读入参数档案;
> :将原本由屏幕输出的正确数据输出到 > 右边的 file ( 文件名称 ) 或 device ( 装置,如 printer )去;
>> :将原本由屏幕输出的正确数据输出到 >> 右边,与 > 不同的是,该档案将不会被覆盖,而新的数据将以『增加的方式』增加到该档案的最后面;
2> :将原本应该由屏幕输出的错误数据输出到 2> 的右边去。
/dev/null :可以说成是黑洞装置! [test @test test]# find / -name testing 1> list 2> list<==错误写法
[test @test tset]# find / -name testing 1> list 2>&1 <==正确写法
请特别留意这一点呢!同时写入同一个档案需要使用 2>&1 才对呦

基础的正则表达式特殊字符

  RE 字符意义与范例  ^word待搜寻的字符串(word)在行首!  范例:grep -n '^#' regular_express.txt
搜寻行首为 # 开始的那一行!  word$待搜寻的字符串(word)在行尾!  范例:grep -n '!$' regular_express.txt
将行尾为 ! 的那一行打印出来!  .代表『任意一个』字符,一定是一个任意字符!  范例:grep -n 'e.e' regular_express.txt
搜寻的字符串可以是 (eve) (eae) (eee) (e e), 但不能仅有 (ee) !亦即 e 与 e 中间『一定』仅有一个字符,而空格符也是字符!  \跳脱字符,将特殊符号的特殊意义去除!  范例:grep -n \' regular_express.txt
搜寻含有单引号 ' 的那一行!  *重复零个或多个的前一个 RE 字符  范例:grep -n 'ess*' regular_express.txt
找出含有 (es) (ess) (esss) 等等的字符串,注意,因为 * 可以是 0 个,所以 es 也是符合带搜寻字符串。另外,因为 * 为重复『前一个 RE 字符』的符号, 因此,在 * 之前必须要紧接着一个 RE 字符喔!例如任意字符则为 『.*』 !  \{n,m\}连续 n 到 m 个的『前一个 RE 字符』
若为 \{n\} 则是连续 n 个的前一个 RE 字符,
若是 \{n,\} 则是连续 n 个以上的前一个 RE 字符!  范例:grep -n 'go\{2,3\}g' regular_express.txt
在 g 与 g 之间有 2 个到 3 个的 o 存在的字符串,亦即 (goog)(gooog)  []字符集合的 RE 特殊字符的符号  [list]
范例:grep -n 'g[ld]' regular_express.txt
搜寻含有 (gl) 或 (gd) 的那一行~
需要特别留意的是,在 [] 当中『谨代表一个待搜寻的字符』,
例如: a[afl]y 代表搜寻的字符串可以是 aay, afy, aly
亦即 [afl] 代表 a 或 f 或 l 的意思!

[ch1-ch2]
范例:grep -n '[0-9]' regular_express.txt
搜寻含有任意数字的那一行!需特别留意,在字符集合 [] 中的减号 - 是有特殊意义的,他代表两个字符之间的所有连续字符!但这个连续与否与 ASCII 编码有关, 因此,您的编码需要设定正确(在 bash 当中,需要确定 LANG 与 LANGUAGE 的变量是否正确!) 例如所有大写字符则为 [A-Z]
[^]
范例:grep -n 'oo[^t]' regular_express.txt
搜寻的字符串可以是 (oog) (ood) 但不能是 (oot) ,那个 ^ 在 [] 内时, 代表的意义是『反向选择』的意思~例如,我不要大写字符,则为 [^A-Z] ~ 但是,需要特别注意的是,如果以 grep -n [^A-Z] regular_express.txt 来搜寻, 却发现该档案内的所有行都被列出,为什么?因为这个 [^A-Z] 是『非大写字符』的意思, 因为每一行均有非大写字符,例如第一行的 "Open Source" 就有 p,e,n,o.... 等等的小写字符, 以及双引号 (") 等字符,所以当然符合 [^A-Z] 的搜寻!
请特别留意的是,『正则表达式的特殊字符』 与一般在指令列输入指令的『万用字符』并不相同, 例如,在万用字符当中,* 代表的是 0 ~ 无限多个字符的意思,但是在正则表达式当中, * 则是重复 0 到多个的前一个 RE 字符的意思~使用的意义并不相同,不要搞混了!

学习shell script

shell中的变量

(1)常用系统变量
$# :保存程序命令行参数的数目
$? :保存前一个命令的返回码
$0 :保存程序名(script的名字)
$1,$2:第一、第二个参数
$* :以("$1 $2...")的形式保存所有输入的命令行参数
$@ :以("$1""$2"...)的形式保存所有输入的命令行参数
对谈式scripts:采用read从键盘读入参数
==============================================
cisco@ciscoserver:~/sky$ vi test.sh
# !bin/bash
# This program will define what is the parameters
# sky 2010/02/05
echo "This script's name => $0"
echo "parameters $1 $2 $3"
echo "parameters number =$#"
echo $?
echo $*
echo $@
==============================================
cisco@ciscoserver:~/sky$ ./test.sh pa1 pa2 pa3
This script's name => ./test.sh
parameters pa1 pa2 pa3
parameters number =3
0
pa1 pa2 pa3
pa1 pa2 pa3
==============================================

逻辑判断式

逻辑卷标
表示意思
1.关于档案与目录的侦测逻辑卷标!
-f
常用!侦测『档案』是否存在
-d
常用!侦测『目录』是否存在
-b
侦测是否为一个『 block 档案
-c
侦测是否为一个『 character 档案
-S
侦测是否为一个『 socket 标签档案
 -L
侦测是否为一个『 symbolic link 的档案
 -e
侦测『某个东西』是否存在!
2.关于程序的逻辑卷标!
-G
侦测是否由 GID 所执行的程序所拥有
-O
侦测是否由 UID 所执行的程序所拥有
-p
侦测是否为程序间传送信息的 name pipe 或是 FIFO (老实说,这个不太懂!)
3. 关于档案的属性侦测!
-r
侦测是否为可读的属性
-w
侦测是否为可以写入的属性
-x
侦测是否为可执行的属性
-s
侦测是否为『非空白档案
-u
侦测是否具有『 SUID 』的属性
-g
侦测是否具有『 SGID 』的属性
-k
侦测是否具有『 sticky bit 』的属性
4.两个档案之间的判断与比较 ;例如『 test file1 -nt file2
-nt
第一个档案比第二个档案新
-ot
第一个档案比第二个档案旧
-ef
第一个档案与第二个档案为同一个档案( link 之类的档案)
5.逻辑的『和(and)』『或(or)』
&&
逻辑的 AND 的意思
||
逻辑的 OR 的意思


运算符号简介

运算符号
代表意义
=
等于
!=
不等于
<
小于
>
大于
-eq
等于
-ne
不等于
-lt
小于
-gt
大于
-le
小于或等于
-ge
大于或等于
-a
双方都成立(and)
-o
单方成立(or)
-z
空字符串
-n
非空字符串

  • pwconv 这个指令有什么功能呢?
    答:
      pwconf 可以让 passwd 里面的账号,设定一份密码到 /etc/shadow 当中!





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 商铺厨房太热怎么办 农村自建房厨房卫生间怎么办 宾利车门不会开怎么办 两岁的宝宝好动怎么办 被别人坏了名声怎么办 在单位混臭了怎么办 在公司名声臭了怎么办 怀孕三个月吐的厉害怎么办 孕38周轻微贫血怎么办 孕38周中度贫血怎么办 孕38周贫血严重怎么办 孕38周有点贫血怎么办 脚被热水烫红了怎么办 学员练车撞死人怎么办 三胎意外来了该怎么办 因为飞机延误耽误行程怎么办 伤了朋友的心怎么办 羊蹄被绳子缠肿了怎么办 新老师教的不好怎么办 跟老公三观不合怎么办 突然有社保补扣怎么办 街头篮球篮板反应慢怎么办 换水了龙鱼顶缸怎么办 压着眼睛睡觉醒来模糊怎么办 天热眼睛有眼屎怎么办 眼睛里膜起来了怎么办 眼睛一边大一边小怎么办 眼白膜鼓起来了怎么办 主持问答环节没人提问怎么办 转学原学校不给怎么办 村长借东西不还怎么办 村长不上报建房申请怎么办 村长不上报建房手续申请怎么办 村长不给村民盖章怎么办? 找村干部办事难怎么办 洪洞县村长不给我盖章怎么办 睾丸穿刺取精只配到6个胚胎怎么办 孩子一只耳朵听不到声音怎么办 孕早期孕囊生长慢怎么办 试管2次不着床怎么办? pescm球员年龄大了怎么办