第二章:准备工作

实验环境准备

例如:

最小化安装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

https://vimcolors.org/

热身脚本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

 

posted @ 2022-05-30 16:56  CharlieBrown  阅读(28)  评论(0)    收藏  举报
标题