当前位置: > shell编程 >

Bash Shell 使用环境--绝对路径与相对路径

时间:2014-11-01 10:32来源:linux.it.net.cn 作者:it

参考:鸟哥的Linux私房菜

========测试环境: CentOS 5.1;内核:2.6.18========

Bash shell 使用环境:绝对路径与相对路径

. 表示这个路径;
.. 表示上一层路径;
执行上一层目录的命令,可以使用 ../command; 上两层目录,使用 ../../command
使用相对路径可以方便的找到痛殴案件之间的依赖软件或者设置文件的关联性。

登陆消息显示

/etc/issue 是用户由本机登陆时在title地方显示的文本。一般使用mingetty 中的参数:

[klot@localhost ~]$ cat /etc/issue
CentOS release 5 (Final)
Kernel r on an m

[klot@localhost ~]$
其中,r 和m 可以参考 man mingetty来设置。

当远程telnet登陆时,系统将使用/etc/issue.net显示title种的文本;
另外如果希望用户登陆后获得一定的消息,可是修改 /etc/motd文件来实现。

login as: klot
klot@192.168.254.128's password:
Last login: Sat May 30 14:42:43 2009 from 192.168.254.1
Hi,
      ah?
[klot@localhost ~]$

是否记得我们登入主机的时候,萤幕上头会有一些说明文字,告知我们的 Linux 版本啊什么的, 还有,登入的时候,我们还可以给予使用者一些讯息或者欢迎文字呢。此外, 我们习惯的环境变数、命令别名等等的,是否可以登入就主动的帮我设定好? 这些都是需要来注意的。另外,这些设定值又可以分为系统整体设定值与各人喜好设定值, 仅是一些档案放置的地点不同啦!这我们后面也会来谈一谈的!

绝对路径与相对路径

这个议题说到快要烂掉了~从一开始到现在,这个绝对路径与相对路径的问题我们就提到不知道多少次了, 因为他实在很重要~这与 PATH 这个变数关系很大!老实说, 万一你的 PATH 没有设定完整的时候,下达指令就必须要以‘ 一长列的指令连带根目录都要列出来 ’,呵呵那就是绝对路径的设定法啦! 基本上,这个‘ 绝对路径’与‘相对路径 ’的观念是很重要的!否则你将常常会找不到档案说! 所谓的‘绝对路径’就是以根目录开始写入到档案的一种命令写定方法,举例来说,我目前在 /home/test 这个 test 使用者的家目录中,我想要看看里面的 .bashrc 这个档案的资料,使用的是 more 这个指令,而这个指令在 /bin/more 当中,则正确的下达指令的方法为:

[root@linux ~]# /bin/more .bashrc

我在的目录为 /home/test !这是绝对路径写法! 而如果你还记得我们在 Linux 档案与目录管理 那一篇文章中提到的观念的话,那么应该记得使用 ls -al 时会出现两个一定存在的目录,分别是‘.’与‘..’,分别代表是‘这个路径’,与‘上一层路径’!

[root@linux ~]# ls -al
drwxrwxr-x  2 root  root   4096  Aug 15 11:05 .
drwxrwxr-x  2 root  root   4096  Aug 14 23:26 ..

所以说,要执行上一层目录中的命令,可以下达‘../command ’那个 command 指的是存在的可执行档!那么我因为在 /home/test 里面,距离 /bin 有两层上层目录,所以我要使用 /bin/more 这个执行档,并且使用相对路径的方法,就必须使用:

[root@linux ~]# ../../bin/more .bashrc

这种相对路径的方法相当广泛的被运用于 script 当中,这是因为如前面提到的, 每个人的安装预设的目录都不相同,则使用相对路径的话, 很容易就可以找到套件之间相依软体或者是设定档案的相关性!

例题:关于路径搜寻的问题!为何不执行目前所在目录下的档案?
答:

      咦!刚刚不是提到‘.’与‘..’吗?那么那个‘ . ’是干嘛用的?!眼尖的朋友应该已经发现了,就是‘我在执行档案的时候,基本上,并不会主动搜寻目前目录下的档案’举个例子来说,我安装的 squid 这个执行档在 /usr/local/squid/bin/squid 这个档案,然而我在 /usr/local/squid/bin 下达 squid 的时候,系统会告诉你‘查不到这个档案!’真是见鬼了!明明有这个档案的呀!这是因为系统预设的 PATH (路径) 并没有执行目前目录下的设定,也就是‘.’这个路径!你可以使用‘ echo $PATH ’看看,就可以知道为什么了!

      那么为何不要设定这个路径呢?这是因为‘ 安全’的考量。由于系统预设是允许任何人在 /tmp 底下写入任何档案的,那么万一有居心不良的使用者或者是 Cracker 入侵你的电脑,并在你的 /tmp 里头埋了一个小木马,并取名为 ls ,好了,改天你以 root 身份登入后,到 /tmp 底下,并执行 ls ,你看会有什么结果?!这个 /tmp/ls 由其他身份的人来执行或许没有问题,但是由 root 来执行却可能会导致 Cracker 所乐意见到的结果!那晓得为何了吧?!

      当然啰!您还是可以选择在 ~/.bashrc 当中设定你的 . 在你的 PATH 当中,不过并不这么建议就是了!


好了,由于系统预设并不主动搜寻目前目录下的执行档,那么你应该如何执行‘目前目录下的执行档’呢? 很简单呀!就是以相对路径的观念,由于‘ .. ’是上层,而‘ . ’是这一层,所以要执行这一层目录的命令就使用‘ ./command ’即可!例如你的 /usr/local/squid/bin 底下执行 squid 则可以写成:

[root@linux ~]# ./squid

请特别留意这方面的问题!‘新手特别容易犯这个错误呢!

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容