面试杂记1

来源:互联网 发布:永磁旋振治疗仪淘宝 编辑:程序博客网 时间:2024/06/10 20:49

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/bashcount=1until [ $# -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 ]thenecho "Usage:x_shift2.sh 参数"exit 1fisum=0until [ $# -eq 0 ]dosum=`expr $sum + $1`shiftdoneecho "sum is: $sum"

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

#!/bin/bashtotal=0function 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}/"    fidone}count $1echo "The total price is: "$total

从文件中读取数据:

read number <data.txt

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

#!/bin/bashFILENAME=$1function  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 $nameLOCKEY[root@original ~]# name="LOCKEY";typeset -l name;echo $namelockey

while逐行读取:

#!/bin/bashFILENAME=$1cat $FILENAME | while read LINEdoecho $LINEdone

假如在当前面目录下有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
原创粉丝点击