在讲环境变量之前先介绍一个命令 which
, 它用来查找某个命令的绝对路径。
[root@localhost ~]# which rmdir
/bin/rmdir
[root@localhost ~]# which rm
alias rm='rm -i'
/bin/rm
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/bin/ls
‘rm’ 和 ‘ls’ 是两个特殊的命令,使用 alias
命令做了别名。我们用的 ‘rm’ 实际上是 ‘rm -i’ 加上 ‘-i’ 选项后,删除文件或者命令时都会问一下是否确定要删除,这样做比较安全。 ‘alias’ 可以设置命令的别名也可以设置文件的别名,会在以后章节中详细介绍。 ‘which’ 这个命令平时只用来查询某个命令的绝对路径,不常使用。
上边提到了alias,也提到了绝对路径的/bin/rm ,然后你意识到没有,为什么我们输入很多命令时是直接打出了命令,而没有去使用这些命令的绝对路径?这是因为环境变量PATH在起作用了。请输入 echo $PATH,这里的echo其实就是打印的意思,而PATH前面的$表示后面接的是变量。
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
因为/bin 在PATH的设定中,所以自然就可以找到ls了。如果你将 ls 移动到 /root 底下的话,然后你自己本身也在 /root 底下,但是当你执行 ls 的时候,他就是不理你?怎么办?这是因为 PATH 没有 /root 这个目录,而你又将 ls 移动到 /root 底下了,自然系统就找不到可执行文件了,因此就会告诉你 ‘command not found!’
[root@localhost ~]# mv /bin/ls /root/
[root@localhost ~]# ls
-bash: /bin/ls: 没有那个文件或目录
‘mv’ 用来移动目录或者文件,还可以重命名,稍后讲解。
那么该怎么克服这种问题呢?有两个方法,一种方法是直接将 /root 的路径加入 $PATH 当中!如何增加?可以使用命令 PATH=$PATH:/root
:
[root@localhost ~]# PATH=$PATH:/root
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog ls
另一种方法就是使用绝对路径:
[root@localhost ~]# /root/ls
anaconda-ks.cfg install.log install.log.syslog ls
命令: cp
copy的简写,即拷贝。格式为 cp
,例如我想把test1 拷贝成test2 ,这样即可 cp test1 test2,以下介绍几个常用的选项:
[选项] [ 来源文件 ] [目的文件]
-r : 如果你要拷贝一个目录,必须要加-r选项,否则你是拷贝不了目录的, 和 ‘rm’ 类似。
[root@localhost ~]# mkdir 123
[root@localhost ~]# cp 123 456
cp: 略过目录'123'
[root@localhost ~]# cp -r 123 456
[root@localhost ~]# ls -l
总用量 44
drwxr-xr-x. 2 root root 4096 5月 10 04:05 123
drwxr-xr-x. 2 root root 4096 5月 10 04:05 456
-i : 安全选项,和 ‘rm’ 类似,如果遇到一个存在的文件,会问是否覆盖。在Redhat/CentOS系统中,我们使用的cp其实是cp -i
[root@localhost ~]# which cp
alias cp='cp -i'
/bin/cp
下面简单做一个小试验,很快你就会明白-i 选项的作用了。
[root@localhost ~]# cd 123
[root@localhost 123]# ls
[root@localhost 123]# touch 111
[root@localhost 123]# touch 222
[root@localhost 123]# cp -i 111 222
cp:是否覆盖 '222'? n
[root@localhost 123]# echo 'abc' > 111
[root@localhost 123]# echo 'def' > 222
[root@localhost 123]# cat 111 222
abc
def
[root@localhost 123]# /bin/cp 111 222
[root@localhost 123]# cat 111
abc
[root@localhost 123]# cat 222
abc
例子中的 ‘touch’ 看字面意思就是 ‘摸一下’,没错,如果有这个文件,则会改变文件的访问时间,如果没有这个文件就会创建这个文件。前面说过 ‘echo’ 用来打印,在这里所echo的内容 ‘abc’ 和 ‘def’ 并没有显示在屏幕上,而是分别写进了文件 111和222, 其写入作用的就是这个大于号 ‘>’ 在linux中这叫做重定向,即把前面产生的输出写入到后面的文件中。在以后的章节中会做详细介绍,这里你要明白它的含义即可。而 ‘cat’ 命令则是读一个文件,并把读出的内容打印到当前屏幕上。该命令也会在后续章节中详细介绍。
命令: mv
‘mv’ 是move的简写。格式为 mv[ 选项 ][源文件] [目标文件]
下面介绍几个常用的选项。
-i : 和cp的-i 一样,当目标文件存在时会问用户是否要覆盖。在Redhat/CentOS系统中,我们使用的mv其实是mv -i
该命令有几种情况:
1) 目标文件是目录,而且目标文件不存在;
2) 目标文件是目录,而且目标文件存在;
3) 目标文件不是目录不存在;
4) 目标文件不是目录存在;
目标文件是目录,存在和不存在,移动的结果是不一样的,如果存在,则会把源文件移动到目标文件目录中。否则,就直接移动了,相当于重命名。这样说也许你会觉得有点不好理解,看例子吧。
[root@localhost ~]# mkdir dira dirb
[root@localhost ~]# ls
anaconda-ks.cfg dira dirb install.log install.log.syslog
[root@localhost ~]# mv dira dirc
[root@localhost ~]# ls
anaconda-ks.cfg dirb dirc install.log install.log.syslog
目标文件为目录,并且目标目录不存在,相当于把 ‘dira’ 重命名为 ‘dirc’.
[root@localhost ~]# mv dirc dirb
[root@localhost ~]# ls
anaconda-ks.cfg dirb install.log install.log.syslog
[root@localhost ~]# ls dirb
dirc
目标文件为目录,且目标目录存在,则会把 ‘dirc’ 移动到 ‘dirb’ 目录里。
[root@localhost ~]# touch filed
[root@localhost ~]# ls
anaconda-ks.cfg dirb filed install.log install.log.syslog
[root@localhost ~]# mv filed filee
[root@localhost ~]# ls
anaconda-ks.cfg dirb filee install.log install.log.syslog
[root@localhost ~]# mv filee dirb
[root@localhost ~]# ls
anaconda-ks.cfg dirb install.log install.log.syslog
[root@localhost ~]# ls dirb
dirc filee
目标文件不是目录,且不存在,则会重命名文件。
暂无评论内容