天天看点

Linux文件与目录管理

绝对路径与相对路径:

绝对路径:路径的写法『一定由根目录 / 写起』,例如: /usr/share/doc 这个目录。

相对路径:路径的写法『不是由 / 写起』,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: 『cd ../man』这就是相对路径的写法啦!

.    代表此层目录 

..   代表上层目录 

~    代表自己的家目录 

~user 代表到 user 这个人的家目录

cd

语法:

[root @test /root ]# cd [相对路径或绝对路径]  

参数说明: 

路径有『相对路径』与『绝对路径』的分别,请千万小心啰! 

范例: 

[root @test /root]# cd ..<==回到上一层目录 

[root @test /root]# cd ../home <==相对路径的写法 

[root @test /root]# cd /var/www/html <==绝对路径的写法 

[root @test /etc]# cd<==回到使用者的家目录 

[root @test /etc]# cd ~ <==回到使用者的家目录! 

[root @test /etc]# cd ~test<==回到 test 这个使用者的家目录

cd 是 change directory 的缩写,这是用来变换工作路径的指令。注意,路径与 cd 指令之间存在一个空格!

pwd

[root @test /root ]# pwd  

[root @test root]# cd /home/test 

[root @test test]# pwd  

/home/test             <==显示目前你所在的目录呦!

说明: 

pwd 是 print working directory 的缩写,也就是显示目前所在目录的指令,例如在上个表格最后的目录是 /home/test 这个目录,但是提示字符仅显示 test ,如果你想要知道目前所在的目录,可以输入 pwd 即可。

mkdir 与 rmdir 管理目录:

那么要如何建立删除目录呢?很简单呀!就用 mkdir 与 rmdir , make/remove directory 的缩写! 

mkdir

[root @test /root ]# mkdir [-mp] [目录名称] 

-m :设定档案的权限喔!直接设定,不需要看 umask 这个内容的脸色! 

-p :帮助你直接将上面的目录递归建立起来! 

[root @test /root]# cd tmp 

[root @test /tmp]# mkdir test<==建立名称为 test 的目录 

[root @test /tmp]# mkdir -p test1/test2/test3/test4 <==直接建立 test2...等上层目录 

[root @test /tmp]# mkdir -m 711 testqq  <==建立权限为 711 的目录! 

[root @test /tmp]# ll test* 

drwxrwxr-x   2 test   test       4096 Feb  6 20:47 test/ 

drwxrwxr-x   3 test   test       4096 Feb  6 20:48 test1/ 

drwx--x--x   2 test   test       4096 Feb  6 20:48 testqq/

如果想要建立新的目录的话,那么就使用 mkdir 吧! 不过,在预设的情况下,你所需要的目录得一层一层的建立才行!例如:假如你要建立一个目录为 /home/bird/testing/test1,那么首先必须要有 /home 然后 /home/bird ,再来 /home/bird/testing 都必须要存在,才可以建立 test1 这个目录!假如没有 /home/bird/testing 时,就没有办法建立 test1 的目录啰!不过,现在有个更简单有效的方法啦!那就是加上 -p 这个参数喔!你可以直接下达:『 mkdir -p /home/bird/testing』则系统会自动的帮你将 /home, /home/bird, /home/bird/testing 依序的建立起目录!并且,如果该目录本来就已经存在时,系统也不会显示错误讯息喔!

rmdir

[root @test /root ]# rmdir [-p] [目录名称] 

-p :将上层的目录也删除吧! 

[root @test /root]# rmdir test<==删除名称为 test 的目录 

[root @test tmp]# ll (ll:ls -l)

[root @test tmp]# rmdir test1 

rmdir: `test1': Directory not empty 

[root @test tmp]# rmdir -p test1/test2/test3/test4 

[root @test tmp]$ ll

如果想要建立删除旧有的目录时,就使用 rmdir 吧!例如将刚刚建立的 test 杀掉,使用 rmdir test 即可!请注意呦!目录需要一层一层的删除才行!而且被删除的目录里面必定不能还有其它的目录或档案!那如果要将所有目录下的东西都杀掉呢?!这个时候就必须使用 rm -rf test 啰!不过,还是使用 rmdir 比较不危险!不过,你也可以尝试以 -p 的参数加入,来删除上层的目录喔! 

环境变量 PATH

当我们在执行一个指令的时候,系统会依照 PATH 的设定去每个 PATH 定义的路径下搜寻文件,先搜寻到的指令文件先被执行之!

显示系统环境变量PATH:

[root@test root]# echo $PATH 

/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin

可以使用printenv列出系统所有的环境变量:

-bash-3.2$ printenv

HOSTNAME=fedora.unix-center.net

TERM=vt100

SHELL=/bin/bash

HISTSIZE=1000

SSH_CLIENT=222.206.94.170 10321 22

QTDIR=/usr/lib/qt-3.3

QTINC=/usr/lib/qt-3.3/include

SSH_TTY=/dev/pts/2

USER=。。。。。

文件与目录管理:

显示属性:

# ls [-ailS] 

-a      :全部的档案都列出(连同隐藏档) 

-i      :印出 inode 的值 

-l      :长的列出,连同档案大小的数据等等 

-S      :以档案大小排序 

--color=never    :不要显示颜色 

--color=always   :均显示颜色 

--color=auto     :由系统自行判断

拷贝

[root @test /root ]# cp [-drsu] [来源档] [目的档] 

-d     :在进行 copy 的时候,如果是 copy 到 link 档案,若不加任何参数,则预设情况中会将 link 到的源文件 

copy 到目的地,若加 -d 时,则 link 档案可原封不动的将 link 这个快捷方式其拷贝到目的地! 

-r     :可以进行目录的 copy 呦! 

-s         :做成连结档,而不 copy 之意!与 ln 指令相同功能! 

-u, --update:如果来源档比较新,或者是没有目的档,那么才会进行 copy 的动作!可用于备份的动作中! 

[root @test /root]# cp    .bashrc bashrc     <==将 .bashrc 拷贝成 bashrc 这个档案! 

[root @test /root]# cp -r /bin /tmp/bin       <==这个功能就好玩啦!这是用来 copy 整个目录的参数! 

[root @test /root]# cp -s .bashrc bashrc        <==将 .bashrc 建立一个连结档,档名为 bashrc 

[root @test /root]# cp -u /home/.bashrc .bashrc <==先检查 /home/.bashrc 是否与 .bashrc 不同,如果不同的话就开始 copy 一份!如果相同则不做任何动作!

删除

[root @test /root ]# rm [-fir] [檔名] 

-i    :提供使用者确认(这是默认值) 

-r    :循环,就是一直杀掉,直到没有东西为止的意思 

-f    :force ,就是强力杀掉啦! 

[root @test /root]# cp .bashrc bashrc<==建立一个新档案, bashrc 

[root @test /root]# rm bashrc           <==会显示如下的提示: 

rm: remove `bashrc'? 

[root @test /root]# mkdir testing 

[root @test /root]# cp .bashrc testing 

[root @test /root]# rmdir testing 

rmdir: `testing': Directory not empty  <==由于 testing 里面有 .bashrc ,所以砍不掉! 

[root @test /root]# rm -rf testing     <==持续删除该目录下的所有档案与目录

移动

# mv [-u] [来源档] [目的档] 

-u  :同样的,为 update 的简写,当来源档比目的档还新的时后才会动作! 

[root @test /root]# cp .bashrc bashrc 

[root @test /root]# mv bashrc bashrc.old 

[root @test /root]# mv bashrc bashrc2 /tmp<==将 bashrc 与 bashrc2 移动到 /tmp 这个目录下!请注意,最后一个才是最终的目标,其它的都是 SOURCE

basename 与dirname

[root @test /root ]# basename [目录] 

[root @test /root]# basename /usr/local/etc 

etc 

这个指令会将后面的[目录]仅撷取出最后面的那个目录或档案, 

以上面的例子来看, /usr/local/etc 不论 etc 是目录或档案, 

他都会被撷取出来,因为他是最后一个出现的咚咚!

[root @test /root ]# dirname [目录] 

[root @test /root]# dirname /usr/local/etc 

/usr/local 

恰恰与 basename 相反,他仅是秀出来前面的『目录』部分喔!

查看文件内容:

cat  由第一行开始显示档案内容 

tac  从最后一行开始显示,可以看出 tac 是 cat 的倒着写! 

more 一页一页的显示档案内容 

less 与 more 类似,但是比 more 更好的是,他可以往前翻页! 

head 只看头几行 

tail 只看尾巴几行 

nl   显示的时候,顺道输出 行号! 

od   以二进制的方式读取档案内容!

具体用法man一下就知道了。

ln

有点像是 Windows 的『快捷方式』一样,不过, link 的功能要好的多呦! Link 又分为 hard link 与 symbolic link 两种方式,分别来谈一谈: 

Hard Links:

刚刚说过,当系统要读取某一个档案的时候,就会先去读 inode table ,然后再根据 inode 的信息到 block area 去将数据取出来利用!而 hard link 就是直接再建立一个 inode 连结到档案放置的 block 区块。也就是说,进行 hard link 的时候,实际上,你的档案内容不会改变,只是你在查询的时候,利用原来的 inode 与后来的 inode 均可被指定到该档案放置的地点,因此两个档案的内容会是一样的!所以读取任何一个 inode 的结果都是存取在同一个档案的内容就是了。不过,这样一来就有个问题啦,因为 inode 是会连结到 block 区域去的,而『目录』本身仅消耗 inode 而已,那么一来的话, hard link 不就不能 link 目录啦?对的!没错! Hard link 有两个最大的限制: 

不能跨 filesystem ,因为不同的 filesystem 有不同的 inode table 嘛!

不能 link 目录!

Symbolic Links:

相对于 hard link , Symbolic link 可就好理解多了,基本上,他就是在建立一个独立的档案,而这个档案会让数据读取指向他 link 的那个档案内容!由于只是利用档案来做为指向的动作,所以,当来源档被删除之后,symbolic link 的档案会『开不了』,会一直说『无法开启某档案!』

用法:ln [-s] [来源档] [目的档] 

-s  :提供连结档的连结!如果直接以 ln 不加任何参数的话,那么就属于 hard link 啰! 

权限管理:

chown 改变档案的拥有人 

chgrp 改变档案的所属群组 

chmod 改变档案的可写、可读、可执行等属性 

umask 改变预设的建立档案或目录时的属性(777需要减掉的权限)

chattr 改变档案的特殊属性 

lsattr 显示档案的特殊属性!

搜寻档案或目录:

档案的搜寻可就厉害了!因为我们常常需要知道那个档案放在哪里,所以来谈一谈怎么搜寻吧!在 Linux 底下也有相当优异的搜寻系统呦!通常 find 不很常用的!因为速度慢之外,也很操硬盘!通常我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻呦!为什么呢?因为 whereis 与 locate 是利用数据库来搜寻数据,所以相当的快速,而且并没有实际的搜寻硬盘,比较省时间啦!

which   查看可执行文件的位置 

whereis 查看文件的位置 

-b   :只找 binary 的档案 

-m   :只找在说明文件 manual 路径下的档案 

-s   :只找 source 来源档案 

-u   :没有说明档的档案!

locate  配合数据库查看档案位置 

updatedb        <==立刻更新数据库

find    实际搜寻硬盘去查询文件名称(比较慢)

其他命令:

du:统计目录的占用空间大小

file:查看文件类型

touch创建文件

本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2009/11/15/1603304.html,如需转载请自行联系原作者