Linux中的用户

Linux中的用户有三类,分别是:
  1. 所有者(u)
  2. 同组用户(g)
  3. 其他人(o)
如下图所示,假设存在两个组:groupA和groupB,rachel和ross属于组groupA,monica属于GroupB。
如果存在一个文件friends.c,其所有者是rachel,那么,该文件的同组用户(g)是ross,其他用户(o)是monica。需要注意的是在Linux中,存在一个至高无上的用户:root,他默认属于root组。
 
 
一个用户可以属于多个组
 
 
为了后续试验方便,我们按照上图创建groupA和groupB以及属于这两个组的用户:
 
 
  • 如果当前环境是桌面环境,可以按ctrl + alt + (f1-f6) 切换到字符状态下,ctrl + alt +f7切换回桌面。也可以在桌面环境下打开命令窗体(和在windows下运行cmd命令一个效果),Ubuntu下的快捷键是ctrl + alt + t
  • adduser命令中,选项-ingroup用来指定组。另外也可以使用useradd命令(这个比较专业,adduser则比较傻瓜式)
  • desktop型的Linux发行版一般会提供用户维护界面,非常方便,但是可能没有输入命令灵活,比如在ubuntu desktop发行版中创建用户会直接生成一个同名的组,比较讨厌。
  • sudo su (root)用来获得root权限,如果您的系统不是ubuntu(默认情况下不能使用root用户登录),也可以直接su root切换到root用户,或者干脆用root登录
  • 查看命令如何使用:man commandName (如:man useradd)
  • Linux中的命令和Windows中的一样,要想在任何地方执行,也要写入“环境变量”,可以通过echo $PATH来查看有哪些目录被放到了$PATH变量中

Linux中的权限

Linux中的权限分为3种,分别是读(read)、写(write)和执行(execute),在系统中分别记作:r、w和x,或者用数字表示为4、2和1
 
下面我们把用户切换为rachel,在rachel的家目录/home/rachel下用vi命令创建文件纯文本文件friends.c,内容如下:
include<stdio.h>
int main()
{
printf("hello world\n");
}
也可以在桌面环境下使用文本编辑器(ubuntu中默认的是gedit)创建文件,但是很多人都喜欢用vi这个工具,笔者不是很熟,也无法体会vi有多么方便,不过想想拔了鼠标一顿敲键盘确实是XX不二利器啊。另外,如果Linux系统被当做服务器使用,那就没有必要使用desktop版本了,在纯字符环境下难免也要编辑一些文本,所有,vi是必须要了解的,最起码了解一些基本功能,否则会气疯掉的........下面说说vi的基本功能:
  1. 打开文件:vi fileName ,如果fileName已经存在,则将其打开,如果fileName不存在,则在保存的时候创建新的文件
  2. 编辑文件:刚进入vi默认是指令模式,按一下键盘i键后进行编辑,当前模式转换为编辑模式
  3. 保存文件:狂按Esc键进入命令模式,敲入命令 :wq 保存并退出vi
更多vi使用方法可以去google搜索,或使用命令man vi 进行查看,以上三步骤仅仅能让编辑者不至于疯掉,还有很多功能呢......
 
 
创建完毕后使用ls -l 查看着文件的相关权限,如下图所示:
 
  • -l 表示列出文件或目录的属性
  • -a 可以查看隐藏文件
  • ll 命令等同于 ls -al
 
请注意上图中被荧光笔标注的“rw-r--r--”。前面说过Linux中的用户分为三类,分别是所有者、同组用户和其他用户。从左往右:“rw-”表示所有者具有读和写的权限;“r--”表示同组用户具有读的权限;第二个"r--"表示 其他用户也具有读的权限。可见“rw-r--r--”可三个三个分为三组,每组的第一个字符表示是否可读(是用“r”表示,否用“-”表示),第二个字符表示是否可写(是用“w”表示,否用“-”表示),第三个字符表示是否可执行(是用“x”表示,否用“-”表示)。第一组表示所有者的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。例如: 一个文件的属性是”rwxrwxrwx“则表示任何人对此文件都有读写执行的权限。
 
friends.c文件的权限默认属性是:”rw-r--r--“,含义为:rachel(所有者)可以读写这个文件,ross(同组用户)只可以读这个文件、monica(其他用户)也是可以读这个文件,如果将用户切换到ross或者是monica,然后再编辑并保存friends.c文件就会报权限错误的,因为他们没有写的权限。
 

权限对于文件的意义

  • 读:可查看文件的内容
  • 写:可修改文件的内容
  • 执行:可执行文件
  • 对文件具有可执行的权限,并不意味者文件一定可以执行;可执行的文件如果对其没有执行的权限亦不可执行
  • 可以用C语言编写一段代码,然后用gcc命令编译为可执行的文件以试效果
  • gcc、java、javac、python等命令在很多Linux发行版本中已经预装存在了,而且默认在$PATH中
 
 
现在使用gcc命令编译friends.c文件:gcc friends.c -o friends.out
当前目录下会生成一个friends.out的文件,我们来看看这个文件的属性:
 
"rwxr-xr-x"表示 rachel可以读、写和执行这个文件;ross可以读、执行这个文件;monic可以读、执行这个文件,用rachel的身份打入如下命令:./friends.out
 
 
./ 表示当前目录,其实friends.out本来就在当前目录,但是如果不加./,Linux会去$PATH中找friends.out,结果当然是找不到,这点和windows不一样
 
 
结果是我们熟悉的hello wolrd
 
下面我们把执行权限给去掉:chmod u-x friends.out
 
啊啊啊啊啊,执行不了。
 
 
  • 也可以这样修改权限:chmod 655 friends.out ,第一位数字为文件所有者(u)赋权限,6=4+2 ,表示读和写权限;第二位数字为同组用户(g)赋权限,5 = 4 + 1,表示读和执行权限;第三位数字为其他用户(o)赋权限。各种权限数字组合如下:
4:r

2:w

1:x

3 = 2 + 1:wx

5 = 4 + 1:rx

6 = 4 + 2:rw

7 = 4 + 2 + 1:rwx

  • 只有root和文件的所有者才有权改变文件的权限

权限对于目录的意义

权限对于文件的意义很好理解,但是目录的读、写和执行是怎么回事呢?先来看下/home/rachel这个目录的权限:
同组用户ross对这个目录是没有写权限的,这个意味着什么呢,现在将用户切换到ross,试图在/home/rachel底下用vi创建一个文本文件,果断报错如下:
 
切换回rachel,执行命令:chmod g+w /home/rachel ,在切换到ross,再试图创建文件。哇塞,成功了。这个例子说明对于目录的写权限,就是指可以对这个目录里面的内容进行删除或创建的操作(或者说更改了目录里的内容)。用类似的方法做实验:
 
切换回rachel,把ross的读(chmod g-r /home/rachel)权限干掉,再切换到ross,cd到/home/rachel,执行ls,报错:
可见,如果对于一个目录没有读权限,则不能看到这个目录里有什么东西
 
切换回rachel,把ross的读权限还原,把执行权限干掉(chmod g+r-x),在切换到ross,cd 到/home/rachel........等等,我去,cd命令无法执行了:
可见,如果对一个目录没有执行权限,那么这个目录就不能cd进去,不能作为当前工作目录,如果试图打开、执行里面的文件的话毅然报权限错误(但是能够执行ls /home/rachel命令,因为ross对这个目录具有读权限)
 
对于目录,总结如下:
  • 读:可以查看目录下的内容
  • 写:可修改目录下的内容(新增或删除)
  • 执行:可将目录作为当前工作目录,可对目录中的文件执行相应的操作(当然,如果对某文件没有读、写或执行的权限,即使对其父目录有执行权限也啥都干不了)
对于目录,要想某用户使用其中的文件,必须要赋予某用户读和执行的权限,但是写权限不能轻易给予,因为对一个目录具有了写的权限意味着可以删除目录中的文件
 

后记

最近开始学习Linux。为了强迫自己使用Linux,把家里的电脑上了Ubuntu。我觉得Windows太好用了,会把人用懒,想必熟练了Linux后对操作系统应该会有一个更加深入的认识,此外,万一哪天想起什么创业点子,也可以使用php、java等免费方案在费用较低的Linxu主机上部署网站之类的,是个省钱的好办法。
 
本文适合初学者阅读,也希望高手给予点评,不甚感激。
 

Linux基础知识之文件和目录的权限机制的更多相关文章

  1. Linux基础知识之文件的权限(一)

    Linux基础知识之文件权限(一) Linux优点之一就是它拥有多用户多任务的环境,在提供文件共享的同时也能保证用户文件的安全性.所以,设置文件的权限管理变得尤为重要. 权限讲解 [der@Der ~ ...

  2. Linux基础知识之文件的权限(二)

    除了基本的r,w,x之外,在linux传统的ext2.ext3.ext4文件系统下,还可以设置其他 的文件属性.如chattr,lsattr,而在CentOS7中默认利用xfs作为默认的文件系统,就不 ...

  3. Linux基础学习:文件与目录管理

    目录与路径 目录的相关操作 几个特殊的目录: . :表示当前目录 .. :表示上一层目录 - :表示前一个工作目录 ~ :表示当前用户所在的主文件夹 ~account :表示account用户所在的主 ...

  4. Linux基础知识第一讲,基本目录结构与基本命令

    目录 一丶Window 与 Linux的目录结构 1.Windows 与 Linux目录简介 2.Linux目录主要作用 3.任务栏与菜单栏,与关闭按钮 二丶Linux终端与常见命令学习 1.终端中的 ...

  5. Linux基础命令之文件和目录操作(一)

    pwd print working directory的缩写,作用是显示当前工作目录的绝对路径,一般进行频繁切换路径时使用. -L 显示逻辑路径(或略软链接文件),不常用. -P 显示物理路径,不常用 ...

  6. Linux基础命令之文件和目录操作(二)

    . find 用于查找目录下的文件,也可以调用其他命令使用 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] fi ...

  7. UNIX基础知识之文件和目录

    程序清单1-1 列出一个目录中的所有文件(ls命令的简要实现): [root@localhost unix_env_advance_prog]# cat prog1-.c #include " ...

  8. Linux基础知识第三讲,拷贝文件跟移动文件命令

    目录 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命令 1.tree命令常用选项 2.cp复制文件命令 3.mv 命令的使用 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命 ...

  9. Linux基础知识入门

    [Linux基础]Linux基础知识入门及常见命令.   前言:最近刚安装了Linux系统, 所以学了一些最基本的操作, 在这里把自己总结的笔记记录在这里. 1,V8:192.168.40.10V1: ...

随机推荐

  1. 关于shiro

    1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...

  2. 整理一自己不怎么熟悉的HTML标签(会陆续更新)

    ---恢复内容开始--- 小白刚开始接触HTML和CSS,在学习过程中发现又遇到很多不认识的标签,于是就想把他们都记录下来,一来可加深记忆,二来也方便以后查阅,当然如果能帮助到你们也是很开心的啦! 1 ...

  3. 有Maple T.A.自有试题图so easy

    对于想完全控制试题库的用户而言,Maple T.A.是最好的选择.不论您是要利用现有的题库,还是要创建自己的题库,Maple T.A.都可以为您提供功能强大.操作便捷的工具创建数学内容. 1) Ste ...

  4. 解决读取iphone名称中文乱码问题

    #region 解决中文乱码 Ethan 2016-01-06 [DllImport("iTunesMobileDevice.dll", CallingConvention = C ...

  5. 使用jQuery Uploadify在ASP.NET 上传附件

    Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.Uploadify官方网址:http://www.uploadify.com/,在MVC中使用的方法可以参考 jQuer ...

  6. ENode框架Conference案例分析系列之 - 事件溯源如何处理重构问题

    前言 本文可能对大多数不太了解ENode的朋友来说,理解起来比较费劲,这篇文章主要讲思路,而不是一上来就讲结果.我写文章,总是希望能把自己的思考过程尽量能表达出来,能让大家知道每一个设计背后的思考的东 ...

  7. 【优雅代码】深入浅出 妙用Javascript中apply、call、bind

    这篇文章实在是很难下笔,因为网上相关文章不胜枚举. 巧合的是前些天看到阮老师的一篇文章的一句话: “对我来说,博客首先是一种知识管理工具,其次才是传播工具.我的技术文章,主要用来整理我还不懂的知识.我 ...

  8. 操作系统核心原理-7.设备管理:I/O原理

    一.I/O的基本知识 1.1 为何要有I/O 前面阐述了操作系统具有进程管理.内存管理.外存管理三大核心功能,但是计算机归根是为人类服务的,这就要求计算机必须提供某种机制使得人们可以向计算机发出命令或 ...

  9. 探索C#之微型MapReduce

    MapReduce近几年比较热的分布式计算编程模型,以C#为例简单介绍下MapReduce分布式计算. 阅读目录 背景 Map实现 Reduce实现 支持分布式 总结 背景 某平行世界程序猿小张接到B ...

  10. 【Paddy】如何将物理表分割成动态数据表与静态数据表

    前言 一般来说,物理表的增.删.改.查都受到数据量的制约,进而影响了性能. 很多情况下,你所负责的业务关键表中,每日变动的数据库与不变动的数据量比较,相差非常大. 这里我们将变动的数据称为动态数据,不 ...