我的Linux笔记6--离不开的读权限

个人愚见,有些观点未经证实,注意!

大家都知道linux中的权限有 读写执行三种,也基本理解他们的意思,由于Window用久了,思维定式啊!

我的理解
读:从磁盘上读取数据(01串,你懂的)并尝试着解析成字符显示出来,即使不是纯字符型的文件。
写:编辑,新增,修改文件的内容,也就说将缓存中的数据从新写入到磁盘上去。
执行:从CPU 内存行为的角度讲,我真心不知道读和执行的区别在哪里,大概只能从系统的角度来区分了,读是尝试把数据解释成字符,而执行更近一步,尝试把这些字符当作命令,语句来看待,就像编译原理的编译器一样。

读权限的重要性

当你想查看文件的内容时,当然只需要读权限就可以了,可是当你需要写或者执行这个文件的时候呢?

先来实验下吧:
 

  
  
  
  
  1. [root@localhost ~]# su testuser//先切换到普通用户 
  2. [testuser@localhost root]$ cd   
  3. [testuser@localhost ~]$ ls      
  4. [testuser@localhost ~]$ touch test.sh//新建一个可执行的脚本文件 
  5. [testuser@localhost ~]$ ll        //查看权限    
  6. total 0                               
  7. -rw-rw-r--. 1 testuser testuser 0 Nov 16 05:14 test.sh 
  8. [testuser@localhost ~]$ vi test.sh //先编辑下见内容1 
  9. [testuser@localhost ~]$ chmod 400 test.sh//修改权限为只有读权限 
  10. [testuser@localhost ~]$ ll 
  11. total 4 
  12. -r--------. 1 testuser testuser 33 Nov 16 05:15 test.sh 
  13. [testuser@localhost ~]$ vi test.sh //可以成功打开看到之前的内容,但是会提示是只读文件 
  14. 当然,也可以编辑,退出时用wq!可以实现强行修改,这个原理现在还不清楚。 
  15. [testuser@localhost ~]$ chmod 200 test.sh//权限改为只有写的权限,看看有什么效果 
  16. [testuser@localhost ~]$ ll 
  17. total 4 
  18. --w-------. 1 testuser testuser 45 Nov 16 05:16 test.sh 
  19. [testuser@localhost ~]$ vi test.sh //也会提示是只读文件,并且看不打之前写入的内容, 
  20. 若编辑会强行保存,效果相当于新建一个同名文件。 
  21. [testuser@localhost ~]$ chmod 100 test.sh //改为只有执行权限 
  22. [testuser@localhost ~]$ ll 
  23. total 4 
  24. ---x------. 1 testuser testuser 19 Nov 16 05:24 test.sh 
  25. [testuser@localhost ~]$ vi test.sh //这里的效果与只有w权限时一样。 
  26. [testuser@localhost ~]$ /home/testuser/test.sh //执行这个脚本 
  27. bash: /home/testuser/test.sh: Permission denied //显示权限不够!!!重点 
  28. [testuser@localhost ~]$ chmod 600 test.sh 
  29. [testuser@localhost ~]$ ll 
  30. total 4 
  31. -rw-------. 1 testuser testuser 19 Nov 16 05:24 test.sh 
  32. [testuser@localhost ~]$ vi test.sh 
  33. [testuser@localhost ~]$ vi test.sh 
  34. [testuser@localhost ~]$ chmod 500 test.sh 
  35. [testuser@localhost ~]$ ll 
  36. total 4 
  37. -r-x------. 1 testuser testuser 43 Nov 16 05:29 test.sh 
  38. [testuser@localhost ~]$ /home/testuser/test.sh //这下就顺利执行了。 
  39. hello Linux

test.sh中的内容:

  
  
  
  
  1. #test.sh 
  2.  
  3. echo "hello linux" 

知道读权限的重要了吧,没有它w ,x都不能顺利实现。这是为什么呢?

(注意,这里个人想法居多,没有实际依据,因为我还没有找到相关资料)读是从磁盘加载数据到缓存中,并尽可能显示出来,所以,如果没有读权限,系统根本就找不到数据在磁盘上的位置(这与文件系统有关,当读取一个文件时,先读取它的dentry块,权限相关的信息就记录在它的里面,他会指向inode块,记录的有文件数据在磁盘上位置的信息,若权限判为无读权限,我想就不会去读inode了吧。相关资料参考毛德操的《Linux内核源代码情景分析》),也就无法显示出来,这也是为什么只有w,x的时候,vi看不到内容的原因。而强制写入的话,相当与让dentry 指向新的inode 和block。也就相当于新建了一个同名文件。

本文出自 “奋斗的菜鸟” 博客,谢绝转载!

你可能感兴趣的:(权限,写,文件系统,执行,读)