Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1370789
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类:

2009-01-16 13:18:11

Bash Shell 使用环境:

是否记得我们登入主机的时候,萤幕上头会有一些说明文字,告知我们的 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

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

阅读(1983) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~