一些极度危险的linux命令(r2笔记49天)
在linux中有些命令可能功能强大,方便快捷,但是这些命令在测试环境中有些可以用,但别在生产上挑战。有些命令一敲,可能你的职业生涯由此转折。
- 关于rm -rf
- 对于这个命令真没什么好说的,最好的挽救措施就是备份,可能在有些环境中这类命令都是禁用的,但是不管怎么样,注意备份。
rm -rf /
rm -rf *
- 关于 rm .*
这个命令比较容易犯错误,但是大家都比较容易忽视。简单举个例子。
列出当前目录下的文件,考虑删除
[ora11g@rac1 test]$ ll
total 4
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:20 a_1.dmp
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:20 a_2.dmp
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:20 a_3.dmp
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:20 a_4.dmp
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:34 a_55.dmp
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:20 a_5.dmp
-rw-r--r-- 1 ora11g dba 15 May 19 07:39 a.lst
-rw-r--r-- 1 ora11g dba 0 May 2 17:45 a.lst.bak
-rw-r--r-- 1 ora11g dba 0 May 2 17:44 b.log
-rw-r--r-- 1 ora11g dba 0 May 2 17:44 c.lst
-rw-r--r-- 1 ora11g dba 0 May 2 17:44 d.log
-rw-r--r-- 1 ora11g dba 0 May 2 17:44 e.lst
-rw-r--r-- 1 ora11g dba 0 May 2 17:44 f.log
来比较看看通过ll得到的文件个数
[ora11g@rac1 test]$ ll *|wc -l
13
如果使用rm * 但是不小心多敲了一个点,来看看会删除多少文件,它会尝试删除用户目录下所有的文件。
[ora11g@rac1 test]$ ll .*|wc -l
63
- 关于快捷命令^
先来看看这个命令的方便性。如果想查看文件名还有dmp的,然后又想查询文件名含有bak的
[ora11g@rac1 test]$ ls -lrt *dmp
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:20 a_5.dmp
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:20 a_3.dmp
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:20 a_2.dmp
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:20 a_1.dmp
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:20 a_4.dmp
-rw-r--r-- 1 ora11g dba 0 Jun 19 08:34 a_55.dmp
[ora11g@rac1 test]$ ^dmp^bak
ls -lrt *bak
-rw-r--r-- 1 ora11g dba 0 May 2 17:45 a.lst.bak
很快捷吧,但是两面性就出来了,如果你执行的是一个rm之类的操作,你都不知道倒底有多大的危害。
- find rm
大家经常结合多个命令来使用,但是有些命令结合就是容易出问题。 如果想查找文件名还有.bak的文件,然后直接rm,可以参考如下的命令
find / -type f -name "*.bak" |xargs rm -rf {}
但是如果你没有指定搜索路径,结果不小心删除了很多不期望删除的文件,这种情况我们碰见过,代码都开发完了,结果为了删除一些临时文件,很多额外的文件都删除了。
- ps kill
rm攻击力很强,kill也是,如果想删除oracle的一些进程,可以考虑如下的方式。
[ora11g@rac1 test]$ ps -ef|grep ora_
ora11g 18111 1 0 18:56 ? 00:00:00 ora_w000_TEST01
ora11g 18555 18365 0 19:16 pts/0 00:00:00 grep ora_
ora11g 24706 1 0 Jul27 ? 00:00:14 ora_pmon_TEST01
ora11g 24709 1 0 Jul27 ? 00:00:02 ora_psp0_TEST01
ora11g 24714 1 0 Jul27 ? 00:00:44 ora_vktm_TEST01
ora11g 24721 1 0 Jul27 ? 00:00:00 ora_gen0_TEST01
ora11g 24739 1 0 Jul27 ? 00:00:00 ora_diag_TEST01
ora11g 24741 1 0 Jul27 ? 00:00:00 ora_dbrm_TEST01
ora11g 24743 1 0 Jul27 ? 00:03:25 ora_dia0_TEST01
ora11g 24745 1 0 Jul27 ? 00:00:00 ora_mman_TEST01
ora11g 24747 1 0 Jul27 ? 00:00:19 ora_dbw0_TEST01
ora11g 24749 1 0 Jul27 ? 00:00:10 ora_lgwr_TEST01
ora11g 24751 1 0 Jul27 ? 00:01:33 ora_ckpt_TEST01
ora11g 24753 1 0 Jul27 ? 00:00:18 ora_smon_TEST01
ora11g 24755 1 0 Jul27 ? 00:00:00 ora_reco_TEST01
ora11g 24757 1 0 Jul27 ? 00:00:13 ora_mmon_TEST01
ora11g 24759 1 0 Jul27 ? 00:00:55 ora_mmnl_TEST01
ora11g 24778 1 0 Jul27 ? 00:00:01 ora_arc0_TEST01
ora11g 24780 1 0 Jul27 ? 00:00:11 ora_arc1_TEST01
ora11g 24782 1 0 Jul27 ? 00:00:03 ora_arc2_TEST01
ora11g 24784 1 0 Jul27 ? 00:00:03 ora_arc3_TEST01
ora11g 24789 1 0 Jul27 ? 00:00:00 ora_qmnc_TEST01
ora11g 24808 1 0 Jul27 ? 00:00:00 ora_q001_TEST01
ora11g 24925 1 0 Jul27 ? 00:00:00 ora_smco_TEST01
ora11g 29644 1 0 01:51 ? 00:00:00 ora_q000_TEST01
[ora11g@rac1 test]$
[ora11g@rac1 test]$ ps -ef|grep ora_|grep -v grep |cut -c 9-15
18111
24706
24709
24714
24721
24739
24741
24743
24745
24747
24749
24751
24753
24755
24757
24759
24778
24780
24782
24784
24789
24808
24925
29644
但是话说回来,你能保证有些进程一定不含有ora_,如果清掉了,也是很要命的问题。
- tr
这个命令一般视为sed的简化版,但是有些功能可能并不是你想要的。
比如我们创建一个文件,只有一行内容。
[ora11g@rac1 ~]$ cat a
this is a test for tr command, abc
然后我们想把abc替换为xyz
[ora11g@rac1 ~]$ cat a|tr "abc" "xyz"
this is x test for tr zommxnd, xyz
结果发生了不期望发生的结果。
- cat
cat这个命令本身没有什么问题,有一些快捷方式想快速建立文件,有些人使用如下的方式,可以直接使用重定向。
首先输出文件内容,有两行
[ora11g@rac1 ~]$ cat a
this is a test for tr command, abc
this a a test
然后快速创建文件
[ora11g@rac1 ~]$ cat > a
this is not a test
^C
[ora11g@rac1 ~]$ cat a
this is not a test
可以看到如果文件已经存在,会直接覆盖掉,这种类似的操作在写shell脚本中尤其要注意。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 第05期:Prometheus 数据查询(一)
- 技术分享 | MySQL 复制那点事 - Seconds_behind_Master 参数调查笔记
- 线程有多少种状态?Runnable 一定在执行任务吗?
- swift 中类(class)和结构体(struct)区别
- C语言三剑客之《C专家编程》一书精华提炼
- 前端必备技能:json-server全攻略
- 温故知新——Spring AOP(二)
- R语言中的偏最小二乘PLS回归算法
- R如何与Tableau集成分步指南
- 漏洞复现 | CVE‐2020‐5902踩坑记
- PCA图显示分组无差异,怎么办?
- 我接手了一个“垃圾”系统,全栈优化后将性能提升了350倍
- 用 eggnog-mapper 进行功能注释
- 将SAP C4C Custom BO使用ABSL编写的逻辑通过OData服务暴露出去
- Linux笔记(14)| 字符设备驱动基础入门(续)