zoukankan      html  css  js  c++  java
  • Linux基础:文件基础属性及如何更改文件属性、文件与目录管理、linux软硬链接的理解、linux用户和用户组管理

    一、文件基础属性

    1、Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

    2、在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:

    • chown (change ownerp) : 修改所属用户与组。
    • chmod (change mode) : 修改用户的权限。

      如下图中通过 chown 来授权用户,通过 chmod 为用户设置可以开门的权限。

    3、在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组。

      在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。

    • 当为 d 则是目录
    • 当为 - 则是文件;
    • 若是 l 则表示为链接文档(link file);
    • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
    • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

      接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。

    4、每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。

    5、Linux 文件属主和属组

    drwxr-xr-x 2 root  root  4096 Feb 15 14:46 cron
    drwxr-xr-x 3 mysql mysql 4096 Apr 21  2014 mysql

    (1)对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。

    (2)文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。

    (3)因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。

      在以上实例中,mysql 文件是一个目录文件,属主和属组都为 mysql,属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限;其他用户也有可读和可执行的权限。对于 root 用户来说,一般情况下,文件的权限对其不起作用。

    6、chgrp:更改文件属组

    chgrp [-R] 属组名 文件名
    
    参数选项:
    -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。 

    7、chown:更改文件属主,也可以同时更改文件属组

    chown [–R] 属主名 文件名
    chown [-R] 属主名:属组名 文件名
    # 进入目录(~)将install.log的拥有者改为bin这个账号:
    [root@www ~] cd ~
    [root@www ~]# chown bin install.log
    [root@www ~]# ls -l
    -rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log
    
    # 将install.log的拥有者与群组改回为root:
    [root@www ~]# chown root:root install.log
    [root@www ~]# ls -l
    -rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

    8、chmod:更改文件9个属性

      Linux文件属性有两种设置方法,一种是数字,一种是符号。

      Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。

      先复习一下刚刚上面提到的数据:文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:

    r:4
    w:2
    x:1
    -:0

      每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx--- 分数则是:

    owner = rwx = 4+2+1 = 7
    group = rwx = 4+2+1 = 7
    others= --- = 0+0+0 = 0

      所以等一下我们设定权限的变更时,该文件的权限数字就是 770。变更权限的指令 chmod 的语法是这样的:

    chmod [-R] xyz 文件或目录

    选项与参数:
      xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
      -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
    # 举例来说,如果要将 .bashrc 这个文件所有的权限都设定启用,那么命令如下:
    [root@www ~]# ls -al .bashrc
    -rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
    [root@www ~]# chmod 777 .bashrc
    [root@www ~]# ls -al .bashrc
    -rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc
    
    #那如果要将权限变成 -rwxr-xr-- 呢?
    #那么权限的分数就成为 [4+2+1][4+0+1][4+0+0]=754。

    9、符号类型改变文件权限

    (1)我们可以使用 u, g, o 来代表三种身份的权限。此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:

      如果我们需要将文件权限设置为 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定:

    #  touch test1    // 创建 test1 文件
    # ls -al test1    // 查看 test1 默认权限
    -rw-r--r-- 1 root root 0 Nov 15 10:32 test1
    # chmod u=rwx,g=rx,o=r  test1    // 修改 test1 权限
    # ls -al test1
    -rwxr-xr-- 1 root root 0 Nov 15 10:32 test1

      而如果是要将权限去掉而不改变其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:

    # chmod  a-x test1
    # ls -al test1
    -rw-r--r-- 1 root root 0 Nov 15 10:32 test1

    10、每个文件的属性由左边第一部分的10个字符(如上的“dr-xr-xr-x”)来确定。我们把十个字符拆开看:

    # 1、10位字符表示:
        0位:确定文件类型
        1-3位:确定该文件的所有者对文件的权限 owner
        4-6位:确定所有者的同组用户拥有该文件的权限 group
        7-9位:确定其他用户拥有该文件的权限 others
    
    # 2、第一个字符:代表这个文件的类型,是目录、文件,还是一个链接等等
        [ d ] 目录
        [ - ] 文件
        [ l  ] 链接文档(link file)
        [ b ] 可供储存的接口设备(可随机存取装置)
        [ c ] 串行端口设备,例如键盘、鼠标(一次性读取装置)
    
    # 3、接下来的字符:以三个一组分成三组,用 r、w、x 三个参数的组合表示,位置不会改变
        [ r ] 代表可读(read)
        [ w ] 代表可写(write)
        [ x ] 代表可执行(execute)
        [ - ] 没有权限
    用户分为:
        owner [属主]
        group [属组]
        others [其他]
        all [所有用户]
    
    权限分为:
        r ==> 4
        w ==> 2
        x ==> 1
    
    1、设置属组语法
    chgrp [-R] 属组名 文件名
    // -R 代表递归,即目录下所有文件都会更改属性
    
    2、设置属主语法
    chown [-R] 属主名 文件名
    // -R 代表递归,即目录下所有文件都会更改属性
    
    3、更改文件9个属性语法
    (1)数字格式
    chmod [-R] xyz 文件名 
    // -R 代表递归,即目录下所有文件都会更改属性
    // x 代表属主权限
    // y 代表属组权限
    // z 代表其他权限
    
    (2)符号格式
    chmod [-R] u=rwx,g=rwx,o-rwx 文件名
    // -R 代表递归,即目录下所有文件都会更改属性
    // u 代表属主
    // g 代表属组
    // o 代表其他

    二、文件与目录管理

    1、处理目录的常用命令:

    ls(英文全拼:list files): 列出目录及文件名
    cd(英文全拼:change directory):切换目录
    pwd(英文全拼:print work directory):显示目前的目录
    mkdir(英文全拼:make directory):创建一个新的目录
    rmdir(英文全拼:remove directory):删除一个空的目录
    cp(英文全拼:copy file): 复制文件或目录
    rm(英文全拼:remove): 删除文件或目录
    mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称

    2、文件内容查看的常用命令:

    cat  由第一行开始显示文件内容
    tac  从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
    nl   显示的时候,顺道输出行号!
    more 一页一页的显示文件内容
    less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
    head 只看头几行
    tail 只看尾巴几行

    3、Linux 链接概念

      Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。

    (1)硬连接  ——  硬连接指通过索引节点来进行连接。

      在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。

      在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。

      删除其中任何一个都不会影响另外一个的访问。

      硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

    (2)软连接  ——  另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。

      在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

    (3)通过实验加深理解

    [oracle@Linux]$ touch f1          #创建一个测试文件f1
    [oracle@Linux]$ ln f1 f2          #创建f1的一个硬连接文件f2
    [oracle@Linux]$ ln -s f1 f3       #创建f1的一个符号连接文件f3
    [oracle@Linux]$ ls -li            # -i参数显示文件的inode节点信息
    total 0
    9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f1
    9797648 -rw-r--r--  2 oracle oinstall 0 Apr 21 08:11 f2
    9797649 lrwxrwxrwx  1 oracle oinstall 2 Apr 21 08:11 f3 -> f1

      从上面的结果中可以看出,硬连接文件 f2 与原文件 f1 的 inode 节点相同,均为 9797648,然而符号连接文件的 inode 节点不同。

    [oracle@Linux]$ echo "I am f1 file" >>f1
    [oracle@Linux]$ cat f1
    I am f1 file
    [oracle@Linux]$ cat f2
    I am f1 file
    [oracle@Linux]$ cat f3
    I am f1 file
    [oracle@Linux]$ rm -f f1
    [oracle@Linux]$ cat f2
    I am f1 file
    [oracle@Linux]$ cat f3
    cat: f3: No such file or directory

      通过上面的测试可以看出:当删除原始文件 f1 后,硬连接 f2 不受影响,但是符号连接 f1 文件无效。

    (4)总结:依此您可以做一些相关的测试,可以得到以下全部结论:

    • 删除符号连接f3,对f1,f2无影响;
    • 删除硬连接f2,对f1,f3也无影响;
    • 删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
    • 同时删除原文件f1,硬连接f2,整个文件会真正的被删除。

    三、用户和用户组管理

    1、Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

    2、Linux系统用户账号的管理

    (1)添加新的用户账号使用useradd命令,其语法如下

    useradd 选项 用户名
    
        -c comment 指定一段注释性描述。
        -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
        -g 用户组 指定用户所属的用户组。
        -G 用户组,用户组 指定用户所属的附加组。
        -s Shell文件 指定用户的登录Shell。
        -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
    # useradd –d  /home/sam -m sam
    # 此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录 /home/sam(/home为默认的用户主目录所在的父目录)

    (2)删除一个已有的用户账号使用userdel命令,其格式如下

    userdel 选项 用户名
    
    常用的选项是 -r,它的作用是把用户的主目录一起删除。 
    # userdel -r sam
    # 此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。 

    (3)修改已有用户的信息使用usermod命令,其格式如下:

    usermod 选项 用户名
    
    常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
    
    另外,有些系统可以使用选项:-l 新用户名

    (4)指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为

    passwd 选项 用户名
    
    可使用的选项:
        -l 锁定口令,即禁用账号。
        -u 口令解锁。
        -d 使账号无口令。
        -f 强迫用户下次登录时修改口令。

    3、Linux系统用户组的管理

      每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。

    (1)增加一个新的用户组使用groupadd命令。其格式如下:

    groupadd 选项 用户组
    
    可以使用的选项有:
        -g GID 指定新用户组的组标识号(GID)。
        -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

    (2)如果要删除一个已有的用户组,使用groupdel命令,其格式如下:

    groupdel 用户组

    (3)修改用户组的属性使用groupmod命令。其语法如下:

    groupmod 选项 用户组
    
    常用的选项有:
        -g GID 为用户组指定新的组标识号。
        -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
        -n新用户组 将用户组的名字改为新名字

    (4)如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。

    # 用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。例如:
    $ newgrp root

    4、与用户账号有关的系统文件

    (1)/etc/passwd 文件是用户管理工作涉及的最重要的一个文件。Linux系统中的每个用户都在 /etc/passwd 文件中有一个对应的记录行,它记录了这个用户的一些基本属性。这个文件对所有用户都是可读的。

    (2)用户组的所有信息都存放在/etc/group文件中。

      将用户分组是Linux 系统中对用户进行管理及控制访问权限的一种手段。每个用户都属于某个用户组;一个组中可以有多个用户,一个用户也可以属于不同的组。当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。用户组的所有信息都存放在/etc/group文件中。

  • 相关阅读:
    centos 用户管理
    rsync 实验
    文件共享和传输
    PAT 1109 Group Photo
    PAT 1108 Finding Average
    PAT 1107 Social Clusters
    PAT 1106 Lowest Price in Supply Chain
    PAT 1105 Spiral Matrix
    PAT 1104 Sum of Number Segments
    PAT 1103 Integer Factorization
  • 原文地址:https://www.cnblogs.com/goloving/p/15201533.html
Copyright © 2011-2022 走看看