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

简介:

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

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

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


  
  
  1. base_path=/usr/sbin 
  2. tmp_file=`cmd_invalid` 
  3. # rm -rf $base_path/$tmp_file 

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

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


  
  
  1. echo ${base_path:?var is empty}/${tmp_file:?var is empty}  
  2. -bash: tmp_file: var is empty 

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


  
  
  1. [[ ${tmp_file} == "" ]] && echo 1 
  2. [[ -z ${tmp_file} ]] && echo 1 

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


  
  
  1. # cat a.sh 
  2. set -u 
  3. b= 
  4. echo $b 
  5. echo $a 
  6. echo 1 
  7. # bash a.sh 
  8. a.sh: line 4: a: unbound variable 

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

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

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

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


  
  
  1. path="/usr/local /sbin"  
  2. # rm -rf $path  
  3. rm -rf "$path" 

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

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

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


  
  
  1. ll  
  2. 总用量 8  
  3. drwxrwxr-x 2 work work 4096 11月 24 18:57 '~'  
  4. -rw-rw-r-- 1 work work 34 11月 24 19:49 a.sh  
  5. # rm -rf ~ 

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

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


  
  
  1. rm -rf "~" 

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


  
  
  1. echo rm -rf "~"  
  2. rm -rf ~  
  3. echo rm -rf ~  
  4. rm -rf /home/work 

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


  
  
  1. cd ooxx_path_not_exsit  
  2. rm -rf *.exe 

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

(1)使用逻辑短路操作


  
  
  1. cd path && rm -rf *.exe 

(2)检测 path 是否存在


  
  
  1. [[ -d ~ ]] && echo 1  

5、终极解决方案

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

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

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

OK,本文到此就结束了,列举了一些常见的case和解决方案,希望能对大家有所启发,如果有其他的 case 和建议也欢迎交流~





本文作者:佚名
来源:51CTO

目录
相关文章
|
1月前
|
负载均衡 Ubuntu 应用服务中间件
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
109 13
|
2月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
55 0
Linux 如何更改默认 Shell
|
2月前
|
Unix Linux Shell
linux入门!
本文档介绍了Linux系统入门的基础知识,包括操作系统概述、CentOS系统的安装与远程连接、文件操作、目录结构、用户和用户组管理、权限管理、Shell基础、输入输出、压缩打包、文件传输、软件安装、文件查找、进程管理、定时任务和服务管理等内容。重点讲解了常见的命令和操作技巧,帮助初学者快速掌握Linux系统的基本使用方法。
116 3
|
3月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
92 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
2月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
3月前
|
机器学习/深度学习 Linux 编译器
Linux入门3——vim的简单使用
Linux入门3——vim的简单使用
72 1
|
3月前
|
Linux Shell Windows
Linux入门1——初识Linux指令
Linux入门1——初识Linux指令
42 0
Linux入门1——初识Linux指令
|
4月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
存储 数据可视化 Linux
Linux 基础入门
Linux 基础入门
|
3月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
48 0