2018-11-7直播课笔记

1、cut命令

主要掌握,-d、-f、-c参数,

-c参数:-cn截取第n个字符;-c-n截取第一个掉第n个字符;-cn-截取第n个到最后一个字符。

2、sort命令

常用参数:-n、-r、-k、-t

指定分隔符第几段排序用-t和-k

[root@liang-00 test]# sort -t: -k5 /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
liang:x:1000:1000::/home/liang:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

3、wc命令

常用参数有:-l、-m、-w、-L

其中 -L 选项为统计字符串长度,与-m区别在于不统计$换行符。

用wc -l 给一个变量赋值时不能直接n=`wc -l filename` ,因为 wc -l 的结果是有两段组成,这是我们就可以用awk截取。

4、uniq命令

一般与sort结合一起用。

5、tee命令

写入文件,且打印到屏幕上。

6、tr命令

替换字符命令

7、split命令

切割文档,常用参数:-b、-l,也可以定义切割后文件的前缀。

 

8、Shell特殊符号

$--正则表达式中表示结尾。

;多个命令写到一行。

|| 和&& 逻辑判断。

8、echo 显示颜色

shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 
格式如下: 

echo -e "\033[字背景颜色;文字颜色m 字符串 \033[0m" 

9、fork、source和exec 

 fork ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令,在子命令执行完后再执行父级命令。子级的环境变量不会影响到父级。 

 exec (exec /directory/script.sh):执行子级的命令后,不再执行父级命令。

 source (source /directory/script.sh):执行子级命令后继续执行父级命令,同时子级设置的环境变量会影响到父级的环境变量。

实验:
[root@liang-00 test]# cat 2.sh 
#!/bin/bash
echo "children script PID is $$"
echo "now to children script."
export a=2
echo "in children, a=$a"

 

[root@liang-00 test]# cat source.sh 
#!/bin/bash
echo "father script PID is $$"
echo "father script, set a is 1"
export a=1
echo  "it will source ./2.sh"
source ./2.sh
echo "now to father script."
echo "father script, a is $a"

 

[root@liang-00 test]# cat exec.sh 
#!/bin/bash
echo "father script PID is $$"
echo "father script, set a is 1"
export a=1
echo "it will exec ./2.sh"
exec ./2.sh
echo "father script, a is $a"

sh source.sh文件后结果为:在source.sh中执行了2.sh文件后继续执行source.sh,且把原来source.sh文件中的环境变量 a=1 变成了2.sh中的 a=2 了。

 

sh exec.sh文件的结果为:在exec.sh文件中执行2.sh文件后并没有继续执行exec.sh,且把原来exec.sh文件中的环境变量 a=1 变成了2.sh中的 a=2 了。

10、简易审计系统

1.mkdir -p /usr/local/domob/records/
 
  chmod 777 /usr/local/domob/records/
 
  chmod +t /usr/local/domob/records/
 
2.vi /etc/profile 在最后添加下面的代码
 

if [ ! -d  /usr/local/domob/records/${LOGNAME} ]
 
then
 
mkdir -p /usr/local/domob/records/${LOGNAME}
 
chmod 300 /usr/local/domob/records/${LOGNAME}
 
fi
 
export HISTORY_FILE="/usr/local/domob/records/${LOGNAME}/bash_history"
 
export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'

关于变量:PROMPT_COMMAND

 

PROMPT_COMMAND:在执行一条命令之前就会先执行 $PROMPT_COMMAND

 

以上案例中的各条命令的意思:

date:系统日期时间显示

[root@liang-00 test]# date
Thu Nov  8 16:51:37 CST 2018
[root@liang-00 test]# date "+%Y-%m-%d %T"
2018-11-08 16:51:56
[root@liang-00 test]# 

$(who am i |awk "{print \$1\" \"\$2\" \"\$5}")

who am i 命令

[root@liang-00 test]# who am i
root     pts/0        2018-11-08 16:17 (192.168.37.1)

awd后的内容为截取1、3、5段内容。

$(history 1 | { read x cmd; echo "$cmd"; })

history 1命令 

命令历史的最后一条命令

[root@liang-00 test]# history 1
 1857  history 1

 

11、关于排序出现的小问题

在对文件内容排序时出现的不按 ASCII 码顺序排的,需要把变量 LC_ALL 赋值为 C,即:LC_ALL=C。

 

转载于:https://my.oschina.net/u/3993922/blog/2873741

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值