老男孩儿-19期 L005-13节中分享。自己整理后发到自己微博中留档。
原文:http://oldboy.blog.51cto.com/2561410/699046
实例:老男孩linux实战培训第9期(10月22日)入学考试题第10题:
10.已知/tmp下已经存在test.txt文件,如何执行命令才能把/mnt/test.txt覆盖掉/tmp/test.txt而让系统不提示是否覆盖(root权限下)。
为了防止用户误操作,所以centos linux操作系统在设计时,默认执行cp的操作是调用了cp的别名(相当于执行cp -i)。所以提示覆盖。此题的思路就是要屏蔽掉系统别名。
详细说明:
cp命令默认是不会提示覆盖的,但是cp带-i参数执行时会提示,而Linux的起动文件~/.bashrc中会把cp命名成alias cp=‘cp -i‘ 如:
[[email protected] tmp]# alias |grep cp
alias cp=‘cp -i‘
实际测试(不过具体合不合规范还有深入学习后验证了,作为一个备选方法吧)
[[email protected] tmp]# alias cp
也同样会显示为alias cp=‘cp -i‘
这样在Linux下输入cp命令实际上运行的是cp -i,加上一个”\“;符号或者写cp全路径/bin/cp就是让此次的cp命令不使用别名(cp -i)运行。
此处涉及到alias和unalias两命令的用法,同时大家也想想别名的好处及怎么样利用这个特性为我们服务。
一些特殊的方法:
[[email protected] ~]# alias rm=‘echo "rm does not allow to be exec"‘
此方法可以迷惑没用过此服务器的人,使用rm就会提示rm不可以被执行。
自己使用时要在前面加根路径如/bin/rm 可以使用或者\rm,具体看上面。不过此种方法服务器重启后失效,永久的话具体看上面。
补充一下内容:
比如经常需要执行一个长命令,那么可以用别名来定义。
alias oldboy=‘cat etc/sysconfig/network-scripts/ifcfg-eth0’(查看网卡)
此后输入oldboy就可以直接执行cat etc/sysconfig/network-scripts/ifcfg-eth0的命令了,十分方便。