即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

Linux Shell从入门到删除根目录跑路指南

微信 Linux学习 38℃ 0评论

来自:xrzs的博客

链接:https://my.oschina.net/leejun2005/blog/793916(点击尾部阅读原文前往)

已获转载授权

shell 作为一门 linux 下使用广泛的系统语言,语法简单,上手容易,但是想要用好,少犯错误,也不是那么容易的一件事,可谓虽是居家旅行之良药,但也是杀人灭口之利器~

今天就来聊聊 linux 下一个常见的问题:如何避免误删目录。下文会详细的讲述不同的场景下误删目录,以及相应的解决方案。

1、变量为空导致误删文件

base_path=/usr/sbin

tmp_file=`cmd_invalid`

# rm -rf $base_path/$tmp_file

这种情况下如果 cmd 执行出错或者返回为空,后果将是灾难性的,那如何防范呢?


(1)利用 shell 的变量扩展功能,如果变量为空赋给默认值或者抛出异常退出脚本:

echo ${base_path:?var is empty}/${tmp_file:?var is empty}

-bash: tmp_file: var is empty


(2)人肉判断变量是否为空:

[[ ${tmp_file} == “” ]] && echo 1

1[[ -z ${tmp_file} ]] && echo 1      

1


(3)如果变量未定义还可以开启 set 选项

# cat a.sh

set -u 

b=

echo $b

echo $a

echo 1

# bash a.sh

a.sh: line 4: a: unbound variable

2、路径含有空格导致误删文件

史上最经典的要数下面这个bumblebee项目了,这个项目本来不出名,不过,程序在其安装脚本install.sh里的一个bug让这个项目一下子成了全世界最瞩目的项目。



那我们该如何防范这种问题呢?


(1)良好的编程习惯:变量加引号防止扩展

path=”/usr/local /sbin”

# rm -rf $path

rm -rf “$path”


(2)对变量进行语义检查

比如检测是否含有空格等特殊字符,不通用,不推荐这么做

3、目录或文件含有特殊字符导致误删文件


ll 

总用量 8

drwxrwxr-x 2 work work 4096 11月 24 18:57 ‘~’

-rw-rw-r– 1 work work   34 11月 24 19:49 a.sh

# rm -rf ~


那我们该如何防范这种问题呢?


(1)良好的编程习惯:变量加引号防止扩展

rm -rf “~”


(2)如果不确定,删除之前 echo 或 find 一下,看变量被扩展成啥了

echo rm -rf “~”

rm -rf ~

echo rm -rf ~ 

 rm -rf /home/work

4、cd 切换目录失败,导致文件被误删

cd ooxx_path_not_exsit 

rm -rf *.exe

恭喜这种情况下你的当前目录下匹配文件都会被误删,那我们该如何防范这种问题呢?


(1)使用逻辑短路操作

cd path && rm -rf *.exe


(2)检测 path 是否存在

[[ -d ~ ]] && echo 1

1

5、终极解决方案

不要使用 root 操作系统资源,这样至少不会删除系统文件。


6、在登录 shell 下使用友好的提示符


友好的命令提示符能时刻提醒操作者当前在哪个路径下,避免错误的路径下操作文件。



OK,本文到此就结束了,列举了一些常见的case和解决方案,希望能对大家有所启发


●本文编号198,以后想阅读这篇文章直接输入198即可。

●输入m可以获取到文章目录

推荐↓↓↓

 

猿哥

程序猿博主,坚持原创,传播编程学习经验

转载请注明:CodingBlog » Linux Shell从入门到删除根目录跑路指南

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情
(11)个小伙伴在吐槽
  1. 已删除
    火娃2017-02-28 03:46 回复
  2. 没讲如何跑路
    侯伟锋2017-02-28 03:54 回复
  3. 留言涉嫌违规,已删除
    逗你玩儿2017-02-28 03:54 回复
  4. 我就喜欢rm -rf回车后的那种摧枯拉朽的气势
    BT2017-02-28 03:57 回复
  5. 已删除(整个虚拟机)
    2017-02-28 04:01 回复
  6. 我在阿里云试过……
    NepNepNe2017-02-28 04:14 回复
  7. 成功达到删除目的/再见/再见/再见
    Alan2017-02-28 04:18 回复
  8. 没介绍跑路
    劍心2017-02-28 04:36 回复
  9. 重点是怎么跑路啊,删已经会了,哈哈/坏笑
    草帽小子2017-02-28 14:32 回复
  10. 重点是怎么跑路啊,好歹介绍下交通工具,如何躲避追捕啊
    不多想2017-03-02 08:52 回复
  11. rm rvf 看着更爽!直播你们摧毁的过程/阴险
    Laputa2017-03-07 11:19 回复