第二章:准备工作
实验环境准备
例如:
最小化安装CentOS 7
Xshell
配置vim
语法高亮
export $TERM=xterm
显示行号
:set number
关闭行号
:set nonumber
查看vim相关信息
vim --version
vim系统配置文件
vim /etc/vimrc
vim的背景色
:set background?
:set background=light
:set background=dark
配色方案
ls /usr/share/vim/vim74/colors/
blue.vim delek.vim evening.vim murphy.vim README.txt slate.vim
darkblue.vim desert.vim koehler.vim pablo.vim ron.vim torte.vim
default.vim elflord.vim morning.vim peachpuff.vim shine.vim zellner.vim
热身脚本1
# 清除
# 以root身份来运行
cd /var/log
cat /dev/null > messages
cat /dev/null > wtmp
echo "Logs cleared up!"
在vim中新开一个bash shell
:!bash
在新开的bash中执行并查看效果
[root@test test]# vim 1.sh
[root@test test]# sh 1.sh
Logs cleared up!
[root@test test]# ls -l /var/log/messages
-rw-------. 1 root root 0 May 30 11:04 /var/log/messages
[root@test test]# ls -l /var/log/wtmp
-rw-rw-r--. 1 root utmp 0 May 30 11:04 /var/log/wtmp
[root@test test]# exit
exit
Press ENTER or type command to continue
学而不思则罔
这两个日志文件是做什么的?
wtmp这个文件名,是什么意思?
为什么用cat /dev/null > 来清除日志?
可以保留文件的属性
可以把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失.
如果不是root用户执行这个脚本,如何控制错误信息?
执行脚本的方法
方法一
sh ScriptName
或
bash ScriptName
方法二
chmod 555 ScriptName
或
chmod +rx ScriptNmae
或
chmod u+rx ScriptName
./ScriptName
热身脚本2
在脚本1的基础上进行修改,对日志的路径使用了变量
#!/bin/bash
# 一个Bash脚本正确的开头部分
# 清除 v2
# 以root身份来运行这个脚本
# 以后,在这个地方增加一个逻辑:
# 如果不是root用户执行本脚本,会自定义的错误提示。然后退出
# 如果使用变量,更加灵活、优雅
LOG_DIR=/var/log
cd $LOG_DIR
cat /dev/null > messages
cat /dev/null > wtmp
echo "Logs cleared up!"
exit # 这个命令是一种正确、合适的退出的办法
# 不带任何参数的exit,将返回推出的状态码
热身脚本3
#!/bin/bash
# 清除 v3
# 说明:这个脚本有好多新的特性,现在先有一个初步的印象
# 以后再详细说
LOG_DIR=/var/log
ROOT_UID=0 # $UID为0时,用户都有root的权限
LINES=50 # 默认的保存的行数
E_XCD=66 # 退出代码,表示不能修改目录位置
E_NOROOT=67 # 退出代码,表示不是root用户
# 判断是否以root身份来运行本脚本
if [ "$UID" -ne "$ROOT_UID" ] # -ne表示不等于
then
echo "Must be root run this script!"
exit $E_NOROOT
fi
# 测试是否给这个脚本传递有参数(非空)
if [ -n "$1" ]
then
lines=$1
else
lines=$LINES # 如果没有在命令中指定,就使用默认值
fi
cd $LOG_DIR
# 在处理log file之前,先确认当前目录是否正确
# 如果不在/var/log目录中,返回退出码66
if [ `pwd` != "$LOG_DIR" ] # 或 if [ "$PWD" !="$LOG_DIR" ]
then
echo "Can't change $LOG_DIR!"
exit $E_XCD
fi
# 保留messages文件中的最后部分,而不是全部清除
tail -$lines messages > mesg.tmp
mv mesg.tmp messages
# 旧的办法,不在需要了。新的办法更加安全吗?
# cat /dev/null > messages
cat /dev/null > wtmp
echo "Logs cleared up"
exit 0
# 退出时返回0,0表示成功
作业一
编写一个脚本,要求:
显示时间和日期
列出所有登录的用户
显示系统已运行的时间
将上述信息保存到一个日志文件
#!/bin/bash
LOG_FILE=/tmp/0-lab1.log
date
w
uptime
echo "" >> $LOG_FILE
date >> $LOG_FILE
w >> $LOG_FILE
uptime >> $LOG_FILE
#!/bin/bash
# 说明:这是一个练习date的脚本
echo "The number of days since the year's beginning is `date +%j`."
# +%j 用来给出今天是本年度的第几天
# 注意不要少了+号
echo "The number of seconds elapsed since 1970/07/01 is `date +%s`."
# +%s 将输出从UNIX 元年到现在为止的秒数
PREFIX=temp
SUFFIX=$(date +%s)
FILENAME=$PREFIX.$SUFFIX
echo $FILENAME
# 这是一个常用的非常好用的办法来生成“唯一”临时文件的方法
# 但是,如果在一秒内需要有多个临时文件呢?
# 但是,总是要比用$$好一些
exit 0

浙公网安备 33010602011771号