- 6.1 目录与路径
- 6.1.1 相对路径与绝对路径
- 6.1.2目录的相关操作cd , pwd , mkdir , rmdir
- 6.1.3 关于执行档路径的变数: $PATH
- 6.2 档案与目录管理
- 6.2.1 档案与目录的检视: ls
- 6.2.2复制、删除与移动cp , rm , mv
- 6.2.3 取得路径的档案名称与目录名称
- 6.3 档案内容查阅
- 6.3.1直接检视档案内容cat , tac , nl
- 6.3.2可翻页检视more , less
- 6.3.3资料撷取head , tail
- 6.3.4 非纯文字档: od
- 6.3.5 修改档案时间与建置新档: touch
- 6.4 档案与目录的预设权限与隐藏权限
- 6.4.1 档案预设权限:umask
- 6.4.2档案隐藏属性: chattr , lsattr
- 6.4.3档案特殊权限SUID , SGID , SBIT , 权限设定
- 6.4.4 观察档案类型:file
- 6.5 指令与档案的搜寻
- 指令档名的搜寻:which
- 档案档名的搜寻:whereis , locate / updatedb , find
- 6.6 极重要的复习!权限与指令间的关系
- 6.7 重点回顾
- 6.8 本章习题
- 6.9 参考资料与延伸阅读
- 针对本文的建议:http://phorum.vbird.org/viewtopic.php?t=23879

6.1 目录与路径(PATH)

6.1.1 相对路径与绝对路径

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

  • 较特殊的目录

    • .代表此层目录
    • ..代表上一层目录
    • -代表前一个工作目录
    • ~ 代表『目前使用者身份』所在的家目录
    • ~account 代表account 这个使用者的家目录(account是个帐号名称)

6.1.2目录的相关操作cd , pwd , mkdir , rmdir

  • cd:变换目录
  • pwd:显示目前的目录
  • mkdir:建立一个新的目录
  • rmdir:删除一个空的目录

cd (change directory, 变换目录)

| [dmtsai@study ~]$ su - #先切换身份成为root看看! [root@study ~]# cd [相对路径或绝对路径]

最重要的就是目录的绝对路径与相对路径,还有一些特殊目录的符号啰!

[root@study ~]# cd ~dmtsai

代表去到dmtsai这个使用者的家目录,亦即/home/dmtsai

[root@study dmtsai]# cd ~

表示回到自己的家目录,亦即是/ root这个目录

[root@study ~]# cd

没有加上任何路径,也还是代表回到自己家目录的意思喔!

[root@study ~]# cd ..

表示去到目前的上层目录,亦即是/root的上层目录的意思;

[root@study /]# cd -

表示回到刚刚的那个目录,也就是/root啰~

[root@study ~]# cd /var/spool/mail

这个就是绝对路径的写法!直接指定要去的完整路径名称!

[root@study mail]# cd ../postfix

这个是相对路径的写法,我们由/var/spool/mail 去到/var/spool/postfix 就这样写 |

| —- |

pwd (显示目前所在的目录)

| [root@study ~]# pwd [-P] 选项与参数: -P :显示出确实的路径,而非使用连结(link) 路径。

范例:单纯显示出目前的工作目录: [root@study ~]# pwd /root <==显示出目录啦~

范例:显示出实际的工作目录,而非连结档本身的目录名而已 [root@study ~]# cd /var/mail <==注意,/var/mail是一个连结档 [root@study mail]# pwd /var/mail <==列出目前的工作目录 [root@study mail]# pwd -P /var/spool/mail <==怎么回事?有没有加-P差很多~ [root@study mail]# ls -ld /var/mail lrwxrwxrwx. 1 root root 10 May 4 17:51 /var/mail -> spool/mail

看到这里应该知道为啥了吧?因为/var/mail是连结档,连结到/var/spool/mail

所以,加上pwd -P 的选项后,会不以连结档的资料显示,而是显示正确的完整路径啊! |

| —- |

mkdir (建立新目录)

| [root@study ~]# mkdir [-mp]目录名称 选项与参数: -m :设定档案的权限喔!直接设定,不需要看预设权限(umask) 的脸色~ -p :帮助你直接将所需要的目录(包含上层目录)递回建立起来!

范例:请到/tmp底下尝试建立数个新目录看看: [root@study ~]# cd /tmp [root@study tmp]# mkdir test <==建立一名为test的新目录 [root@study tmp]# mkdir test1/test2/test3/test4 mkdir: cannot create directory ‘test1/test2/test3/test4’: No such file or directory

话说,系统告诉我们,没可能建立这个目录啊!就是没有目录才要建立的!见鬼嘛?

[root@study tmp]# mkdir -p test1/test2/test3/test4

原来是要建test4上层没先建test3之故!加了这个-p的选项,可以自行帮你建立多层目录!

范例:建立权限为rwx—x—x的目录 [root@study tmp]# mkdir -m 711 test2 [root@study tmp]# ls -ld test* drwxr-xr-x. 2 root root 6 Jun 4 19:03 test drwxr-xr-x. 3 root root 18 Jun 4 19:04 test1 drwx—x—x . 2 root root 6 Jun 4 19:05 test2

仔细看上面的权限部分,如果没有加上-m来强制设定属性,系统会使用预设属性。

那么你的预设属性为何?这要透过底下介绍的umask才能了解喔!^_^ |

| —- |

rmdir (删除『空』的目录)

| [root@study ~]# rmdir [-p]目录名称 选项与参数: -p :连同『上层』『空的』目录也一起删除

范例:将于mkdir范例中建立的目录(/tmp底下)删除掉! [root@study tmp]# ls -ld test <==看看有多少目录存在? drwxr-xr-x. 2 root root 6 Jun 4 19:03 test drwxr-xr-x. 3 root root 18 Jun 4 19:04 test1 drwx—x—x. 2 root root 6 Jun 4 19:05 test2 [root@study tmp]# rmdir test <==可直接删除掉,没问题 [root@study tmp]# rmdir test1 <==因为尚有内容,所以无法删除! rmdir: failed to remove ‘test1’: Directory not empty [root@study tmp]# rmdir -p test1/test2/test3/test4 [root@study tmp]# ls -ld test <==您看看,底下的输出中test与test1不见了! drwx—x—x. 2 root root 6 Jun 4 19:05 test2

瞧!利用-p 这个选项,立刻就可以将test1/test2/test3/test4 一次删除~

不过要注意的是,这个rmdir 仅能『删除空的目录』喔! |

| —- |

目录需要一层一层的删除才行!而且被删除的目录里面必定不能存在其他的目录或档案! 这也是所谓的空的目录(empty directory)的意思啊!
那如果要将所有目录下的东西都杀掉呢?!这个时候就必须使用『 rm -r test 』啰!不过,还是使用rmdir比较不危险!你也可以尝试以-p的选项加入,来删除上层的目录喔!

6.1.3 关于执行档路径的变数: $PATH

$PATH:记录可执行文件路径的环境变量。(变数 = 环境变量)

注意:

  1. 执行指令时,系统将依照PATH的设置前往每个PATH定义的目录下搜索同名的可执行文件;若有多个同名文件,将执行先搜索到的哪一个。
  2. 由一堆目录所组成,每个目录中间用“冒号:”隔开,目录之间有顺序之分。
  3. 不同身份使用者默认的PATH不同,默认能够随意执行的指令也不同。
  4. 出于安全性,“本目录 .”不要放置PATH

6.2 文件与目录管理

6.2.1 文件与目录的检索:ls

image.png

[root@study ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称..
[root@study ~]# ls [—color={never,auto,always}] 文件名或目录名称..
[root@ study ~]# ls [—full-time] 文件名或目录名称..
(不加“文件名或目录名称”代表当前目录)

选项与参数:
-a :全部的文件,连同隐藏档(开头为.的文件)一起列出来(常用)
-A :全部的文件,连同隐藏档,但不包括. 与.. 这两个目录
-d :仅列出目录本身,而不是列出目录内的文件资料(常用)
-f :直接列出结果,而不进行排序(ls 预设会以文件名排序!)
-F :根据文件、目录等资讯,给予附加资料结构,例如:
:代表可执行档; /:代表目录; =:代表socket 文件; |:代表FIFO 文件;
-h :将文件容量以人类较易读的方式(例如GB, KB 等等)列出来;
-i :列出inode 号码,inode 的意义下一章将会介绍;
*-l :长资料串列出,包含文件的属性与权限等等资料;(常用)

-n :列出UID 与GID 而非使用者与群组的名称(UID与GID会在帐号管理提到!)
-r :将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
-S :以文件容量大小排序,而不是用文件名排序;
-t :依时间排序,而不是用文件名。
—color=never :不要依据文件特性给予颜色显示;
—color=always :显示颜色
—color=auto :让系统自行依据设定来判断是否给予颜色
—full-time :以完整时间模式(包含年、月、日、时、分) 输出
—time={atime,ctime} :输出access 时间或改变权限属性时间(ctime)
而非内容变更时间(modification time)

6.2.2 复制、删除与移动: cp, rm, mv

cp (复制档案或目录)

chapter6 Linux 文件与目录管理 - 图2

[root@study ~]# cp [-adfilprsu]来源档(source)目标档(destination)
[root@study ~]# cp [options] source1 source2 source3 …. directory
选项与参数:
-a :相当于-dr —preserve=all的意思,至于dr请参考下列说明;(常用)
-d :若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式连结(hard link)的连结档建立,而非复制文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用预设属性(备份常用);
-r :递回持续复制,用于目录的复制行为;(常用)
-s :复制成为符号连结档(symbolic link),亦即『捷径』文件;
-u :destination 比source 旧才更新destination,或destination 不存在的情况下才复制。
—preserve=all :除了-p 的权限相关参数外,还加入SELinux 的属性, links, xattr 等也复制了。
最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行!

复制(cp)这个指令是非常重要的,不同身份者执行这个指令会有不同的结果产生,尤其是那个-a, -p的选项, 对于不同身份来说,差异则非常的大。