【Linux】之文件目录的权限管理

本文介绍了Linux系统中的root用户及其权限,包括对系统设置、文件访问和系统操作的全面控制。sudo命令允许普通用户以root权限执行特定命令。文章还讨论了Shell的基本概念,如命令行、Bash以及通配符的使用。此外,详细阐述了文件和目录的管理,包括创建、移动、复制、删除,以及权限设置,如chown、chgrp和chmod。最后提到了管道操作在命令链中的作用。
摘要由CSDN通过智能技术生成

1 root用户

root用户(亦称超级用户与根用户),所有的系统设置都需要root用户完成,即表示root用户可以做任何事,拥有整个系统中的最高权限。

root可以访问、修改、删除系统中的任何文件和目录。另外对于以下受限的操作,一般也只有root用户可以执行:

  • 添加/删除用户

  • 安装软件

  • 添加/删除设备

  • 启动/停止网络服务

  • 某些系统调用(例如对内核的请求)

  • 关闭系统(尽管桌面版的Linux允许普通用户在图形界面下关闭系统,但是在命令行下执行关机命令仍然需要root口令)

  • 为什么像关闭系统这样的操作都需要root用户执行?

    作为Linux的祖先,UNIX是一种典型的服务器操作系统,服务器的关闭和启动都需要得到管理员的授权,普通用户无法随意关闭服务器。

  • root用户与其他用户的区别?

    Linux系统上每个文件和目录都属于某个特定的用户,没有得到许可,其他用户不能访问这些对象。但是root用户可以访问所有用户的文件。

2 受限的特权:sudo

对于一个普通用户,使用sudo命令,可以使他临时使用root权限运行一个程序,并在程序执行完成后返回至普通用户状态。sudo命令接受命令行作为参数,在执行命令前,要求用户输入自己的口令,处于安全性考虑,如果用户在一短时间内没有再次使用sudo,那么此后必须再次输入指令。

管理员可以通过配置/etc/sudoers指定yoghurt可以执行的特权命令。

3 Shell基本命令

什么是Shell?
Shell是一种命令解释器。从本质上说,Shell是一种程序,它在用户和操作系统之间提供了一个面向行的可交互接口。用户在命令行中输入命令,运行在后台的Shell将命令转换成指令代码发送给操作系统。

命令行和Shell的区别?
在很多不正式的场合,这两个名词代表相同的概念,即命令解释器。

严格意义上说,命令行指的是供用户输入命令的界面,其本身只是接受输入,然后把命令传递给命令解释器,即Shell。

目前,Linux环境下多种不同的 Shell 可供选择,如Bash(Bourne Again Shell),Z Shell。BASH是默认的Shell。

在BASH中,命令行以 $ 作为提示符,如果正在以root身份执行命令,那儿Shell提示符就将成为 #。在BASH的 $ 符号前,一般还会有一段信息,包含用户名、主机名和当前的目录。例如:

dyson@dyson-laptop:/home$

3.1 浏览硬盘

  1. 首先进入根目录并列出文件和目录:

    $ cd /
    $ ls     #列出文件和目录
    bin    dev   lib    libx32      mnt   root  snap      sys  var
    boot   etc   lib32  lost+found  opt   run   srv       tmp
    cdrom  home  lib64  media       proc  sbin  swapfile  usr
    
  2. 进入home,这个目录存放系统中所有用户的主目录。主目录的名字就是用户名。

    $ cd home/
    dyson
    

在我自己的计算机上,只有一个用户dyson。

  1. 可以使用不带任何参数的cd命令进入用户主目录,主目录下存放的是一些配置文件和用户的私人文件。用户主目录默认对其他用户关闭访问权限。

    $ cd
    $ ls
    Desktop    Downloads  Music          Pictures  snap       Videos
    Documents  eigen      PersonalFiles  Public    Templates
    
  2. 进入/etc目录中,该目录存放系统以及绝大部分应用软件的配置文件。不同于Windows,Linux使用纯文本文件来配置软件,修改配置文件可以很方便地对软件进行订制。

    $ cd /etc/
    acpi                           hostname             profile
    adduser.conf                   hosts                profile.d
    alsa                           hosts.allow          protocols
    alternatives                   hosts.deny           pulse
    anacrontab                     hp                   python2.7
    ···
    
  3. 查看目录/etc下的文件fstab,其中定义各硬盘分区所挂载到的目录路径。

    $ cat fstab
    # /etc/fstab: static file system information.
    #
    # Use 'blkid' to print the universally unique identifier for a
    # device; this may be used with UUID= as a more robust way to name devices
    # that works even if disks are added and removed. See fstab(5).
    #
    # <file system> <mount point>   <type>  <options>       <dump>  <pass>
    # / was on /dev/sda3 during installation
    UUID=030b3790-0437-44f3-b6a8-0f294e55a9f1 /   ext4    errors=remount-ro 0   1
    # /boot/efi was on /dev/sda2 during installation
    UUID=8371-9200  /boot/efi   vfat    umask=0077      0       1
    /swapfile       none     swap    sw    0       0
    /dev/fd0      /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0
    

3.2 通配符

Shell有一套被称作通配符的专用符号,包括*[]

  1. * 用于匹配文件名中任意长度的字符串。(例如列出目录中所有的C++文件,通常以.cpp结尾)

    $ ls
    main.cpp makefile quicksort.cpp quicksort.h
    $ ls *.cpp
    main.cpp quicksort.cpp
    
  2. 用于匹配一个字符,如下面例子, 用于匹配文件名中以text开头而后跟一个字符的文件。

    $ ls
    text1 text2 text3 textA textB textC text_one text_two
    $ ls text?
    text1 text2 text3 textA textB textC
    
  3. [] 用于匹配所有出现在方括号内的字符。例如,需要列出以text开头而仅以1或A结束的文件名。

    $ ls
    text1 text2 text3 textA textB textC text_one text_two
    $ ls text[1A]
    text1 textA
    

    也可以使用短线- 来指定一个字符集的范围。

    $ ls text[1-3]
    text1 text2 text3
    

3.3 查看目录和文件

  1. pwd命令会显示当前所在的工作目录。
  2. cdcd~ 用于回到自己的用户主目录。
  3. ls 命令列出当前目录下的所有文件和子目录。默认情况下,目录显示为蓝色;普通文件黑色;可执行文件草绿色;淡蓝色表示该文件是一个链接文件(相当于Windows下的快捷方式)。
    • $ ls -F 会在每个目录后加上/, 在可执行文件后加*,在连接文件后加上@
    • $ ls -a 用于显示所有文件,包含隐含文件,通常以头部带.开始,如./local/。
    • $ ls -l 用于查看文件的各种属性。

3.4 查找文件

  1. find命令可以在指定范围内查找文件,如:

    $ find /user/bin -name zip -print
    
  • 首先需要指定一个path作为查找范围,此处是/user/bin
  • -name 指定文件名,为zip
  • -print 将结果输出到标准输出,结果打印文件的绝对路径

此外,find命令还可以指定文件的类型,使用-type选项来定位特殊文件类型。

  1. locate 允许更加快速的定位文件。如

    $ locate *.doc   # 检索.doc文件
    

locate并没有进入子目录搜索,而是自动建立整个文件名数据库,通过检索文件名数据库来确定文件的位置。$ updatedb命令可以立刻生成该数据库文件的最新版本,需要root权限。

3.5 查找特定程序

  1. whereis命令用于查找程序文件,并提供这个文件的二进制可执行文件、源代码文件和使用手册页存放的位置。例如查找find命令:

    $ whereis find
    find: /usr/bin/find /usr/share/man/man1/find.1.gz /usr/share/info/find.info.gz /usr/share/info/find.info-2.gz /usr/share/info/find.info-1.gz
    
  2. 增加选项-b可以让whereis命令只查找这个程序的二进制可执行文件。

    $ whereis -b find
    find: /usr/bin/find
    
  3. 如果whereis无法找到文件,返回一个空字符串。whereis命令检索的子目录是固定编写在它的程序中的,但搜索限制在固定的子目录如/usr/bin、/usr/sbin和/usr/share/man中可以显著加快文件查找的速度。

3.6 获取帮助

  1. man命令用于获取某个命令的帮助信息。

    $ man find
    FIND(1)                     General Commands Manual                    FIND(1)
    
    NAME
           find - search for files in a directory hierarchy
    
    SYNOPSIS
           find  [-H]  [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [ex‐
           pression]
    
    DESCRIPTION
           This manual page documents the GNU version of find.  GNU find  searches
           the  directory  tree  rooted at each given starting-point by evaluating
           the given expression from left to right,  according  to  the  rules  of
           precedence  (see  section  OPERATORS),  until the outcome is known (the
           left hand side is false for and operations,  true  for  or),  at  which
           point  find  moves  on  to the next file name.  If no starting-point is
           specified, `.' is assumed.
    ···
    
  2. whatis命令返回一行简单的介绍性文字,帮助用户大概了解程序的用途。其原理同locate命令一致。

    $ whatis find
    find (1)             - search for files in a directory hierarchy
    

4 文件目录管理

不同于Windows,Linux使用正斜杠/而不是反斜杠\来标识目录

4.1 建立目录和文件

  1. 创建目录

    • mkdir命令可以一次建立一个或几个目录。例如

      $ mkdir document picture
      
    • 使用选项-p可以完整地创建一个子目录结构。

      $ mkdir -p ~/tempx/job
      

      `在该例中,会现在用户主目录下先创建tempx,再创建job。

  2. 创建文件

    • touch命令用于创建一个空文件,如:

        $ touch hello    # 建立一个名为hello的文件
      
    • 此外touch命令还可以更新一个文件的建立日期和时间

4.2 移动、复制和删除

  1. mv命令可以在移动文件和目录的同时对其重命名。

    • 移动文件和目录。

      $ mv hello bin/  # 移动文件hello到bin/中
      $ mv Photos/ home/   # 移动目录Photos/到home/
      
  2. mv命令会对同名文件直接进行替换而不给出任何警告。增加选项-i可以给出提醒。

    $ mv -i hello test/
    mv:是否覆盖"test/hello"
  3. Linux没有重命名命令,因为重命名就是将一个文件在一个目录中移动。

4.3 删除目录和文件

  1. rm命令可以一次删除一个或几个文件,并不做任何提示,通过rm命令删除的文件将永远地从系统中消失了,而不是被放入一个称作“回收站”的临时目录下。

    $ rm test/*.jpg      #删除test目录下所有的.jpg文件
    
    • 使用选项 -i可以在删除文件前给出提示,并等待用户确认。

    • 使用选项 -f可以避免这样的交互式操作,自动对这些问题回答y。

    • 使用选项-r可以递归地删除目录下所有的文件和子目录,即将目标目录下所有的子目录和文件完整地从磁盘上删除。

4.4 文件和目录的权限

  1. Linux为3种人准备了权限——文件所有者(属主)、文件属组用户和其他人。root不包含在其他人中。文件的创建者自动成为文件的属主,文件的所有权可以转让,只能由root用户办理转让手续。

  2. 赋予用户对文件和目录的权限有三种:读取(r)、写入(w)和执行(x)。

    • 对于文件而言,是否能够删除和重命名一个文件则是由其父目录的权限设置所控制的。
    • 要让一个文件可执行,必须设置其权限。可执行文件有两类:一类是可以直接由CPU执行的二进制代码;另一类是Shell脚本程序。
    • 对目录而言,执行权限实际控制了用户能否进入该目录。
  3. 查看文件和目录的属性

    • 使用带选项-lls命令可以查看一个文件的属性,包括权限。

      $ ls -l /bin/login
      -rwxr-xr-x 1 root root 52976 1124  2022 /bin/login
      
      • 第一个字段表示文件的类型, - 表示普通文件,类似的如d表示目录。
      • rwxr-xr-x是三组权限位,代表属主拥有rwx三个权限,属组拥有rx权限,其他人拥有rx权限。
    • 使用选项-ld可以查看一个目录的属性,如:

      $ ls -ld /etc
      
  4. 改变文件所有权:chown和chgrp

    • chown命令用于改变文件的所有权。

      $ sudo chown lewis:root days   #将文件days的属主改为lewis,属组改为root组
      $ sudo chown guest days   #将文件days的属主改为guest,属组不变
      $ sudo chown :nogroup days   # 将文件days的属组改为nogroup,属主不变
      

      -R选项,用于改变一个目录及其下所有文件(和子目录)的所有权设置。

           $ sudo chown -R lewis iso/   # 将iso/和其下所有的文件交给用户lewis
      
    • chgrp命令用于设置文件的属组,只是实现了chown命令的部分功能,但命名更为直观。

  5. 改变文件的权限:chmod

chmod命令用于改变一个文件的权限。

  • “用户组+/-权限”表示

    用户组包括文件属主(u)、文件属组(g)、其他人(o)和所有人(a);权限规则包括读取(r)、写入(w)、执行(x)。只有文件的属主和root用户有权修改文件的权限。

    $ chmod u+x days   # 增加属主对文件days的执行权限
    $ chmod a-x days   # 删除所有人对于文件days 的执行权限
    
  • “八进制”表示

    八进制二进制权限八进制二进制权限
    0000- - -4100r - -
    1001- - x5101r - x
    2010- w -6110r w -
    3011- w x7111r w x

    例如‘’rwx–x–x‘’就对应”711”.

    	$ chmod 711 prog    # 用八进制语法设置文件权限,设置后的文件权限为"rwx--x--x"
    
  1. 管道: |

管道 | 将一条命令的输出连接到另一条命令输入。如下面命令在文件列表中查找文件名中包含某个特定字符串的文件。

$ ls | grep ay    # 在所有文件中,查找包含字符"ay"的文件

Reference

[1]刘忆智.Linux从入门到精通.第2版[M].清华大学出版社,2014.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值