Linux文件目录进阶(04)

楔子

  • Linux中的文件是不区分文件名和拓展名的,平时我们看到的文件有拓展名只是为了标识一个文件,比如txt你就知道他是文本文件,conf是配置文件。
  • 返回刚才的目录,即上一个工作目录cd —
  • Linux中文件类型共有7种:普通文件目录块设备文件字符设备文件符号链接文件套接字文件(socket)命名管道文件(pipe)。但是笔者后五个文件都不是很了解,所以这里不解析,等自己明白了再发文章补充。

pwd -P

显示出实际路径,而非使用连接路径。比如:cd /var/mailpwd返回/var/mailcd /var/mailpwd -P返回 /var/spool/mail

chgrp

只有文件主或root才有权利用chown命令改变文件的所有关系,文件主或超级用户(root)可以利用chgrp命令改变文件的GID。

umask

当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限,也被叫做掩码。

  • ①查看当前掩码的设置:umask -Sumask -p
    Linux文件目录进阶(04)
  • 使用八进制数值来设置mode:umask mode。常用的mode值如下
    Linux文件目录进阶(04)

mkdir

在目录/home/cauc下建立子目录test,并且只有文件主有读、写和执行 权限,其他人无权访问: mkdir --mode=700 /home/cauc/test1mkdir -m 700 /home/cauc/test1

例一

  • 分别创建三个用户Tom、Jack、Jerry,将其登录密码全部设置为123456:useradd Tom Password Tom useradd Jack Password Jack useradd Jerry Password Jerr
  • 用Tom用户创建目录/tmp/Tom,用Jack用户创建目录/tmp/Jack:su Tom mkdir /tmp/Tom su Jack mkdir /tmp/Jack
  • 此时Jack向目录/tmp/Tom里新建文件可以吗:不可以
    Linux文件目录进阶(04)
  • 给目录/tmp/Tom设置相应的属性,使其成为组成员的共享文件夹:chmod 770 /tmp/Tom
  • 用root用户将Jack添加到Tom所在的组:su root usermod –G Tom Jack
  • 此时Jack向目录/tmp/Tom里新建文件可以吗?如果可以文件主和文件属组分别是什么?可以,文件主为Jack,文件属组为Jack

cp

  • 将文件mfile复制到目录/home/cauc下,并改名为exam1:cp mfile /home/cauc/exam1
  • 将目录/home/cauc下的所有文件及其子目录复制到目录/home/jsj中:cp -r /home/cauc /home/jsj
  • 交互式地将目录/home/cauc中以m打头的所有.c文件复制到目录/home/jsj中:cp -i /home/cauc/m*.c /home/jsj
  • 为/tmp/bashrc建立一个符号链接文件:cp –s /tmp/bashrc bashrc_slink

file

对每个参数FILE进行检查,并予以分类
Linux文件目录进阶(04)

链接

链接是对文件的引用,这样您可以让文件在文件系统中多处被看到。不过,在 Linux 中,链接可以如同原始文件一样来对待。链接可以与普通的文件一样被执行、编辑和访问。对系统中的其他应用程序而言,链接就是它所对应的原始文件。当您通过链接对文件进行编辑时,您编辑的实际上是原始文件。链接不是副本。

硬链接(百度百科)

硬链接只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为 inode)。当您移动或删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果您删除的文件有相应的硬链接,那么这个文件依然会保留,直到所有对它的引用都被删除。

区别(百度百科)

在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号inode 。软连接,其实就是新建立一个文件,这个文件就是专门用来指向别的文件的(那就和windows 下的快捷方式的那个文件有很接近的意味)。软链接产生的是一个新的文件,但这个文件的作用就是专门指向某个文件的,删了这个软连接文件,那就等于不需要这个连接,和原来的存在的实体原文件没有任何关系,但删除原来的文件,则相应的软连接不可用(cat那个软链接文件,则提示“没有该文件或目录“)
硬连接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个inode,当然inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除的时候,系统调用会检查inode link count的数值,如果他大于等于1,那么inode不会被回收。因此文件的内容不会被删除。
硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。
软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vi这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);软链接可以对目录进行连接,硬链接不可以。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建软链接。

硬链接命令

Linux文件目录进阶(04)

软连接命令

Linux文件目录进阶(04)

chgrp & chown命

chgrp命令用来改变文件或目录所属的用户组。

  • 将/home/cauc及其子目录下的所有文件的用户组改为friend:chgrp -R friend /home/cauc

chown命令改变某个文件或目录的所有者和/或所属的组。

  • 将目录/home/cauc及其下面的所有文件、子目录的文件主改成jsj:chown -R jsj /home/cauc

  • 在系统中添加两个用户: Ventura、Hogan:useradd Ventura useradd Hogan
  • Ventura同时属于次要组governor和wrestle:groupadd wrestle groupadd governor usermod –G wrestle Ventura usermod –aG governor Ventura
  • Ventura撰写了自己的摔跤计划plans.txt,并将它放到目录/tmp下:su Ventura cd /tmp touch plans.txt
  • Ventura希望将他的摔跤计划和用户Hogan以及其他摔跤组的成员共享,但他不希望组外的成员访问:chmod o-rw /tmp/plans.txt chgrp wrestle /tmp/plans.txt su root usermod –G wrestle Hogan
  • 用户Hogan想往用户Ventura的计划上添加内容,可以吗?怎么做?:su Hogan echo “throw large objects.” >> /tmp/plans.txt cat /tmp/plans.txt
  • 用户Hogan对他自己的贡献很满意,他希望将这个计划公开,让所有人都能读到这个文件,可以实现吗?:不可以,只有root和文件主能修改文件访问权。

深刻认识文件和目录权限

文件权限:
  • 可读(r):浏览文件
  • 可写(w):修改文件
  • 可执行(x):将文件作为命令使用
目录权限:
  • 可读(r):只能查看到目录下的子目录名和文件名(ls)
  • 可写(w):要在目录下添加删除目录和文件,必须有可执行的权利
  • 可执行(x):可以访问目录中的文件,包括子目录(cat)

  • 用户cauc在/tmp目录下建立一个目录pub和mail,并且设置mail的权限为文件主可读、写和执行,文件属组可读、写和执行,其他用户可读、写:mkdir /tmp/pub mkdir /tmp/mail chmod 776 /tmp/pub chmod 776 /tmp/mail
  • 用户cauc在pub目录下创建文件file1存储当前的月份日历,在mail目录下创建文件file2存放系统当前的日期。查看file1和file2的权限:cd /tmp/pub cal > file1 cd /tmp/mail date > file2
  • 用户jsj试着用cat命令打开这两个文件。可以吗:可以。cat pub/file1 cat mail/file2
    Linux文件目录进阶(04)
  • 用户jsj想试着在pub和mail目录下创建文件file,它可以实现吗?需要用户cauc做怎样的修改它才能创建文件:不可以 。chmod 777 /tmp/pub
    Linux文件目录进阶(04)