《黑客防线》↑在攻与防的对立统一中寻求突破!2001年创刊的黑客技术专业刊物!

设为首页
收藏本站
联系我们
网站导航


软件下载 - 专题资源 - 高级Linux网管培训班 - 浏览软件 - [第9课]linux文件与目录管理
[第9课]linux文件与目录管理
授权类型:
运行环境:
软件分类: 高级Linux网管培训班
文件大小: 55.98MB
星级评定:
官方网站: http://
发 布 人:
发布时间: 2007-12-27 8:06:28
下载权限:
下载次数: 5 人次
下载计费: 0 分, 0 金币 链接报错 收藏本页
下载地址: 下载地址1
特别说明: 1.本站非VIP资料均从网上收集,仅供网络安全爱好者学习、研究所用,请勿用于非法用途,违者责任自负。
2.本站VIP资料专为VIP会员提供,至2008年2月1日起,所有VIP软件、课程均设置有压缩包密码,此密码一月一更新。获取当月VIP压缩密码请到“VIP论坛”、“服务版”查看置顶贴,或在登陆VIP会员帐户后,点击如下连接进入:VIP资料每月密码公布
3.本站VIP资料专署于所有VIP会员共同所有,任何个人、团体共享、发布、盗连均视为侵权,一经发现,严惩不怠!
                黑客防线2007年 linux班
           http://www.hacker.com.cn


第9讲

        1 目录与路径
        2 文件与目录管理


----------------------------------


1 目录与路径

        前面我们在linux文件权限中了解到了linux是树状目录的概念。
        接下来我们来实际的搞定一些基本路径的问题。
        这些问题中,最重要的就是 绝对路径 和 相对路径 的意义了。



绝对路径 和 相对路径

                假设你需要在任意一个目录下变换到根目录的 etc 底下,
        那么你就应该要使用  cd /etc, 这也就是所谓的 绝对路径,
        他是先cd到/目录然后连续往根下的目录查找的一个情况, 所以不论你在
        哪一个路径现执行这一个指令,都会将你移动到该路径下。
        那如果我是使用  cd etc 呢?
        那表示你要切换到 目前这个目录下的 etc 目录中,情况可是不一样的。
        等同于cd ./etc

         绝对路径:路径的写法 一定由根目录 / 写起 ,例如: /usr/share/doc 这个目录。
         相对路径:路径的写法 不是由 / 写起,例如由 /usr/share/doc 要到
        /usr/share/man 底下时,可以写成: cd ../man 这就是相对路径的写法
        相对路径意指 相对于目前工作目录的路径!

        那么有绝对路径的写法了,为啥还要相对路径呢?
        1 可以操作方便一些,比如
                你的工作平台正在/usr/share/doc下,你要去看man下的内容
                可以直接cd ../man
                要是你用绝对路径的话那会是:cd /usr/share/man
                这里路径很少还看不出来什么,要是路径很常就明显了
        2 假如你做了一个网站,那么你的网站里的图片连接可以写为c:\wwwroot\images
                (我这里以WIN为例子)方便大家更好的理解,
                那么你把网站传到你买的空间后。要是别人的www服务是在D盘呢。那么你的
                图片连接会全部找不到路径了

        一般来说,如果是在写程序 (shell scripts),务必使用绝对路径的写法。
        怎么说呢?因为绝对路径的写法虽然比较麻烦,但是可以肯定这个写法绝对不会有问题。
         如果使用相对路径在程序当中,则可能由于您执行的工作环境不同,导致一些问题的发生。
        这个现象我们在讲 shell script时,还会提到这个


目录的相关操作:
        切换目录的格式是:cd [相对路径或绝对路径]
        这里我说几个特殊的目录:
                .        代表此层目录
                ..       代表上一层目录
                -       代表前一个工作目录
                ~       代表 目前使用者身份 所在的家目录
                ~test        代表 test 这个使用者的家目录

        我们前面讲到连接数的时候说到过,在目录底下有两个目录是一定会存在的。那就是 . 与 ..
        分别代表此层与上层目录的意思。
        这里呢?我给大家说个特殊的地方,大家都知道/根目录是所有目录的最顶层,那么/有..吗?
        我们来ls -al看下 cd ..我们可以发现,根目录的 .. 和 . 是同一个目录



-----
        接下来我们就来谈一谈几个常见的处理目录的指令:
        cd:变换目录
        pwd:显示目前的目录
        mkdir:建立一个新的目录   mk == make
        rmdir:删除一个空的目录  rm == remove
        ---
        cd 大家都会了

        ------
        pwd 是 Print Working Directory 的缩写,
        也就是显示目前所在目录的指令,
        例如我们这里进入/etc 这个目录,可以输入 pwd即可。
        这个命令用处大吗?大        
        linux下可能有些相同的文件名使用的目录名称都相同,
        而通常 Linux仅列出最后面那一个目录而已,
        例如 /usr/local/etc 还有 /etc ,
        但是,这个时候你就可以使用 pwd 来知道你的所在目录,免得搞错目录,结果……

        ---------------
   mkdir (建立新目录)
        格式:mkdir [-mp] 目录名称
        参数:
        -m :设定文件的权限,不需要看系统默认权限 (umask) 的脸色
        -p :帮助你直接将所需要的目录递归建立起来

        例1:
        [root@localhost tmp]# mkdir 1
        [root@localhost tmp]# mkdir 1/2/3
        mkdir: 无法创建目录 “1/2/3”: 没有那个文件或目录
        [root@localhost tmp]# mkdir -p 1/2/3
         -p 这个参数,可以自行帮您建立多层目录

        例2:
        [root@localhost tmp]# mkdir test
        [root@localhost tmp]# cd test
        [root@localhost test]# mkdir -m 700 test2
        [root@localhost test]# ll
        总计 8
        drwx------ 2 root root 4096 07-09 00:07 test2
        [root@localhost test]# mkdir test3
        [root@localhost test]# ll
        总计 16
        drwx------ 2 root root 4096 07-09 00:07 test2
        drwxr-xr-x 2 root root 4096 07-09 00:07 test3

        --------------
        rmdir (删除『空』的目录)
        [root@linux ~]# rmdir [-p] 目录名称
        参数:
        -p :递归删除
        注意了:rmdir这个命令只能删除空的目录
        

-------------------------------
关于执行文件路径的变量: $PATH
        在提过了绝对路径、相对路径与指令的下达方式之后,
        你应该会稍微注意到一件事情,那就是: 为什么我可以在任何地方执行 ls 这个指令呢?
        为什么我可以直接执行 ls 就一定可以显示出一些讯息,而不会说找不到该 ls 指令呢?
         这是因为环境变量 PATH 的原因
        当我们在执行一个指令的时候, 系统会依照 PATH 的设定去每个 PATH 定义的路径下搜寻执行文件,
        先搜寻到的指令先被执行。
        现在,我们下达 echo $PATH 指令看看,
        echo显示、印出,
        而 PATH 前面加的 $ 表示后面接的是变量,所以即会显示出目前的 PATH 了
        [root@linux ~]# echo $PATH
        /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:
        /sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

        注意到了吗?我们知道ls指令是在/bin这个目录下,
        /bin 在 PATH 的设定之中,所以自然就可以找的到 ls了  PATH 对于执行文件来说,
        是个很重要的 变量,他主要是用来规范指令搜寻的目录。 而每个目录是有顺序的,每个目录中间以冒
        号 :来分隔。
         那么 PATH 这个变量还有什么地方重要呢?
        如果你将 ls 移动到 /root 底下的话 (mv /bin/ls /root) ,
        然后你自己本身也在 /root 底下(cd /root) ,但是当你执行 ls 的时候,会提示错误?
        怎么办?这是因为 PATH 这个变量没有/root 这个目录,而你又将 ls 移动到 /root 底下了,
        系统自然就找不到可执行文件了,
        因此就会告诉你, command not found
        那么该怎么解决这种问题呢?有两个方法,
        一:直接将 /root的路径加入 PATH 当中。如何增加?可以使用:
        [root@linux ~]# PATH="$PATH":/root
        这种方式来增加 PATH 搜寻目录即可!另一种方式则是使用完整文件名来下达指令,
        2 即直接使用相对或绝对路径来执行,例如:
        [root@linux ~]# /root/ls
        [root@linux ~]# ./ls

        注意了,如果我有两个 ls 档案在不同的目录中,
        例如 /usr/local/bin/ls 底下与 /bin/ls 那么当我下
        达 ls 的时候,哪个 ls 会被执行?
        PATH 里面的目录是按顺序查询的,先被查询的那个目录下的档案就会被先执行了


        再说一个要注意的地方,为何不要在 PATH 里面加入 . 这个目录,如此一来的话,
        不就可以直接在所在目录执行档案了吗?因为 . 代表当前所在目录啊。
        是这样没错。但是有没有想过,   如果某天,你的机器被某个黑客入侵后,
        比如在 /tmp 里面建立了一个 ls 的文件,有ls的列表功能不过还能提升权限,
        那么当你在 /tmp 底下执行 ls 时会怎样,没错,你在不知不觉中。。。。
        所以啰,为了安全起见,不建议将 . 加入 PATH 的搜寻当中!

        关于更多的 PATH 与相关的变量及环境变量概念,我们会在讲到 bash shell 时,
        再更深入的介绍





------------------

2 档案与目录管理:

        ls指令
        这个命令我们用过很多次了
        重要的参数:ls -l  == ll  
                                ls -a
                                ls -alh
                                ls -alF --color=never (这个是因为字符界面下文件夹的颜色有点看不清楚)
                                ls -al --color=never
        大家可以试下结果有什么不同

        --------
        复制、删除、移动: cp, rm, mv        (copy, remove, move)

        -----
        cp (复制文件或目录)
        [root@linux ~]# cp [-adfilprsu] 源文件(source)  目标文件(destination)
        [root@linux ~]# cp [options] source1 source2 source3 .... directory
        参数:
        -a  :相当于 -pdr 的意思;
        -d  :若来源文件为连结文件的属性(link file),则复制连结文件属性而非档案本身;
        -f  :为强制 (force) 的意思,若有重复或其它疑问时,不会询问使用者,而强制复制;
        -i  :若目的檔(destination)已经存在时,在覆盖时会先询问是否复制
        -l  :进行硬式连结 (hard link) 的连结文件建立,而非复制档案本身;
        -p  :连同档案的属性一起复制过去,而非使用系统默认属性;
        -r  :递归持续复制,用于目录的复制;
        -s  :复制成为符号连结文件 (symbolic link),即快捷方式;
        -u  :若 destination 比 source 旧才更新 destination
        最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是 目录 才行。
        
        例一:将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc
        [root@localhost ~]# cd /tmp
        [root@localhost tmp]# cp ~/.bashrc bashrc
        [root@localhost tmp]# cp -i ~/.bashrc bashrc
        cp:是否覆盖“bashrc”? n

        例二:将 /var/log/wtmp 复制到 /tmp 底下
        [root@localhost tmp]# cp /var/log/wtmp .  [注意了,后面的点一定要加]
        [root@localhost tmp]# ls -l /var/log/wtmp wtmp
        -rw-rw-r-- 1 root utmp 105600 07-09 00:54 /var/log/wtmp
        -rw-r--r-- 1 root root 105600 07-09 01:17 wtmp
        注意到了吗?在不加任何参数的情况下,档案的所属者会改变,连权限也跟着改变了~
        这是个很重要的特性!要注意。还有,连档案建立的时间也不一样了!
        如果您想要将档案的所有特性都一起复制过来,可以加上 -a

        例三:复制 /etc/ 这个目录下的所有内容到 /tmp 底下
        [root@linux tmp]# mkdir 1
        [root@linux tmp]# cp /etc/ /tmp/1
        cp: omitting directory `/etc'   [如果是目录,不能直接复制,要加上 -r 的参数]
        [root@linux tmp]# cp -r /etc/ /tmp
        还是要再次的强调 -r 是可以复制目录,但是,档案与目录的权限会被改变~
        所以,也可以利用 cp -a /etc /tmp 来下达指令

        例四:将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下
        [root@linux tmp]# cp ~/.bashrc ~/.bash_history /tmp
        可以将多个数据一次复制到同一个目录去!


        ------
        rm (移除档案或目录)
        [root@linux ~]# rm [-fir] 档案或目录
        参数:
        -f  :就是 force 的意思,强制移除;
        -i  :互动模式,在删除前会询问使用者是否动作
        -r  :递归删除。最常用在目录的删除了

        例一:删除一个不为空的目录,以上面的例3来讲
        [root@localhost tmp]# rm 1
        rm: 无法删除 “1”: 是一个目录
        [root@localhost tmp]# rm -r 1
        rm:是否进入目录 “1”? y
        rm:是否进入目录 “1/etc”? y
        rm:是否进入目录 “1/etc/isdn”? y
        rm:是否删除 一般文件 “1/etc/isdn/ibod.cf”? y
        rm:是否删除 一般文件 “1/etc/isdn/vboxgetty.conf”? y
        rm:是否删除 一般文件 “1/etc/isdn/vboxd.conf”? y
        rm:是否删除 一般文件 “1/etc/isdn/rate.conf”?
        [root@localhost tmp]# rm -rf 1

        例二:删除一个带有 - 开头的档案
        [root@localhost tmp]# rm -bashrc-
        rm:无效选项 -- b
        请使用“rm ./-bashrc-”删除文件 “-bashrc-”。
        请尝试执行“rm --help”来获取更多信息。
         因为 -是参数
        [root@localhost tmp]# rm ./-bashrc-


        -----
        mv (移动档案与目录,或更名)
        [root@linux ~]# mv [-fiu] source destination
        [root@linux ~]# mv [options] source1 source2 source3 .... directory
        参数:
        -f  :force 强制的意思,强制直接移动而不询问;
        -i  :若目标档案 (destination) 已经存在时,就会询问是否覆盖!
        -u  :若目标档案已经存在,且 source 比较新,才会更新 (update)



取得路径的文件名称与目录名称

完整的文件名或目录名最长可以到达 4096 个字符。
其实,取得文件名或者是目录名称,一般的用途应该是在写程序的时候,
用来判断用的~ 所以,这部分的指令可以用在
shell scripts 里。 底下我们简单的以2个范例来谈一谈 basename 与 dirname 的用途!
[root@linux ~]# basename /etc/sysconfig/network
network  取得最后的文件名
[root@linux ~]# dirname /etc/sysconfig/network
/etc/sysconfig  取得的变成目录名了!
很简单的应用吧!



------------------------
下节内容

档案内容查阅

档案与目录的预设权限与隐藏权限
相关软件
    评论作者:
    电子邮件:
    评论内容:
    投票评价:
    验 证 码:
    图片包含4个随机字符,点击刷新
    请输入上面图片中的随机字符