面试杂记1

1. 关于/tmp临时文件的理解

/tmp 下的文件在每次关机后都会被清理干净,若想手动清理,清理的时候不推荐使用rm -rf命令,这样有时会引起程序的僵死。推荐使用tmpwatch命令来进行清理。

tmpwatch简介:tmpwatch 工具从指定的目录中递归地搜索,并删除在指定时间段内没有被访问的文件。tmpwatch 一般被用来清扫那些用来临时驻留文件的目录(譬如,/tmp)tmpwatch 忽略符号链接,它不会切换文件系统,而且只删除空目录和常规文件。

tmpwatch语 法:tmpwatch [-afqv][--test][超期时间][目录...]

tmpwatch参数说明:

-a或--all  删除任何类型的文件。

-f或--force  强制删除文件或目录,其效果类似rm指令的"-f"参数。

-q或--quiet  不显示指令执行过程。

-v或--verbose  详细显示指令执行过程。

-test  仅作测试,并不真的删除文件或目录

实例:sudo /usr/sbin/tmpwatch -afv 3 /tmp (清除/tmp下三小时以内没有使用的文件,并将结果输出)。

2. cp拷贝命令的 -f参数含义为什么?

强制覆盖

3. shell脚本之shift和getopts

很多脚本执行的时候我们并不知道后面参数的个数,但可以使用$*来获取所有参数。但在程序处理的过程中有时需要逐个的将$1、$2、$3……$n进行处理,shift命令的作用就是在执行完$1后,将$2变为$1,$3变为$2,依次类推。

位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。

如下,可以自己运行看一下效果:
vim testshift.sh

#!/bin/bash
count=1
until [ $# -eq 0 ]
do
        echo "第 ${count} 个参数为: $1 参数个数为: $#"
        shift
        count=`expr $count + 1`
done

以上程序运行结果

[root@original ~]# ./testshift.sh 1 2 3 4 5 6

第 1 个参数为: 1 参数个数为: 6
第 2 个参数为: 2 参数个数为: 5
第 3 个参数为: 3 参数个数为: 4
第 4 个参数为: 4 参数个数为: 3
第 5 个参数为: 5 参数个数为: 2
第 6 个参数为: 6 参数个数为: 1

当在shift后面添加一个数字,比如2,则运行结果如下:

[root@original ~]# ./testshift.sh 1 2 3 4 5 6

第 1 个参数为: 1 参数个数为: 6
第 2 个参数为: 3 参数个数为: 4
第 3 个参数为: 5 参数个数为: 2

在上边的程序中,要注意until [ $# -eq 0 ]这个结束条件,如果shift 2但是传递的参数是奇数个的话就会一直循环下去

对传递的参数进行求和:

if [ $# -eq 0 ]
then
echo "Usage:x_shift2.sh 参数"
exit 1
fi
sum=0
until [ $# -eq 0 ]
do
sum=`expr $sum + $1`
shift
done
echo "sum is: $sum"

4、遍历目录中的文件并且提取最后一行的数值进行加法运算得到最后的结果,不知道文件有多少行,但是最后一行的格式是一样的(如total: 123)

#!/bin/bash
total=0
function count(){
  for file in `ls $1`
    do
    echo $1$file
    if [  -f "$1${file}" ]
      then
      price=`tail -n 1 "$1${file}" | awk '{print $2}'`
      total=`expr $total + $price`
    else
      echo ${file} "is directory!"
      count "$1${file}/"
    fi
done
}

count $1
echo "The total price is: "$total

从文件中读取数据:

read number <data.txt

for 循环读取文件的每一个字段:

#!/bin/bash

FILENAME=$1
function  viewFile(){
  for line  in  `cat $FILENAME`
    do
     echo $line
    done
}

大小写转换

[root@original ~]# echo 'halo' | tr 'a-z' 'A-Z'
HALO
[root@original ~]# name="lockey";typeset -u name;echo $name
LOCKEY
[root@original ~]# name="LOCKEY";typeset -l name;echo $name
lockey

while逐行读取:

#!/bin/bash

FILENAME=$1
cat $FILENAME | while read LINE
do
echo $LINE
done

假如在当前面目录下有1.txt和2.txt,现在我们把它输出到halo,具体为:

find  ./ -name  "*.txt" | xargs cat > halo

5、普通用户免密切换到超级用户

vim /etc/pam.d/su

将第4行的#号去掉,然后将登陆用户加入 wheel组

[root@ok ok]# usermod -G wheel ok
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值