Linux篇【2】:shell命令初步认识,Linux权限(上)

news/2024/5/20 5:11:11/文章来源:https://blog.csdn.net/lcc11223/article/details/127194081

目录

1、shell命令以及运行原理

2、Linux权限的概念

3、Linux权限管理

3.1、文件访问者的分类(人)

3.2、文件类型和文件权限属性(事物属性)


1、shell命令以及运行原理

    Linux严格意义上说的是一个操作系统,我们称之为" 核心(kernel) " ,但我们的用户不能直接使用kernel,    而是通过kernel的"外壳"程序,也就是所谓的shell指令,来与kernel沟通,如何理解?为什么不能直接使用kernel?

从技术角度,shell的最简单定义:命令行解释器(command Interpreter)主要包含:
1、将使用者的命令翻译给核心(kernel)处理、
2、同时,将核心的处理结果翻译给使用者、
    对比Windows GUI,我们操作Windows 不是直接操作Windows内核,而是通过图形接口,点击,从而完成我们的操作,比如进入D盘的操作,我们通常是双击D盘盘符,或者运行起来一个应用程序、
    shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核,反馈结果再通过内核运行出结果,通过shell 解析给用户、

    严格意义上来讲,我们之前所讲的操作系统重点指的是Linux内核,也叫作核心,即:Kernel,一般来说,用户是不直接使用Kernel的,因为不擅长,而是通过一个叫做外壳的程序,在Linux系统下,所谓的外壳程序就是shell指令,所以,在Linux系统下,用户时通过shell指令来与操作系统进行沟通的,shell指令(Linux系统下的外壳程序),是用来传递用户指令,交给操作系统(OS),操作系统执行完毕后,再把结果交给shell指令(Linux系统下的外壳程序),最后,shell指令(Linux系统下的外壳程序)再交给用户,在Linux系统下,所谓的外壳程序就是命令行解释器,也就是shell指令,而在Windows系统下,外壳程序就是图形化界面,即,图形化界面就是Windows系统下的外壳程序,当然除此之外,在Windows操作系统中也可以使用指令来操作Windows系统,但图形化界面不属于Windows操作系统内核的一部分,Linux系统中也可以带图形化界面,Linux系统下的图形化界面不属于Linux操作系统内核的一部分、

Linux系统中,shell指令(Linux系统下的外壳程序)存在的意义:

1、降低操作OS的成本

2、保护操作系统,如果用户执行非法操作,外壳程序则可以直接拦截、

由上可知,Windows系统中的外壳程序或命令行解释器存在的意义也是如此、

关于shell命令以及运行原理剩下的内容会在建伟干进程概念之后再进行具体的阐述、

    在Linux系统中,shell 指令叫做外壳程序,也可叫做命令行解释器,但要知道,shell 命令是外壳程序和命令行解释器的统称,我们具体使用的外壳程序或命令行解释器是bash指令,该指令是 /usr/bin 路径下的一个可执行程序,即,我们 centos 7 常用的具体的外壳程序或命令行解释器是bash指令,其次,sh指令也是一种具体的外壳程序或命令行解释器、


2、Linux权限的概念

Linux系统下有两种用户:超级用户(root)、普通用户、
超级用户:可以在Linux系统下做任何事情,不受限制、
普通用户:在Linux系统下做有限的事情、
超级用户的命令行提示符是"#",普通用户的命令行提示符是"$",如下所示:
命令:su [用户名]
功能:切换用户,但不会改变路径、
    例如,要从 root 用户切换到普通用户 user,则使用 su user, 要从普通用户 user 切换到 root 用户则使用 su root(root可以省略),此时系统会提示输入 root 用户的密码、
//1、超级用户
[root@hjmlcc ~]# whoami
root
[root@hjmlcc ~]# pwd
/root
[root@hjmlcc ~]# //2、普通用户
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ 

    root 用户只能有一个,而普通用户则可以有多个,在Windows系统下,以管理员身份运行就类似于Linux系统中的 root 用户,在Linux系统下,root用户拥有最高的权限,而普通用户最典型的特征就是,其权限受管控,受约束、

[HJM@hjmlcc ~]$ whoami  //此行中的~代表的是家目录,若是root用户,家目录就是/root,若是普通用户
//家目录就是/home/HJM,以普通用户HJM为例、
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM              //注意:指令su代表切换用户,-代表是root用户,su -代表的就是将当前用户切换//到root用户,此指令会切换用户到root用户,也会改变路径、
[HJM@hjmlcc ~]$ su -   //指令su -的作用就是将当前用户切换到root用户,若当前用户是普通用户,则需要
//在下面输入root用户的密码,即可切换到root用户,如下所示:
Password: 
Last login: Sat Oct  8 14:27:59 CST 2022 on pts/0
[root@hjmlcc ~]# pwd
/root  //会改变路径、
[root@hjmlcc ~]# su -  //若当前用户已经是root用户,若再执行su -指令,也会将当前用户切换到root用户
//并且也会改变路径到切换到的用户的家目录下、//注意:最好不要把root用户的密码和普通用户的密码设置成一样的、//注意:指令su root和指令su的作用是一样的,都是将当前用户切换到root用户,但是与指令su -不同的是,这
//两条指令只起到切换用户的作用,并不会改变路径到切换到的用户的家目录下、[root@hjmlcc ~]# whoami
root
[root@hjmlcc ~]# pwd
/root
[root@hjmlcc ~]# su HJM  //把当前用户(root用户)切换到普通用户HJM,但是不会改变路径到普通用户
//HJM的家目录/home/HJM下、
[HJM@hjmlcc root]$ whoami
HJM
[HJM@hjmlcc root]$ pwd   //路径仍是/root,并没有发生改变、
/root
[HJM@hjmlcc root]$ ls    //由于此时使用的是普通用户HJM,但是路径仍是/root,所以任何指令都是不
//能执行的,因为权限不够,这就需要后期的sudo指令来提升权限,具体在后面再进行阐述、
ls: cannot open directory .: Permission denied
[HJM@hjmlcc root]$ mkdir lcchjm
mkdir: cannot create directory ‘lcchjm’: Permission denied
[HJM@hjmlcc root]$ [root@hjmlcc ~]# whoami
root
[root@hjmlcc ~]# pwd
/root
[root@hjmlcc ~]# cd ..
[root@hjmlcc /]# pwd
/
[root@hjmlcc /]# ls
bin   data  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
boot  dev   home  lib64  media       opt  root  sbin  sys  usr
[root@hjmlcc /]# cd home
[root@hjmlcc home]# pwd
/home
[root@hjmlcc home]# ls
hjm  HJM
[root@hjmlcc home]# cd HJM
[root@hjmlcc HJM]# pwd
/home/HJM
[root@hjmlcc HJM]# ls
code  hjm  lcc  LCC  lcc.c
[root@hjmlcc HJM]# touch HJM.c
[root@hjmlcc HJM]# ls
code  hjm  HJM.c  lcc  LCC  lcc.c
[root@hjmlcc HJM]# //此时可以使用root用户在普通用户HJM的家目录(/home/HJM)下执行指令,这是因为,root用户的权限不受
//任何限制、//注意:当进行用户切换时,不管该过程中会不会改变路径,exit和ctrl+d,两个指令都会返回到切换用户之
//前的用户和之前的路径下、
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ su hjm
Password:                     //不知道密码、
su: Authentication failure    //认证错误、
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ su -
Password:   
Last login: Sat Oct  8 17:05:01 CST 2022 on pts/0
[root@hjmlcc ~]# whoami
root
[root@hjmlcc ~]# pwd
/root
[root@hjmlcc ~]# su hjm
[hjm@hjmlcc root]$ whoami
hjm
[hjm@hjmlcc root]$ pwd
/root
[hjm@hjmlcc root]$ ls
ls: cannot open directory .: Permission denied
[hjm@hjmlcc root]$ cd ~
[hjm@hjmlcc ~]$ whoami
hjm
[hjm@hjmlcc ~]$ pwd
/home/hjm
[hjm@hjmlcc ~]$ ls
[hjm@hjmlcc ~]$ touch lcc.c
[hjm@hjmlcc ~]$ ls
lcc.c
[hjm@hjmlcc ~]$ 
//由此可知,root用户的权限十分大,不受任何限制、
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ su  //将当前普通用户HJM切换到root用户,但是路径不变,仍是/home/HJM
Password: 
[root@hjmlcc HJM]# whoami
root
[root@hjmlcc HJM]# pwd
/home/HJM
[root@hjmlcc HJM]# exit  
//此时由于在刚才的su指令之前还存在一个普通用户HJM和其对应的路径/home/HJM,所以
//此处的指令exit的作用是返回到su指令之前的普通用户HJM以及对应的路径/home/HJM下、
exit
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ exit
//而在su指令之前存在的普通用户HJM和其对应的路径/home/HJM,再往前就不存在用户和该用户对应的
//路径了,所以,此处的指令exit的作用就是退出su指令之前存在的普通用户HJM,还要知道,ctrl+d的
//原理和指令exit的原理是一样的、
logoutConnection closed.Disconnected from remote host(新建会话) at 17:17:54.Type `help' to learn how to use Xshell prompt.
[C:\~]$ 

3、Linux权限管理

[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM        //ll指令和ls -l指令的作用是一样的,具体的实现原理在后期阐述环境变量时再说、
[HJM@hjmlcc ~]$ ls
code  hjm  HJM.c  lcc  LCC  lcc.c
[HJM@hjmlcc ~]$ ll
total 16         //下面全是文件的属性,其中,目录也算文件,属于目录文件、
drwxrwxr-x 3 HJM  HJM  4096 Oct  8 15:24 code
drwxrwxr-x 2 HJM  HJM  4096 Oct  6 17:32 hjm
-rw-r--r-- 1 root root    0 Oct  8 16:39 HJM.c
drwxr-xr-x 2 root root 4096 Oct  8 15:42 lcc
drwxrwxr-x 3 HJM  HJM  4096 Oct  6 19:47 LCC
-rw-r--r-- 1 root root    0 Oct  8 15:58 lcc.c
[HJM@hjmlcc ~]$ ls -l
total 16         //下面全是文件的属性,其中,目录也算文件,属于目录文件、
drwxrwxr-x 3 HJM  HJM  4096 Oct  8 15:24 code
drwxrwxr-x 2 HJM  HJM  4096 Oct  6 17:32 hjm
-rw-r--r-- 1 root root    0 Oct  8 16:39 HJM.c
drwxr-xr-x 2 root root 4096 Oct  8 15:42 lcc
drwxrwxr-x 3 HJM  HJM  4096 Oct  6 19:47 LCC
-rw-r--r-- 1 root root    0 Oct  8 15:58 lcc.c
[HJM@hjmlcc ~]$ touch lcc.txt
[HJM@hjmlcc ~]$ nano lcc.txt
[HJM@hjmlcc ~]$ cat lcc.txt
xxxx    //文件的内容、
[HJM@hjmlcc ~]$ 

[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
lcc.c
[HJM@hjmlcc ~]$ cat lcc.c
#include<stdio.h>
int main()
{printf("Hello,lcc\n");return 0;
}
[HJM@hjmlcc ~]$ gcc lcc.c  
[HJM@hjmlcc ~]$ ls
a.out  lcc.c
[HJM@hjmlcc ~]$ mv a.out a.exe
[HJM@hjmlcc ~]$ ls
a.exe  lcc.c
[HJM@hjmlcc ~]$ ./a.exe
Hello,lcc
[HJM@hjmlcc ~]$ mv a.exe a.txt
[HJM@hjmlcc ~]$ ls
a.txt  lcc.c
[HJM@hjmlcc ~]$ ./a.txt
Hello,lcc
[HJM@hjmlcc ~]$         //注意:虽然这里a.exe和a.txt都可以,但我们最好还是使用a.out、//在Linux系统下,不是以文件名的后缀来区分文件类型的、
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
lcc.c
[HJM@hjmlcc ~]$ ll  //或ls -l
total 4
-rw-rw-r-- 1 HJM HJM 74 Oct  8 18:04 lcc.c
//gcc lcc.c是可以成功的,lcc.c是用来存放c语言代码的普通源文件,由于linux系统下不以文件后缀作为
//区分文件类型的标准,经过下述指令,所以对于普通文件lcc.txt来说,仍会被linux系统看做是存放c语言代
//码的源文件、
[HJM@hjmlcc ~]$ mv lcc.c lcc.txt
[HJM@hjmlcc ~]$ ls
lcc.txt
[HJM@hjmlcc ~]$ ll  //或ls -l
total 4
-rw-rw-r-- 1 HJM HJM 74 Oct  8 18:04 lcc.txt
[HJM@hjmlcc ~]$ gcc lcc.txt
//不是说Linux系统不以文件的后缀来区分文件类型吗,那么这里为什么会报错呢?
//答:gcc不是Linux系统,Linux系统中的确不以文件的后缀来区分文件类型,但是gcc不是Linux系统,gcc只
//是在Linux系统上部署的一个编译器软件,所以gcc是会根据文件的后缀来区分文件类型的,除了gcc,还有
//其他的在Linux系统上的软件,也有可能会根据文件的后缀来区分文件的类型,是软件自己的特殊需求导
//致的,此处的普通文件lcc.txt在gcc眼里并不是存放c语言代码的源文件,而是认为它是一个普通文本文件,
//所以在linux系统下,要想使得gcc认为某一个普通文件是存放c语言代码的源文件,则该普通文件的后缀必
//须是.c才可以、
lcc.txt: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status  //当前不能识别lcc.txt普通文件、
[HJM@hjmlcc ~]$ 

     操作系统是一款软件,也是一种层状结构,目前而言,可以理解为,操作系统间接管理硬件,本质上操作系统是通过软件的方式来管理硬件的,在Linux系统中,一般来说,私密文件和系统本身的一些配置文件(防止用户做误删操作),通常以 . 开头,将其隐藏起来、

[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ mkfifo pipe  //创建管道文件,在后期的进程和通信中会阐述管道文件的作用、
[HJM@hjmlcc ~]$ ls
lcc.c  pipe
[HJM@hjmlcc ~]$ ll
total 4
-rw-rw-r-- 1 HJM HJM 74 Oct  8 18:04 lcc.c
prw-rw-r-- 1 HJM HJM  0 Oct  9 15:15 pipe   //prw-rw-r-- 1,以p开头、
[HJM@hjmlcc ~]$ 

[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        989M     0  989M   0% /dev
tmpfs          1000M   24K 1000M   1% /dev/shm
tmpfs          1000M  540K  999M   1% /run
tmpfs          1000M     0 1000M   0% /sys/fs/cgroup
/dev/vda1        40G  4.8G   33G  13% /
tmpfs           200M     0  200M   0% /run/user/0
tmpfs           200M     0  200M   0% /run/user/1002
[HJM@hjmlcc ~]$ ls /dev/vda1
/dev/vda1
[HJM@hjmlcc ~]$ ls /dev/vda1 -l
brw-rw---- 1 root disk 253, 1 Jul 28 11:13 /dev/vda1   //  /dev/vda1 就是磁盘,以b开头,一般把磁盘叫做块设备、
[HJM@hjmlcc ~]$ 
//在后期讲文件系统和数据库时,会对磁盘和文件系统做详细的介绍、

Linux系统上的权限,都是对文件的权限、

什么是权限:

1、约束人的(对人进行分类),不同的人具有不同的权限、

2、需要对应的事物具有特定的属性,比如文件应该具有的属性有:r,w,执行(x),这些属性只是用来约束普通用户(普通用户之间互相约束)的,对root用户不起任何作用、

权限 = 人 + 事物属性 ,权限的概念以及操作都是围绕着人和文件属性进行展开的、

3.1、文件访问者的分类(人)

在Linux系统中,人分三类:

文件和文件目录的所有者(拥有者)或文件的拥有者:owner

文件和文件目录的所有者(拥有者)所在的整个组(包括拥有者自身)或文件的所属组:grouper
文件和文件目录的其它用户或文件的其他用户:others 

3.2、文件类型和文件权限属性(事物属性)

Linux系统中,文件的权限属性主要分为:r,w,x(可执行),原本是4个,目前只谈这三个、
Linux系统下常见的文件类型补充:
l:软链接(类似Windows的快捷方式)、
b:块设备文件(例如硬盘、光驱,最典型的就是磁盘)、
c:字符设备文件(例如屏幕等串口设备)、
s:套接口文件、
基本权限:
1、读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限、
2、写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限、
3、执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限、
4、"—"表示不具有该项权限、

文件权限的修改方法:

1、方法一:

[HJM@hjmlcc ~]$ whoami
HJM      //由指令whoami可得,当前正在使用的用户是普通用户HJM,而对于普通文件lcc.c而言,该普通文件的拥有者
//是普通用户HJM,并且该普通文件的拥有者,即普通用户HJM所在的所属组的组名也是HJM,其次,由于该所属
//组中只有普通用户HJM一个成员,此时系统默认该所属组的组名和普通用户HJM同名,当然,我们也可以对该
//所属组的组名进行重命名,对于普通文件lcc.c而言,拥有者,即普通用户HJM也在该普通文件的所属组里,
//但要注意的是,此时对于普通用户HJM(普通文件的拥有者)仍要按照拥有者的权限来做,而对于该普通文件
//lcc.c的所属组里除了该普通文件lcc.c的拥有者(普通用户HJM)之外的所有的普通用户对该普通文件
//lcc.c的权限一律要按照该普通文件lcc.c的所属组的权限来做,其次,我们也可以向普通文件lcc.c的所属
//组里添加其他的普通用户,并且此时还可以修改所属组的组名,具体修改的操作在后期进行阐述、[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
code  lcc.c
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
-rw-rw-r-- 1 HJM HJM   74 Oct  8 18:04 lcc.c  //普通文件lcc.c的拥有者和所属组都是HJM,其中,拥有者具有的权限是rw-,所属组具有的权限是rw-,其他用户具有的权限是r--、
[HJM@hjmlcc ~]$ ./lcc.c    //执行普通文件lcc.c、
-bash: ./lcc.c: Permission denied  //普通文件lcc.c的拥有者不具有可执行的权限,所以此时会报权限不够、
[HJM@hjmlcc ~]$ cat lcc.c  
#include<stdio.h>
int main()
{printf("Hello,lcc\n");return 0;
}
[HJM@hjmlcc ~]$ echo "hello,lcc" > lcc.c
[HJM@hjmlcc ~]$ cat lcc.c
hello,lcc
[HJM@hjmlcc ~]$ chmod u-r lcc.c  //u代表文件的拥有者,-代表减去,r代表可读,chmod指令代表修改
//权限,即:使得普通文件lcc.c的拥有者失去可读的权限、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
--w-rw-r-- 1 HJM HJM   10 Oct  9 18:15 lcc.c
[HJM@hjmlcc ~]$ chmod g-r lcc.c  //g代表文件的所属组,-代表减去,r代表可读,chmod指令代表修改
//权限,即:使得普通文件lcc.c的所属组失去可读的权限、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
--w--w-r-- 1 HJM HJM   10 Oct  9 18:15 lcc.c
[HJM@hjmlcc ~]$ chmod o-r lcc.c  //o代表文件的其他用户,-代表减去,r代表可读,chmod指令代表修改
//权限,即:使得普通文件lcc.c的其他用户失去可读的权限、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
--w--w---- 1 HJM HJM   10 Oct  9 18:15 lcc.c
[HJM@hjmlcc ~]$ chmod u+xr lcc.c  //u代表文件的拥有者,+代表增加,r代表可读,x代表可执行,chmod指令代表修改权限,即:使得普通文件lcc.c的拥有者增加可读和可执行的权限,此处可以写成最好u+rx、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
-rwx-w---- 1 HJM HJM   10 Oct  9 18:15 lcc.c
[HJM@hjmlcc ~]$ ./lcc.c   //此处的./代表是当前目录,代表运行可执行程序,但是lcc.c普通文件并不
//是可执行程序,要想验证linux系统下不以文件的后缀来区分文件类型,在此处必须要保证./后面跟的是一
//个可执行程序(普通文件)才可以,然后通过重命名(主要是重命名后缀)的方式去验证linux系统下不以文件
//的后缀来区分文件类型,而此时的普通文件lcc.c并不是一个可执行程序,所以会报错,但该错误并不是由权
//限造成的、
./lcc.c: line 1: hello,lcc: command not found
[HJM@hjmlcc ~]$ chmod g+r lcc.c
[HJM@hjmlcc ~]$ ll
total 20
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
-rwxrw---- 1 HJM HJM   75 Oct  9 18:46 lcc.c
[HJM@hjmlcc ~]$ chmod o+rwx lcc.c
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
-rwxrw-rwx 1 HJM HJM   75 Oct  9 18:46 lcc.c
[HJM@hjmlcc ~]$ chmod u-wx,g-w,o-rwx lcc.c    //wx和rwx两者中的顺序是可以任意组合的、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
-r--r----- 1 HJM HJM   75 Oct  9 18:46 lcc.c
[HJM@hjmlcc ~]$ chmod u+rwx,g+rwx,o+rwx lcc.c
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
-rwxrwxrwx 1 HJM HJM   75 Oct  9 18:46 lcc.c
[HJM@hjmlcc ~]$ chmod u-rwx,g-rwx,o-rwx lcc.c
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 HJM HJM   75 Oct  9 18:46 lcc.c
[HJM@hjmlcc ~]$ chmod u+r,o+r lcc.c
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code     //文件的权限是用来约束普通用户的,对root用户//不起任何作用、
-r-----r-- 1 HJM HJM   75 Oct  9 18:46 lcc.c
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
-r-----r-- 1 HJM HJM   75 Oct  9 18:46 lcc.c
//此时,普通文件lcc.c的拥有者是HJM,所属组也是HJM,所以对于该普通文件lcc.c而言,root用户就是文件
//的其他用户、
[HJM@hjmlcc ~]$ su
Password: 
[root@hjmlcc HJM]# ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
-r-----r-- 1 HJM HJM   75 Oct  9 18:46 lcc.c
[root@hjmlcc HJM]# whoami
root
[root@hjmlcc HJM]# pwd
/home/HJM
[root@hjmlcc HJM]# cat lcc.c   //可读、
#include<stdio.h>
int main()
{printf("Hello,lcc\n");return 0;
}[root@hjmlcc HJM]# echo "hello" >> lcc.c
//此时,普通文件lcc.c的拥有者和所属组都是HJM,那么对于普通文件lcc.c而言,root用户就是其他用户,
//而其他用户的权限是可读,不可写,不可执行,但是此处发现能够写,这是为什么呢?
//由此可知,文件的权限是用来约束普通用户的,对root用户不起任何作用、
[root@hjmlcc HJM]# cat lcc.c 
#include<stdio.h>
int main()
{printf("Hello,lcc\n");return 0;
}hello
[root@hjmlcc HJM]# //如果某一个文件的拥有者和所属组都是root用户,那么该文件的权限是否能够约束root用户呢,答案是不能
//这就是超级用户root、

2、方法二:

[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
code  lcc.c
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
-rwx---r-- 1 HJM HJM   75 Oct  9 21:14 lcc.c
[HJM@hjmlcc ~]$ chmod 777 lcc.c//注意:777分别是三个八进制的数字,转换成三个对应的二进制数字为:111 111 111,即每一组111分别对应
//着普通文件lcc.c的拥有者,所属组,其他用户对普通文件lcc.c的权限,只以普通文件lcc.c的拥有者对于普
//通文件lcc.c的权限为例,111,第一个1代表的是普通文件lcc.c的拥有者对于普通文件lcc.c具有可读的权
//限,第二个和第三个1,分别代表着普通文件lcc.c的拥有者对普通文件lcc.c具有可写,可执行的权限,即普
//通文件lcc.c的拥有者对于普通文件lcc.c具有可读,可写,可执行的权限,同样,普通文件lcc.c的所属组和
//其他用户对于普通文件lcc.c的权限可以类比来看、[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
-rwxrwxrwx 1 HJM HJM   75 Oct  9 21:14 lcc.c
[HJM@hjmlcc ~]$ chmod 000 lcc.c  //000分别是三个八进制的数字,转换成三个对应的二进制数//字为:000 000 000 
//将普通文件lcc.c的拥有者,所属组,其他用户对于普通文件lcc.c的权限均更改为:不可读,不可写,不可执行、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 HJM HJM   75 Oct  9 21:14 lcc.c
[HJM@hjmlcc ~]$ 

文件拥有者和所属组的修改方法:

[HJM@hjmlcc home]$ pwd
/home
[HJM@hjmlcc home]$ ls
hjm  HJM
[HJM@hjmlcc home]$ cd HJM
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 HJM HJM   75 Oct  9 21:14 lcc.c
[HJM@hjmlcc ~]$ chown root lcc.c //将普通文件lcc.c的拥有者改为root用户、
chown: changing ownership of ‘lcc.c’: Operation not permitted  //失败,没有权限、
[HJM@hjmlcc ~]$ chown hjm lcc.c  //将普通文件lcc.c的拥有者改为普通用户hjm、
chown: changing ownership of ‘lcc.c’: Operation not permitted  //失败,没有权限、
//当前在使用的是普通用户的情况下,若想改变某一个文件的拥有者(改变到普通用户hjm,或改变到root用户),必须要经过root用户的允许才可以,具体有下面两种解决方法://针对上述失败,下面有两种解决方法:
//方法一:
//注意:sodu指令是短暂的提升权限,以root的身份去执行该chown指令,以root身份去执行该指令是因为
//root用户具有最高权限,想做什么就作什么,但是目前而言,我们的Linux系统在使用sudo指令时会报错,
//具体的解决方法在后期讲完vim之后再进行阐述,报错的原因是,目前的普通用户HJM还未被添加到信任
//列表中、
[HJM@hjmlcc ~]$ sudo chown hjm lcc.c
[sudo] password for HJM: //当普通用户HJM被添加到信任列表中后,此时当执行sudo指令以root身份去
//执行chown指令时,不需要再输入root用户的密码,只需要输入普通用户HJM的密码即可,因为现在的root
//用户是信任普通用户HJM的,除此之外,我们目前执行sudo指令报错的原因也是因为目前root用户未把普通
//用户HJM添加到信任列表中,信任列表在Linux系统中是一个配置文件,信任列表只能由root用户来操作,在
//root用户作为当前用户时,执行指令:cat /etc/sudoers 来操作、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 hjm HJM   75 Oct  9 21:14 lcc.c
[HJM@hjmlcc ~]$ sudo chown root lcc.c
//由于上面的代码中已经输入了普通用户HJM的密码,即,前面进行了sudo指令的第一次认证,大概在10分钟
//左右,当再次使用sudo指令时,就不需要再输入HJM(已添加进信任列表中)的密码了、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 root HJM   75 Oct  9 21:14 lcc.c
[HJM@hjmlcc ~]$  //方法二:
[HJM@hjmlcc ~]$ su  //切换到root用户,但是不改变路径、
Password: 
[root@hjmlcc HJM]# whoami
root
[root@hjmlcc HJM]# pwd
/home/HJM
[root@hjmlcc HJM]# ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 HJM HJM   75 Oct  9 21:14 lcc.c
[root@hjmlcc HJM]# chown hjm lcc.c //将普通文件lcc.c的拥有者改为普通用户hjm,但要注意的是,此
//时我们使用的用户是root用户,root用户权限最高,root用户想让普通文件lcc.c的拥有者从普通用户HJM
//改为普通用户hjm,是可以直接操作的,不会报 chown: changing ownership of ‘lcc.c’: Operation not permitted 权限错误、
[root@hjmlcc HJM]# ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 hjm HJM   75 Oct  9 21:14 lcc.c
[root@hjmlcc HJM]# 
//方法一:
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 hjm HJM   75 Oct  9 21:14 lcc.c
[HJM@hjmlcc ~]$ chgrp hjm lcc.c //将普通文件lcc.c的所属组改为hjm,注意,普通用户hjm也会自成一组、
chgrp: changing group of ‘lcc.c’: Operation not permitted //失败,权限不够、
[HJM@hjmlcc ~]$ su
Password: 
[root@hjmlcc HJM]# whoami
root
[root@hjmlcc HJM]# pwd
/home/HJM
[root@hjmlcc HJM]# ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 hjm HJM   75 Oct  9 21:14 lcc.c
[root@hjmlcc HJM]# chgrp hjm lcc.c
[root@hjmlcc HJM]# ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 hjm hjm   75 Oct  9 21:14 lcc.c
//此时,普通用户HJM对于普通文件lcc.c而言就是该普通文件lcc.c的其他用户、
[root@hjmlcc HJM]#  //方法二:
[HJM@hjmlcc ~]$ whoami 
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 hjm hjm   75 Oct  9 21:14 lcc.c
[HJM@hjmlcc ~]$ sudo chgrp HJM lcc.c
//由于上面的代码中已经输入了普通用户HJM的密码,即,前面进行了sudo指令的第一次认证,大概在10分钟
//左右,当再次使用sudo指令时,就不需要再输入HJM(已添加进信任列表中)的密码了、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  9 18:01 code
---------- 1 hjm HJM   75 Oct  9 21:14 lcc.c
[HJM@hjmlcc ~]$ 
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
-r-------- 1 HJM HJM   77 Oct 13 11:02 lcc.c
[HJM@hjmlcc ~]$ chmod u+w,g+r,o+r lcc.c
//对于普通文件lcc.c而言,所有者是普通用户HJM,并且当前用户是普通用户HJM,即也是普通文件lcc.c的所有
//者,故在当前用户HJM下,可以随意更改普通文件lcc.c的所有者,所属组以及其他用户对普通文件lcc.c的权限
//并且不会报权限错误、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
-rw-r--r-- 1 HJM HJM   77 Oct 13 11:02 lcc.c
[HJM@hjmlcc ~]$ su
Password: 
[root@hjmlcc HJM]# ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
-rw-r--r-- 1 HJM HJM   77 Oct 13 11:02 lcc.c
[root@hjmlcc HJM]# chmod u-r lcc.c
//注意:此时当前用户是root用户,而对于普通文件lcc.c而言,所有者是普通用户HJM,所属组中也只存在普通
//用户HJM,所以此时,对于普通文件lcc.c而言,root用户就是其他用户,但此时root用户并不是普通文件lcc
//.c的所有者,所以按理说,此时的当前用户(root用户)是没有办法更改普通文件lcc.c的所有者,所属组以及
//其他用户对普通文件lcc.c权限的,但此时却发现,是可以操作的,这是因为,root用户具有最高权限(同下)
//,本来是没有权限(此处所指的权限并不是普通文件lcc.c的所有者,所属组以及其他用户对普通文件
//lcc.c的权限),做到的,但是通过测试发现,是可以做到的,这就说明root用户会忽视这一权限(同前)限制、
[root@hjmlcc HJM]# ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
--w-r--r-- 1 HJM HJM   77 Oct 13 11:02 lcc.c
[root@hjmlcc HJM]# 
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
--w-r--r-- 1 hjm HJM   77 Oct 13 11:02 lcc.c
[HJM@hjmlcc ~]$ chmod u+r lcc.c
//当前用户是普通用户HJM,但是对于普通文件lcc.c而言,普通用户hjm是所有者,故当前用户,即普通用户HJM,
//并不是普通文件lcc.c的所有者,并且当前用户也不是root用户,所以,当前用户(普通用户HJM)是没有办法
//修改普通文件lcc.c的所有者,所属组以及其他用户对普通文件lcc.c的权限的,此时会报错,说是权限不够,
//注意这个权限并不是指普通文件lcc.c的所有者,所属组以及其他用户对普通文件lcc.c的权限、
chmod: changing permissions of ‘lcc.c’: Operation not permitted
[HJM@hjmlcc ~]$ //总结:对某一个文件而言,如果当前用户不是该文件的所有者,也不是root用户,那么在当前用户下,是不能修改
//该文件的所有者,所属组以及其他用户对该文件权限的,但此时可以通过指令sudo或者切换到root用户,或者
//将当前用户切换为该文件的所有者时,再修改该文件的所有者,所属组以及其他用户对该文件的权限,就不存在
//任何限制了、
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
--w-r--r-- 1 hjm HJM   77 Oct 13 11:02 lcc.c
[HJM@hjmlcc ~]$ su 
Password: 
[root@hjmlcc HJM]# whoami
root
[root@hjmlcc HJM]# pwd
/home/HJM
[root@hjmlcc HJM]# ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
--w-r--r-- 1 hjm HJM   77 Oct 13 11:02 lcc.c
[root@hjmlcc HJM]# chown root:root lcc.c
//通过上述一条指令就可以直接将普通文件lcc.c的所属组和拥有者全部改成root用户、
[root@hjmlcc HJM]# ll
total 8
drwxrwxr-x 2 HJM  HJM  4096 Oct 13 11:25 code
--w-r--r-- 1 root root   77 Oct 13 11:02 lcc.c
[root@hjmlcc HJM]# chown HJM:HJM lcc.c
//通过上述一条指令就可以直接将普通文件lcc.c的所属组和拥有者全部改成普通用户HJM、
[root@hjmlcc HJM]# ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
--w-r--r-- 1 HJM HJM   77 Oct 13 11:02 lcc.c
[root@hjmlcc HJM]# //注意:某一个文件的创建者和拥有者并不一定是同一个人、
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
--w-r--r-- 1 HJM HJM   77 Oct 13 11:02 lcc.c
[HJM@hjmlcc ~]$ chmod a=r lcc.c  //a代表的是all,即指该普通文件lcc.c的拥有者,所属组和其他用户,即指所有的意思、
//此时是将普通文件lcc.c的拥有者,所属组和其他用户对该普通文件lcc.c的权限都只设置为可读的权限、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
-r--r--r-- 1 HJM HJM   77 Oct 13 11:02 lcc.c
[HJM@hjmlcc ~]$ chmod -r lcc.c
//将普通文件lcc.c的所有者,所属组和其他用户对该普通文件lcc.c的可读权限全部去掉、
[HJM@hjmlcc ~]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
---------- 1 HJM HJM   77 Oct 13 11:02 lcc.c
[HJM@hjmlcc ~]$ 
文件权限值的表示方法:
方法一:
字符表示方法:

方法二:
八进制数值表示方法:
文件访问权限的相关设置方法:
指令:chmod               功能:设置文件的访问权限             格式:chmod [参数] 权限 文件名
常用选项:  R:递归修改目录文件的权限、
说明:只有文件的拥有者和root用户才可以改变文件的权限、
用户表示符 + / - = 权限字符:
+: 向权限范围增加权限代号所表示的权限、
- : 向权限范围取消权限代号所表示的权限、
=: 向权限范围赋予权限代号所表示的权限、
用户符号:  u:拥有者    g:所属组    o:其它用户    a:所有用户
chown
功能:修改文件或目录的拥有者
格式:chown [参数] 用户名 文件名
实例:
# chown user1 f1
# chown -R user1 filegroup1
chgrp
功能:修改文件或目录的所属组、
格式:chgrp [参数] 用户组名 文件名、
常用选项:-R 递归修改文件或目录的所属组、
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ll
total 4
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
[HJM@hjmlcc ~]$ chmod u-x code
//目录文件code的拥有者是普通用户HJM,所属组中也只有普通用户HJM一个,此时当前用户是普通用户HJM,也是
//该目录文件code的所有者,那么此时可以直接修改目录文件code的所有者,所属组和其他用户对目录文件
//code的权限,由上述指令可知,如果想进入目录文件code中,和可执行权限x有关、
[HJM@hjmlcc ~]$ ll
total 4
drw-rwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
[HJM@hjmlcc ~]$ cd code
bash: cd: code: Permission denied //进入目录文件code的权限不够、
[HJM@hjmlcc ~]$ chmod u+x code
[HJM@hjmlcc ~]$ ll
total 4
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
[HJM@hjmlcc ~]$ cd code
[HJM@hjmlcc code]$ ll
total 0
---x------ 1 HJM HJM 0 Oct 13 11:25 hj.c
[HJM@hjmlcc code]$ cd ..
[HJM@hjmlcc ~]$ ll
total 4
drwxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
[HJM@hjmlcc ~]$ chmod u-r code
[HJM@hjmlcc ~]$ ll
total 4
d-wxrwxr-x 2 HJM HJM 4096 Oct 13 11:25 code
[HJM@hjmlcc ~]$ cd code  //进入目录文件code的权限足够、
[HJM@hjmlcc code]$ ls  //此时进入目录文件code的权限足够,但进去目录文件code后,查看该目录文件code中的内容的权限不够,由此可知,进入目录文件code后,再查看目录文件code中的内容(一般指查看该目录文件code中有哪些普通文件还有哪些目录文件)的权限和可读权限r有关,其次,目录俗称目录文件,也是文件,而在Linux系统中,一切皆文件,文件=文件内容+文件属性,此处所指的目录文件的内容主要指的就是存放在目录文件code中的部分文件(普通和目录)的"属性"(其实并不能准确的用属性来说,但目前只需要当做属性来看即可),包括部分文件(普通和目录)的文件名(属性)、
//在后期讲解ext系列文件系统,分区,磁盘布局时,再讲解在Linux系统下创建一个文件,到底都做了什么、ls: cannot open directory .: Permission denied
[HJM@hjmlcc code]$ touch hjm.c //进入目录文件code后,再创建一个普通文件hjm.c的权限足够、
[HJM@hjmlcc code]$ ls
ls: cannot open directory .: Permission denied
[HJM@hjmlcc code]$ cd ..
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ll
total 4
d-wxrwxr-x 2 HJM HJM 4096 Oct 15 17:19 code
[HJM@hjmlcc ~]$ chmod u-w code
[HJM@hjmlcc ~]$ ll
total 4
d--xrwxr-x 2 HJM HJM 4096 Oct 15 17:19 code
[HJM@hjmlcc ~]$ cd code  //进入目录文件code的权限足够、
[HJM@hjmlcc code]$ touch Hjm.c //进入目录文件code后,再创建一个普通文件Hjm.c的权限不够、
touch: cannot touch ‘Hjm.c’: Permission denied
//由此可知,进入目录文件code后,再创建普通文件或目录文件的权限和可写权限w有关,即,当进入目录文件
//code后,若想改变该目录文件code中的内容的权限是和可写权限w有关系的、
[HJM@hjmlcc code]$ //虽然我们在Linux系统下是通过路径来寻找某一个文件的,但如果我们没有某一个目录文件的可读权限,但
//是却知道该目录文件下某一个文件的文件名,并且该文件是具有可读权限的,那么此时是不可以直接读取该
//目录文件下的某一个文件的,但是经过实际操作确是可以的,这一点要记住,按道理来说是不可以的,因为如
//果想拿到该目录文件中的某一个文件的文件名,则需要先能够访问该目录文件中的内容,实际上在Linux系
//统中,某一个文件的文件名在系统中并不存在任何价值,只是用来给路人看的,Linux系统是使用编号来标识
//一个文件的,而不是通过文件的文件名来标识文件,即文件编号,路人是看不到的,上述所谓的可以操作的原
//因可能是目录文件下某一个文件的文件名和它的文件编号之间存在对应的映射关系,这个映射关系可能被
//Linux系统缓存了,所以才导致上述测试是可以的,但按理说应该是不可以的,我们也要按照不可以来记住即
//可、

拓展:

   当使用 mdkir 指令新建目录文件时,此时该新建的目录文件的所有者,所属组和其他用户对该新建目录文件的权限(最终)默认为:drwxrwxr-x(d775),而当使用指令 touch 新建普通文件时,此时该新建的普通文件的所有者,所属组和其他用户对该新建普通文件的权限(最终)默认为:-rw-rw-r--(-664),当然,不同的Linux系统可能会存在差异,具体原因如下:

1、

    按理说,当使用 mdkir 指令新建目录文件时,此时该新建的目录文件的所有者,所属组和其他用户对该新建目录文件的权限(起始权限)默认为:drwxrwxrwx(d777),但是由于Linux系统中存在一个默认的权限掩码,可使用指令umask来查看,为:0002,最左边的0可以忽略不管,它和其他权限位有关,目前可以暂时理解为最左边的0代表该0后面都是八进制数字,则后面的002为八进制数字,转换为二进制即为:000 000 010 ,所谓权限掩码即指,凡是在权限掩码中出现的权限都不应该在最终权限中出现,已知新建目录文件的起始权限默认为777,且我们要在777中把权限掩码中出现的权限去掉,所以就需要在新建目录文件的起始权限中将在权限掩码中出现的权限去掉(具体操作见下面的紫色公式),已知新建目录文件的起始权限默认为777,转为二进制为:111 111 111,而在权限掩码中出现过的权限为002,转为二进制则为000 000 010,所以,需要在新建目录文件的起始权限默认值111 111 111 中将从右往左的第二个权限去掉,则新建目录文件的默认权限(最终)即为:111 111 101,这就是新建目录文件的最终权限、

2、

    按理说,当使用指令 touch 新建普通文件时,此时该新建的普通文件的所有者,所属组和其他用户对该新建普通文件的权限(起始权限)默认为:-rw-rw-rw-(-666),具体原因同上!

指令:umask   
功能:查看或修改文件掩码(权限掩码)、
新建普通文件默认起始权限为:0666                     0代表八进制数字、
新建目录文件默认起始权限为:0777
    但实际上你所新创建的普通文件和目录文件,看到的最终权限往往不是上面这个值,原因就是新创建普通文件或目录文件的时候还要受到 umask 的影响,假设默认权限掩码是umask,则实际创建的出来的普通文件或目录文件的最终权限是: 
最终权限 = 起始权限 & (~umask) ,其中起始权限就是mask,即有:
最终权限 = mask & (~mask)  、
格式:umask 权限值
说明:将现有的存取权限(起始权限)减去权限掩码后,即可产生新建立普通文件或目录文件时的预设(最终)权限,超级用户root默认权限掩码值为0022,普通用户默认权限掩码值为0002、
实例:
# umask 755
# umask //查看
# umask 044//设置

普通用户之间的切换,只需要知道密码即可:

[HJM@hjmlcc home]$ whoami
HJM
[HJM@hjmlcc home]$ pwd
/home
[HJM@hjmlcc home]$ ll
total 8
drwx------ 5 HJM HJM 4096 Oct 15 17:06 HJM
drwx------ 4 LCC LCC 4096 Oct 15 19:04 LCC
[HJM@hjmlcc home]$ cd HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ su - LCC
Password:  //654321
Last login: Sat Oct 15 19:04:04 CST 2022 on pts/0
[LCC@hjmlcc ~]$ pwd
/home/LCC
[LCC@hjmlcc ~]$ whoami
LCC
[LCC@hjmlcc ~]$ su - HJM
Password:  //123456
Last login: Sat Oct 15 19:05:51 CST 2022 on pts/0
[HJM@hjmlcc ~]$ whoami
HJM
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ 

拓展:

以下情况,均不考虑root用户:

     如果某一个文件(以普通文件为例)的所有者是普通用户HJM,且该普通用户HJM自成一组,即,文件的所属组的组名也叫HJM,如果此时把文件的所有者改为普通用户LCC的话,那么该文件的原所有者,即普通用户HJM将变成当前文件所属组中的成员,即,变成了除了现在的文件的所有者普通用户LCC之外的在该文件的所属组中的其他普通用户、

    如果某一个文件(以普通文件为例)的所有者是普通用户HJM,且该普通用户HJM自成一组,即,文件的所属组的组名也叫HJM,如果此时把文件的所有者改为普通用户LCC,且把文件的所属组的组名也改为LCC,即普通用户LCC自成一组,那么此时,文件的原所有者,即普通用户HJM就变成了其他用户,此时,现在文件的所属组中只有普通用户LCC,不存在其他的普通用户,若在改变后的文件的所属组中还存在其他普通用户,则他们对文件的权限需要按照中间三个字符进行、

   

    如果某一个文件(以普通文件为例)的所有者是普通用户HJM,且该普通用户HJM自成一组,即,文件的所属组的组名也叫HJM,如果此时只把文件的所属组的组名改为LCC,那么此时,文件的原所有者普通用户HJM仍是现在文件的所有者,这种情况就和第一种情况类似,只是文件的所属组的组名发生了变化,与第一种情况比较没什么区别,此时,普通用户LCC还是文件的其他用户,则普通用户LCC对文件的权限仍按照后三个字符进行、

​​​​​​​

    怎么样理解凡是在权限掩码中出现的权限都不应该在最终权限中出现,是使用减法吗?,具体原因请见下期博客、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_24045.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins配置用户权限

前几篇讲了一下有关Jenkins的一系列的操作&#xff1a; 在linux上搭建jenkins&#xff0c;并进行所需的配置 Jenkins安装插件一直失败&#xff0c;报错SunCertPathBuilderException的解决方案 jenkins配置拉取git远程仓库的代码并进行自动化构建部署 怎么修改Jenkins的默认…

力扣周赛314-矩阵中和能被 K 整除的路径(动态规划)

解题思路&#xff1a;方案数问题动态规划问题。由于只能往下或右走&#xff0c;递归思考&#xff0c;每一点a[i][j]的方案数必由其上方a[i-1][j]或左侧a[i][j-1]得到。问题关键点在于统计的是能被K整除的路径数目&#xff0c;看一下示例1&#xff0c;如果走到&#xff08;3,3&a…

Kafka由浅入深(二)—— 生产者工作原理

1、生产者的流程架构 生产者主体逻辑整个生产者客户端由两个线程协调运行&#xff0c;这两个线程分别为主线程和Sender 线程&#xff08;发送线程&#xff09;。 1.1 主线程&#xff1a; 在主线程中由KafkaProducer 创建消息&#xff0c;然后通过可能的拦截器、序列化器和分区…

带你吃透Servlet核心编程下篇(完整图文教程)

本文被 系统学习JavaWeb 收录点击订阅专栏 文章目录1 Http协议1.1 什么是 HTTP 协议1.2 GET请求与POST请求1.3 响应的HTTP协议格式1.4 MIME数据类型2 HttpServletRequest类2.1 HttpServletRequest说明及常用方法2.2 HttpServletRequest类演示2.3 获取请求表单中的参数值&#x…

车车基础知识扫盲

排量 排量是指发动机气缸工作容积之和。所谓工作容积就是活塞在一个冲程内经过的区域的体积。气缸的总容积减去活塞的工作容积&#xff0c;剩下的就是压缩容积&#xff0c;压缩容积是用来燃烧的。 排量的单位是升(L)&#xff0c;常见的排量的标识有三种&#xff0c;T&#xff…

SpringMvc模块

SpingMVC 模块 简介 Spring MVC是一种基于MVC架构模式的轻量级Web框架。 SpringMVC处理过程 Spring MVC的处理过程&#xff1a; DispatcherServlet 接收用户的请求找到用于处理request的 handler 和Interceptors&#xff0c;构造成 HandlerExecutionChain执行链找到 handle…

宏任务与微任务

原文:做一些动图,学习一下EventLoop (https://juejin.cn/post/6969028296893792286)一、任务队列JavaScript 是单线程执行的语言, 在同一时间只能干一件事情。如果前面的任务很耗时后面的任务就会一直等待,为了解决这个问题,js中出现了同步任务和异步任务 1.1 同步任务在主…

Linux服务器部署Mysql5.7全过程记录

1、先下载安装包文件 mysql-5.7.27-linux-glibc2.12-x86_64.tar Mysql5.7.27 Linux安装包 链接&#xff1a;https://pan.baidu.com/s/1p4KmDp5O2bGJLXUHOHMQFQ 提取码&#xff1a;4692 2、解压 cd /usr/local 切换到安装包所在目录 tar -zxvf mysql-5.7.30-l…

【数据获取】可以公开获取到的百度迁徙数据

百度迁徙数据是一种较为常用的互联网数据&#xff0c;在之前的文章里小编已经讲了百度迁徙数据是什么、怎么获取、该如何处理、怎么用它做和弦图这些内容。但是其中数据的获取部分一直没有详细讲解&#xff0c;那么该如何获取它呢&#xff1f; 今天&#xff0c;就告诉大家一个…

教学设计题-教学过程

空间中直线与平面之间的位置关系 生活中的三种位置关系的实例 直线在平面内&#xff1a;开门关门时&#xff0c;门轴所在的直线在门所在平面内 直线与平面相交&#xff1a;操场上&#xff0c;升旗的旗杆所在直线与地面所在平面相交 直线与平面平行&#xff1a;黑板的一条边所在…

护肤 第三课

皮肤的生长周期一般是1-2个月 所以护肤品想要其效果 一般就是这个周期才会有效果 外用护肤品只能渗透到表皮层或者真皮层的表层&#xff0c;只有医疗美容的方法才有机会到真皮层 黑色素 黑色素细胞在基底层 黑色素细胞能产生黑色素 黑色素的作用&#xff1a;吸收和散射紫外线…

A Survey on Big Data Market: Pricing, Trading and Protection

基于大数据市场&#xff1a;定价、交易、保护的研究 作者&#xff1a;FAN LIANG, WEI YU , DOU AN, QINGYU YANG, XINWEN FU, AND WEI ZHAO 文章目录基于大数据市场&#xff1a;定价、交易、保护的研究Abstract1.Intro2.大数据的基本概念2.1.大数据的定义2.2.大数据的好处和挑…

【23秋招c++后端面试技术突围】mysql通俗易懂的数据库连接池原理及模拟实现

什么是数据库连接池&#xff1f; 当系统使用JDBC技术访问数据库时会创建一个connection对象&#xff0c;而该对象的创建过程是非常消耗资源的&#xff0c;并且创建对象的时间也特别长&#xff0c;假设系统一天有1万次的访问量&#xff0c;那么一天就会有1万个connection对象被…

Acetal-NHS (SDMB),乙缩醛-琥珀酰亚胺酯

An English name&#xff1a;Acetal-NHS (SDMB) Chinese name&#xff1a;乙缩醛-琥珀酰亚胺酯 Item no&#xff1a;X-GF-0136 Density: PEG density is approximately 1.125 g/mL Molecular formula&#xff1a; Physical form&#xff1a;PEG products generally appear…

CMake中find_file的使用

CMake中的命令find_file用于查找指定文件(named file)的完整路径&#xff0c;其格式如下&#xff1a;将创建一个由<VAR>命名的缓存条目即cache变量&#xff0c;将<VAR>的值存入CMakeCache.txt中);或如果指定了NO_CACHE&#xff0c;由<VAR>命名的普通变量来存…

文件IO操作笔记

目录 1.文件操作 2.File类 3.流&#xff08;针对文件内容操作读写&#xff09; 3.1 InputStream 3.2 Scanner 4.练习 1.文件操作 狭义文件就是存储在硬盘上的数据&#xff0c;以“文件”为单位 广义上的文件就是操作系统负责管理硬件资源&#xff0c;操作系统&#xff08;…

按钮(Button)组件

1.按钮组件的属性 属性 说明 onPressed 必填参数&#xff0c;按下按钮时触发的回调&#xff0c;接收一个方法&#xff0c;传null表示按钮禁用&#xff0c;会显示禁用相关样式 child 子组件 style 通过ButtonStyle装饰 ButtonStylee里面的常用的参数 属性名称 值类型 …

15 个实用的 Linux find 命令示例

除了在目录结构下查找文件的基本操作外&#xff0c;我们还可以使用 find 命令执行一些实际操作&#xff0c;这将使我们的命令行之旅变得轻松。 在本文中&#xff0c;让我们回顾 15 个 Linux find 命令的实际示例&#xff0c;它们对新手和专家都非常有用。 首先&#xff0c;在…

公众号网课查题功能搭建系统使用

公众号网课查题功能搭建系统使用 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&…

图学习——02.Graph Neural Network

Graph Neural Network GCN A矩阵表示邻接矩阵&#xff0c;I矩阵表示单位阵&#xff0c;D~矩阵是对A~的矩阵按行求和后把每行的值写在对角线上&#xff08;度矩阵&#xff0c;包括自连接的度&#xff09;&#xff0c;W(l)是要学习的参数&#xff0c;H(l)是这一层的节点的特征 …