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

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

1

变量为空导致误删文件

base_path=/usr/sbintmp_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 11[[ -z ${tmp_file} ]] && echo 1      1

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

# cat a.shset -u b=echo $becho $aecho 1# bash a.sha.sh: line 4: a: unbound variable

2

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

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

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

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

path="/usr/local /sbin"# rm -rf $pathrm -rf "$path"

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

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

3

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

ll 总用量 8drwxrwxr-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 11

5

终极解决方案

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

6

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

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

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

原文来自:http://985.so/p2Z3

Linux命令大全:https://www.linuxcool.com/

官方站点:www.linuxprobe.com

 Linux命令大全:www.linuxcool.com

Linux系统下载站:www.linuxdown.com

刘遄老师QQ:5604922

Linux技术交流群:193666693

(新群,火热加群中……)

书籍在线学习(电脑阅读效果佳):

http://www.linuxprobe.com/chapter-00.html

想要学习Linux系统的读者可以点击按钮来了解书籍《Linux就该这么学》,同时也非常适合专业的运维人员阅读,成为辅助您工作的高价值工具书!

cmd 切换目录_Linux Shell从入门到删除根目录跑路指南相关推荐

  1. 根目录_Linux Shell从入门到删除根目录跑路指南

    2020年第一波薅当当网羊毛的机会,别错过! 来自:xrzs的博客 来源:https://my.oschina.net/leejun2005/blog/793916 shell 作为一门 linux ...

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

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

  3. linux系统如何退出根目录,Linux Shell 从入门到删除根目录跑路指南

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

  4. 数据库从入门到删库跑路(二) - - PL/SQL

    数据库从入门到删库跑路 - - PL/SQL 1.PL/SQL(Procedure Language & Structured Query Language) 定义:一种高级数据库程序设计语言 ...

  5. cmd切换目录(cmd切换目录失败)

    20分!vista系统cmd中怎么切换输入法? Vista命令提示符中不能切换为中文输入法?为什么我在vistaultimate下的命令提示符内不能切换到中文输入状态?(我是用"Ctrl+空 ...

  6. $Django redis内存数据库 (知识回顾cmd切换目录)

    知识小回顾 #切换盘 C:\Users\WangDong>f:F:\>#切换文件F:\>cd redisF:\redis>#返回上一级F:\DJ\dj8>cd ..F:\ ...

  7. cmd - 切换目录命令cd失效(切换目录失效)

    前言 具体不知道什么原因,cmd中切换命令无效,如以下命令: cd D:\ 结果: 然而并没有切换到D盘,经查阅资料得知,需要再次键入该路径所在盘符! 解决(再次键入该路径所在盘符) 当 cd 路径 ...

  8. windows下用cmd切换目录

    切换到盘符时(直接输入盘符名):> D: 切换到具体目录下 > cd blog/resource

  9. 记录:win10 cmd切换目录 切换到D盘

    若要切换盘,则需要加 \d 参数 若统一盘符,直接cd + 路径即可

最新文章

  1. 群雄逐鹿,谁将赢得5G时代的物联网战争?
  2. DELPHI - Delphi 2007 已内部支持 GIF 动画了
  3. python应用中调用spark_在python中使用pyspark读写Hive数据操作
  4. python中的del,remove,pop有什么区别
  5. 四、Delphi 2009 泛型容器单元(Generics.Collections)[3]: TStackT
  6. 《软件工艺师:专业、务实、自豪》一2.8 小结
  7. 【渝粤题库】广东开放大学 秘书实务 形成性考核
  8. 低代码发展专访系列之六:低代码平台能解决业务重构的问题么?
  9. java实现复制粘贴的计算器_软帝学院教你用java编写计算器(三)
  10. 用mel编写自定义节点的属性编辑器界面
  11. SQL优化-第二章-从解释计划层面让SQL飞
  12. 蓝桥杯2019年第十届C/C++省赛B组第四题-数的分解
  13. Java中按值传递与按引用传递的区别
  14. AT89C51的矩阵键盘、跑马灯和呼吸灯设计
  15. 2022年计算机软件水平考试信息系统管理工程师(中级)练习题及答案
  16. excel文件修复工具_Excel文件打开后出错,部分内容丢失的修复技巧
  17. 一步一步实现现代前端单元测试
  18. 项目管理工具dhtmlxGantt甘特图入门教程(八):数据加载(二)
  19. 鱼眼图像自监督深度估计原理分析和Omnidet核心代码解读
  20. C、c++ .h 头文件的作用

热门文章

  1. 多种冒泡算法时间和效率比较
  2. Linux中fdisk硬盘分区方法
  3. 背包学习————完全背包
  4. SMS短信的C语言代码摘抄
  5. 对线程与进程的区别以及对多线程并发的理解
  6. 快速傅里叶变换(FFT)详解
  7. iOS15字符串格式化缺0补0的写法
  8. 中超联赛提交函数的c语言,国家体育总局
  9. tcpdump抓两个网卡的包_tcpdump 抓包统计 分享助,请问用tcpdump抓包后,如何查看每个包...
  10. max导出fbx设置_真3D虚拟偶像制作教程——虚拟偶像人物模型导出前的处理