java shell spool_Linux的shell编程前奏常见命令实战一

Linux的shell编程前奏常见命令实战一

前言: linux中命令的一般形式为:命令  [参数] [路径文件]。参数其实就相当于面向对象语言java中的方法的重载一样,即我实现一个行为有多种方法,每一种方法都需要必要的工具条件,可以把这些参数想象成这些参数。路径文件就相当于做一件事情你要指向的目标。做运维的原则简单,易用高效。本文涉及到的shell编程基础命令有man,touch,ls,mkdir,cp,cd,rm,mv,echo,pwd,cat.alias,unalias,head,tail,tree,rmdir。中级命令有xargs,find,awk,sed,grep,vi,vim,seq。

1>创建一个目录/data,在/data下面建立一个文件oldboy.txt,为oldboy.txt文件增加内容"I am studying linux"[root@lll3 /]# mkdir /data

[root@lll3 /]# cd /data;touch oldboy.txt            ------建立文本文件:touch /data/oldboy.txt         ;为多个命令的分隔符

[root@lll3 data]# echo "I amd studying linux" >> oldboy.txt     ------标准输出重定向:echo相当于java中system.out.println(''I am studying linux''),>>的指向为数据流向

------单行文本覆盖:>指向为数据流向(数据朝着箭头的方向流动)

2>用一个命令在oldboy.txt中同时增加三行内容:

"I am studying java"

"I am studying php"

"I am studying shell"。[root@lll3 data]# cat >>oldboy.txt<>文件名<

> I am studing java                                                                                 追加的内容

> I am studying php         EOF

> I am studying shell    ----EOF为标签对标识,可以用其它的成对代替。

> EOF

总结: 重定向:    

意思是将“数据传到其它地方”。将某个命令执行后本应该出现在屏幕上的数据,传输到其它地方。

执行命令时,这个命令可能会通过文件读入数据,经过处理之后,再将数据输出到屏幕。

>或1>          输出重定向: 把前面输出的东西输入到后面的文件中,会删除文件原有内容

>>或1>>     追加重定向: 把前面输出的东西追加到后面的文件中,不会删除文件原有内容

<

2>                错误重定向: 把错误信息输入到后面的文件中,会删除文件原有内容

2>>             错误追加重定向: 把错误信息输入到后面的文件中,不会删除文件原有内容

标准输入(stdin):代码为0,使用

标准输出(stdout):  代码为1,使用>或>>

标准错误(stderr):代码为2,使用2>或2>>

特殊:

2>&1 把标准错误重定向到标准输出

3>把oldboy.txt文件拷贝到/tmp下,把/data目录移动到/root下[root@lll3 data]# cp oldboy.txt /tmp   -----生产环境中一般先用cp命令拷贝备份一份,再删除;或者先用mv移动到/tmp下,然后等/tmp分区将要满时一次性删除

[root@lll3 data]# cd ..;mv /data /root/          -----..上级目录;.当前目录;-上一次目录;~家目录

4>进入root目录下的/data目录,删除oldboy.txt

[root@lll3 /]# cd /root/data/;rm -fr oldboy.txt   -----生产环境中一般先用cp命令拷贝备份一份,再删除

总结: 在脚本中删除文件或目录时生产环境的使用方法

A.和xargs搭配用法find . -type f -mtime +15 |xargs rm -f               ---删文件,15天以前

find . -type f -mtime +30 |xargs rm -fr      ---删目录,30天以前

B.使用find的-execfind /logs -type f -mtime +5 -exec rm {} \;        ---在logs目录下查找更改时间在5日以前的文件并删除他们

----{}find找到的内容

---- -exec到\;都是参数

----;是bash特殊的意义,就用反斜线转义

---find常用参数-type;-size;-mtime;-name

2a90f868e2be1078e4e1b5b937f6ccb8.png

5>已知文件oldboy.txt的内容为:

test

liyao

oldboy

请给出打印oldboy.txt内容时,不包含oldboy字符串的命令.

法一:

[root@lll3 /]# mkdir data;touch /data/oldboy.txt;cd /data;cat>>oldboy.txt<

> test

> liyao

> oldboy

> EOF

[root@lll3 data]# grep -v oldboy oldboy.txt    -----核心命令grep:过滤掉oldboy.txt中oldboy这个字符串,即显示除oldboy这行以外其它内容

test

liyao

总结:linux三剑客老三grep常用参数:-v是排除(按行)

法二:[root@lll3 data]# head -2 oldboy.txt                 ----显示文件头部-n行数

test

liyao

法三:[root@lll3 data]# sed /^oldboy/d oldboy.txt    -----把以oldby开头的删除(按行删除),^是以什么开头

test

liyao

总结:linux三剑客老二sed常用参数:-n取消默认输出,p是打印,-i直接修改文件内容(而不是输出到终端)

法四:[root@lll3 data]# awk /[^oldboy]/ oldboy.txt            ----[^oldboy] ^意思是非,即不是oldboy

test

liyao

总结:linux三剑客老大awk常用参数:-F指定分隔符显示几列,通过正则表达式取出你想要的内容

6>请用一条命令完成创建目录/oldboy/test,即创建/oldboy目录和/oldboy/test目录[root@lll3 /]# mkdir -p /oldboy/test/

[root@lll3 /]# tree oldboy/

oldboy/

└── test

1 directory, 0 files

总结:mkdir常用参数:-p强制递归创建目录

7>已知/tmp目录下已经存在了test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖

掉/tmp/test.txt,而让linux系统不提示是否覆盖(root权限下)

法一:root@lll3 /]# touch /tmp/test.txt;touch /mnt/test.txt;which cp         -----which后接命令表示查找该命令所在全路径,还可以whereis,locate,find

alias cp='cp -i'

/bin/cp

您在 /var/spool/mail/root 中有新邮件

[root@lll3 /]# /bin/cp /tmp/test.txt /mnt/

[root@lll3 /]# alias                                                                            ------查看系统中所有的别名

alias cp='cp -i'

alias egrep='egrep --color=auto'

alias fgrep='fgrep --color=auto'

alias grep='grep --color=auto'

alias l.='ls -d .* --color=auto'

alias ll='ls -l --color=auto'

alias ls='ls --color=auto'

alias mv='mv -i'

alias rm='rm -i'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

[root@lll3 ~]# cat ~/.bashrc------别名的位置

# .bashrc

# User specific aliases and functions

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

# Source global definitions

if [ -f /etc/bashrc ]; then

. /etc/bashrc

fi

总结: rm,mv,cp这些危险命令为何会有确认提示(用于保护措施防止误操作,另外一个把命令化繁为简)?

是因为系统中别名的作用,如使用cp时默认就是用cp -i参数,所以会有参数。  取消别名可以用unalias接命令。

定义永久别名可以在/etc/profile中定义。

8>只查看ett.txt文件里(100行)20到第30行的内容

法一:[root@lll3 tmp]# touch ett.txt;for ((i=1;i<=100;i++));do echo "$i">>ett.txt;done

[root@lll3 tmp]# head -30 ett.txt|tail -11             ----head显示文件前多少行,tail显示文件后多少行

20

21

22

23

24

25

26

27

28

29

30

法二:

[root@lll3 tmp]# touch ett.txt;seq 100 >> ett.txt

[root@lll3 tmp]# sed -n '20,30p' ett.txt

20

21

22

23

24

25

26

27

28

29

30

法三:

[root@lll3 tmp]# touch ett.txt;for i in {1..100};do echo "$i" >>ett.txt;done

[root@lll3 tmp]# awk 'NR==20,NR==30' ett.txt

20

21

22

23

24

25

26

27

28

29

30

法四:

[root@lll3 tmp]# touch ett.txt;i=1;while((i<=100));do echo "$i" >>ett.txt;((i++));done

[root@lll3 tmp]# awk '{if(NR>19&&NR<31) print $0}' ett.txt

20

21

22

23

24

25

26

27

28

29

30

总结:sed擅长行处理,awk擅长列处理

9>把系统中所有ett.txt文件中oldboylinux字符串替换成oldboywindows

[root@lll3 tmp]# echo "oldboylinux">ett.txt;cp ett.txt /opt/;cp ett.txt /etc/

cp:是否覆盖"/opt/ett.txt"? y

cp:是否覆盖"/etc/ett.txt"? y

[root@lll3 tmp]# sed -i s#oldboylinux#oldboywindows#g ett.txt

[root@lll3 tmp]# find / -type f -name "ett.txt"|xargs sed -i s#oldboylinux#oldboywindows#g

[root@lll3 tmp]# find / -type f -name "ett.txt"|xargs cat

oldboywindows

oldboywindows

oldboywindows

[root@lll3 tmp]# find / -type f -name "ett.txt"|xargs ls

/etc/ett.txt  /opt/ett.txt  /tmp/ett.txt

总结:secureCRT常用操作快捷键

ctrl+c 终止命令;

ctrl+d 跳出用户环境;

ctrl+a 到命令行行首;

ctrl+e 到命令行行尾;

ctrl+u 清除所在命令行;

一技之长,理财投资,写作思考  敬请关注“石林笔记”公众号或者扫我喲:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值