linux常见文件操作/sh命令问题处理

1.shell脚本不执行

  • 问题: bad interpreter: No such file or directory

  • 原因:这种问题一般是由于在windows下编写的脚本,然后在上传到linux服务器的引起的,原因是:在DOS/Windows里,文本文件的换行符为rn,而在nix系统里则为n,所以DOS/Windows里编辑过的文本文件到了nix里,每一行都多了个^M。

  • 解决方式有二:
    1)重新在linux下编写脚本;
    2)vi :% s/r//g :% s/^M//g (^M输入用Ctrl+v, Ctrl+m)
    附:sh -x 脚本文件名 ,可以单步执行并回显结果,有助于排查复杂脚本问题。

2.crontab输出结果控制

  • 问题:/var/spool/clientmqueue目录占用空间超过100G
  • 原因:cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了/var/spool/clientmqueue目录下的那些文件,日积月累可能撑破磁盘。
  • 解决:
    1)直接手动删除:ls |xargs rm -f ;
    2)彻底解决:在cron的自动执行语句后加上 >/dev/null 2>&1

3.telnet很慢 或者 ssh很慢

  • 问题:从A服务器pingB服务器响应很快,但是从A服务器telnet或者ssh到B服务器总是很慢。
  • 原因:此问题一般是namesever不起作用引起的。报错一般为because your PC doesn’t do a reverse DNS lookup on your IP then… when you telnet/ftp into your linux box, it’ll do a dns lookup on you.
  • 解决:
    1. 修改/etc/hosts使hostname和ip对应;
    2. 在/etc/resolv.conf注释掉nameserver或者找一个“活的”或者"有效的"nameserver

4.文件删了,但是磁盘空间没释放

  • 问题:使用 df -h显示某个分区的已用磁盘空间为90G,但是在该分区根目录下使用du -sh /*显示所有使用空间加起来才30G,两者不想等。

  • 原因:此问题一般是某个用户直接使用rm删除某个文件,但是该文件仍处于正在读或者正在写的状态,也就是文件仍处于被占用状态,导致文件删了但磁盘空间没释放的问题

  • 解决:
    1)最简单重启系统或者重启相关服务。
    2)干掉进程

[root@server ~]# /usr/sbin/lsof|grep deleted
ora    25575 data   33u      REG              65,65   4294983680  /oradata/DATAPRE/UNDOTBS009.dbf (deleted)

从lsof的输出中,我们可以发现pid为25575的进程持有着以文件描述号(fd)为 33打开的文件/oradata/DATAPRE/UNDOTBS009.dbf。在我们找到了这个文件之后可以通过结束进程的方式来释放被占用的空 间:echo > /proc/25575/fd/33
3)删除正在写的文件一般用 cat /dev/null > file

5.find文件提升性能

  • 问题:在tmp目录下有大量包含picture_*的临时文件,每天晚上2:30对一天前的文件进行清理。之前在crontab下跑如下脚本,但是发现脚本效率很低,每次执行时负载猛涨,影响到其他服务。
_#!/bin/sh
find /tmp -name “picture_*” -mtime +1 -exec rm -f {} ;
  • 原因:目录下有大量文件,用find很耗资源。
  • 解决:
#!/bin/sh
cd /tmp
time=`date -d “2 day ago” “+%b %d”`
ls -l|grep “picture” |grep “$time”|awk ‘{print $NF}’|xargs rm -rf

6.too many open file

  • 问题:报too many open file错误

  • 原因:此问题一般是由于已打开的文件超出linux系统的最大打开文件限制导致的。

  • 解决:终极解决方案

    echo “” >> /etc/security/limits.conf
    echo “*                soft   nproc          65535″ >>  /etc/security/limits.conf
    echo “*                hard   nproc          65535″ >>  /etc/security/limits.conf
    echo “*                soft   nofile         65535″ >>  /etc/security/limits.conf
    echo “*                hard   nofile         65535″ >>  /etc/security/limits.conf
    echo “” >> /root/.bash_profile
    echo “ulimit-n   65535″ >> /root/.bash_profile
    echo “ulimit  -u   65535″ >> /root/.bash_profile
    

    最后重启机器 或者执行 ulimit -u 655345 && ulimit -n 65535

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值