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

简介: 今天就来聊聊 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让这个项目一下子成了全世界最瞩目的项目。


微信图片_20220414214309.jpg


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


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


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


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


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


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


微信图片_20220414214440.jpg

微信图片_20220414214459.jpg

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


(1)使用逻辑短路操作

cd path && rm -rf *.exe


(2)检测 path 是否存在

[[ -d ~ ]] && echo 1

1


5、终极解决方案

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


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

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


微信图片_20220414214911.jpg

微信图片_20220414214914.jpg


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



目录
相关文章
|
6月前
|
存储 Linux Shell
Linux常见根目录详释
- **/home**:存放普通用户的主目录。 - **/root**:超级用户的主目录。 - **/tmp**:存放临时文件。 - **/mnt** 和 **/media**:用于挂载外部存储设备。 - **/boot**:存放启动Linux所需的文件,如内核。 - **/lib** 和 **/lib64**:存放系统运行时需要的库文件。 - **/opt**:存放第三方提供的可选软件包。 - **/srv**:存放服务数据,如Web服务器的数据。 这些目录构成了Linux文件系统的骨架,支持系统的正常运行和管理。
215 12
|
4月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
113 4
|
4月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
250 3
|
5月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
378 25
|
5月前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
85 18
|
7月前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
559 32
|
7月前
|
Unix Linux Shell
Linux新手入门手册
在Linux或类Unix系统中,掌握一系列基础命令和快捷键是提升工作效率的关键。这些工具和技巧不仅能帮助用户更高效地管理系统,还能在日常使用中带来极大的便利。以下是对这些基础操作与快捷键的详细解析大全。
126 9
|
9月前
|
负载均衡 Ubuntu 应用服务中间件
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
668 13
|
10月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
|
10月前
|
Unix Linux Shell
linux入门!
本文档介绍了Linux系统入门的基础知识,包括操作系统概述、CentOS系统的安装与远程连接、文件操作、目录结构、用户和用户组管理、权限管理、Shell基础、输入输出、压缩打包、文件传输、软件安装、文件查找、进程管理、定时任务和服务管理等内容。重点讲解了常见的命令和操作技巧,帮助初学者快速掌握Linux系统的基本使用方法。
609 3