首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

运维工作中尤其需要注意的Linux命令

在Linux中有些命令可能功能强大,方便快捷,但是这些命令在测试环境中可以使用,在生产环境上则要慎之又慎,还有些命令本身就是危险的,运行前一定要三思。

工作中输入命令

举一个开源社区非常有名的因为空格造成惨痛教训的案例,开源项目叫bumblebee,这个项目本来不出名,不过程序在其安装脚本install.sh里的一个bug让这个项目一下子成了全世界最瞩目的项目,这个bug的fix如下:

@@ -348,7 +348,7 @@ case "$DISTRO" in

- rm -rf /usr /lib/nvidia-current/xorg/xorg

+ rm -rf /usr/lib/nvidia-current/xorg/xorg

如果仔细看,就会发现差别就是一个空格,这会导致非常严重的影响,下面我们来看看这些危险的命令。

1.rm -rf

对于这个命令最好的挽救措施就是备份,可能在有些环境中这类命令都是禁用的,但是不管如何,注意备份。

rm -rf /

rm -rf *

2.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 May 2 17:44 e.lst

-rw-r--r-- 1 ora11g dba 0 May 2 17:44 f.log

来比较通过11得到的文件个数。

[ora11g@rac1 test]$ ll *|wc -l

13

如果使用rm * 但是不小心多输入了一个点,来看看会删除多少文件,它会尝试删除用户目录下所有的文件。

[ora11g@rac1 test]$ ll .*|wc -l

63

其实通过上面的例子可以看出三个命令(ls –l *, ls -l .*, ls –l . *)的不同,rm只是触发的一种方式。

3.快捷命令“^”

首先来看这个命令的方便性。如果想查看文件名含有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之类的操作,你都不知道会有多大的危害。

对于细节尤其需要注意

4.find rm

大家经常结合多个命令来使用,但是有些命令结合容易出现问题。 如果想查找文件名还有.bak的文件,然后直接rm,可以参考如下的命令。

find / -type f -name "*.bak" |xargs rm -rf {}\

但是如果你没有指定搜索路径,结果不小心删除了很多不期望删除的文件,这种情况我们碰见过,代码都开发完了,结果为了删除一些临时文件,很多额外的文件都删除了。

5.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@rac1 test]$

[ora11g@rac1 test]$ ps -ef|grep ora_|grep -v grep |cut -c 9-15

18111

24706

24709

24714

24721

24739

但是话说回来,你需要保证有些进程必须不含有ora_,如果清掉了,也是很严重的问题。

6.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

结果发生了不期望发生的结果。

7.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脚本时尤其要注意。

文件管理繁琐而复杂,尤其需要注意

8.ifconfig –a6和ifconfig –a 6

就因为一个空格就会造成网络地址瞬间修改,如果是RAC,节点瞬间就会倒下。

小技能补充:需要注意的是,对于不熟悉以及不确定的环境,黑屏时先敲一下空格键,敲了回车键很可能会有致命问题,这也是我们需要具备的一种专业态度。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191103A0IL0Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券