关于linux命令 cp,rm,mv执行时是否询问的问题,不同用户有不同的别名设置
三种命令的详细参考以下连接
http://c.biancheng.net/view/746.html
http://c.biancheng.net/view/744.html
http://c.biancheng.net/view/749.html
个人在不使用任何选项执行cp命令的时候,如果目标文件已经存在,有时会询问是否覆盖,而有时不会询问。
感到比较困惑,特意调查了一下。原来是因为执行用户的原因
当使用普通用于执行时不会询问,而使用超级用户root执行时会询问,这是因为两者别名的设置不同,如下所示
普通用户
[vagrant@localhost test1]$ alias alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
超级用户别名
[vagrant@localhost test1]$ sudo su [root@localhost test1]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
可以看出,普通用户执行cp时,因为没有设置别名,所以默认是没有选项的,所以不会询问
而超级用户执行cp时,因为设置了别名 alias cp='cp -i' ,所以默认是带 -i 选项的,所以会询问
同样,rm和mv命令也是如此
那么如何在使用root用户执行脚本中的cp命令不询问呢,可以在脚本中使用unalias命令删除别名
unalias cp
在代码中使用 alias 命令定义的别名只能在当前 Shell 进程中使用,在子进程和其它进程中都不能使用。当前 Shell 进程结束后,别名也随之消失。
同样,代码中使用 unalias 命令删除的别名也只能在当前 Shell 进程中使用,在子进程和其它进程中都不能使用。
测试
[root@localhost test1]# cp text2.txt text1.txt //进程1,root用户 cp: overwrite ‘text1.txt’? y //询问是否覆盖 [root@localhost test1]# bash //创建进程2(子进程) [root@localhost test1]# cp text2.txt text1.txt cp: overwrite ‘text1.txt’? y [root@localhost test1]# unalias cp //删除别名 [root@localhost test1]# cp text2.txt text1.txt //当前进程中没有询问,因为删除了别名 [root@localhost test1]# bash //在子进程2中再创建子进程3 [root@localhost test1]# cp text2.txt text1.txt cp: overwrite ‘text1.txt’? y //在子进程3中发生了询问,可见在父进程2中删除了别名在子进程3中无效 [root@localhost test1]# exit //退出子进程3,返回子进程2 exit [root@localhost test1]# cp text2.txt text1.txt [root@localhost test1]# exit //退出子进程2,返回进程1 exit [root@localhost test1]# cp text2.txt text1.txt //发生询问,可见在子进程中删除别名对父进程无效 cp: overwrite ‘text1.txt’?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)