自从我大微软终于放下身段,决定给开源社区一个迟来的拥抱,追随多年的拥趸们像是突然得到了女神的垂青,各种茫然失措、痛哭流涕、欢欣鼓舞,纷纷唱了起来:“等了好久终于等到今天,梦了好久终于把梦实现……”唱完之后才想起来好像说的什么开源、跨平台啥的和自己没太大关系,最基本的,Linux、IOS会么?被.NET细心呵护了这许多年,现在跟我说开源跨平台,你是玩我呢?不说了,拖了几个月的项目,老板还等着今天上线呢!

呵呵,开个玩笑,其实微软的开放姿态是受多数方肯定和欢迎的,IT行业各方面也多少有点影响,对于我来说,最大的影响莫过于打算好好研究下Linux,这玩意一直都想系统学习,奈何没有充足的动力,如今没有借口了,希望能尽快入门。

按照本人博客一贯的风格,本文并非系统的讲解,而是侧重于方便以后的复习回顾做笔记。本文绿字为个人见解,需验证。本系列参考书籍是《Linux就是这个范儿》,赵鑫磊和张洁著。

学习Linux第一个要面对的问题是版本选择,尼玛当时我一看就傻眼了,瞬间就有打道回府的冲动。大伙来瞅瞅,下面这还是07年时候的分支图(摘自网络),想想现在Android的景象,啧啧,这图还能装下么。

要从中选一个合适的,对门外汉来说确实不是件容易的事。开源就是这点不好,大家各行其是,说好听点百花齐放,却分流了本就不多的用户群,若如此众多的版本开发可以合力一处,windows还有笑傲江湖的资格么。虽说在服务器端因为开源的原因闯出了一片天地,但仍然无法回避占市场大头的桌面客户端的失利。博主认为凡事都不可走极端,纯开放和纯封闭都不可取,两者相互借鉴,给予自由,但又有机构按规则统一版本控制,才是软件发展的正确方式(maybe有某类开源协议支持博主的观点,除了GPL,博主对其它开源协议不甚清楚)。

所幸对于我们这群码农来说,各发行版都大同小异,一通百通。目前服务端用的比较多的免费版本非CentOS莫属,很多书籍也采用CentOS讲解,如今已到了7.1版本。

作为.NETer,虽然勾搭上了Linux,但是正房还是Windows,不可抛弃。那么如何在同台电脑上另外安装Linux呢,要知道Linux和Windows的文件系统都不一样,网上有此双系统的教程,但是为了安全计,我还是选择了虚拟机的方式。虚拟机的缺点是软件环境是模拟出来的,比如刚说的文件系统,虚拟机里Linux的文件系统都是由windows文件系统经虚拟机转换而来,效率上绝壁比原生安装的低下很多。

虚拟机我选择的是VMware Workstation,最新版11.1,注册码网上搜便是。在VMware界面上选择CentOS镜像文件,然后静静等待安装完毕即可,在此期间会让你输入用户名密码作为安装后的登录用户,然后是语言和输入法选择,完了就进入桌面了,如下:

也没什么特别的感觉,完全没有各类书籍里说的惊艳,maybe CentOS偏向于服务性能,对图形界面不care,maybe Ubuntu就不一样了。不管怎么说,我终于向前迈出了历史性的一步!


用户和用户组

Linux用户中除了root天生就很牛逼,其他用户都是屌丝。一个用户至少属于一个用户组,/etc/passwd文件中每行即表示一个用户,其中第4列即GID表示用户的“初始用户组”,用户所属的所有用户组称为“支持用户组”。还有个概念是“有效用户组”,所谓有效用户组表示用户当前所在的用户组,即用户在同一时刻只能以一个用户组成员的身份参与系统交互,至于为什么这么设计,目前未知。

前者说了,root很牛逼,几乎无所不能,很极端的对立,广大屌丝一般除了自己的一亩三分地,几乎不能干任何“有技术含量的”事(比如添加用户),所以有点什么事都要麻烦root。root为了不累死,决定传授一句咒语给屌丝们,让他们能在一段时间内具备自己(root)的能力,或者说“变身”为root,这个咒语就是sudo。比如/etc/shadow 这个文件是保存密码的,普通用户没有权限查看,一定要看的话可以执行“$ sudo cat /etc/shadow”,这时系统会要求输入当前用户密码,输密码虽然麻烦,但安全性高了,至少各类后台程序不能偷偷地搞小动作了(后来微软也学了这招,windows vista开始,右键就加入了新的菜单项——“以管理员身份运行”)。要给某个用户赋予sudo特权,就需要更改/etc/sudoers 文件中的内容,该文件能设置用户或用户组行使sudo权利的命令范围,甚至可以设置sudo时不用输入密码,不过这自然是不安全的,不推荐。

su命令,用来切换当前用户。所以如果嫌sudo太麻烦,就可以使用su临时切换到root用户,切换用户时须输入目标用户的密码。root用户使用su命令切换到任何用户都不需要输入密码,所以我们要在/etc/sudoers中明确禁止su被sudo特权执行。

和用户组类似,用户也有实际用户和有效用户(即上文说的当前用户)的概念,分别可用who am i 和 whoami 查看。

文件[属性和权限]

Linux环境大小写敏感,文件名也是,在文件名前加上“.”则该文件[夹]将隐藏。和windows不同,文件基本上没有扩展名,因为Linux不根据扩展名判断文件类型,而是根据文件的内容来判断。。

文件连接,也是一种文件类型,基于inode,inode包含文件的元信息。我们可以将inode简单理解成一个指针,指向文件所在磁盘中的物理位置,多个文件名可以指向同个inode,这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问,这种情况就被称为"硬链接"(hard link)。除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向 文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。软连接和硬链接最大的不同是:软连接指向的是目标文件的文件名,而硬链接指向的是目标文件的inode,软连接两个文件的inode是不一样的,不会影响目标文件inode的连接数。更多内容可参看Linux的inode的理解。

创建连接用ln,如果是复制cp命令,那么产生的是一个内容一样的新文件。

文件权限:r、w、x、s、t。前三者分表表示读、写、执行。由于权限可自由组合,所以以标志位的形式设计是最合理的。用数字表示,r为4,w为2,x为1,那么5就是r-x,rwx就是7。文件按顺序规定了拥有者、所属组和其他无关者的权限权限,如777即表示所有用户都对文件有读写执行权限,600表示只有拥有者有对该文件的权限,且该权限为读写权限即rw-。

我们可以使用chmod命令改变文件权限,如 chmod 700 testtext,这是数字权限法,还可以使用文字表示权限更改,如 chmod u+w testtext,表示给拥有者加上写权限。u、g、o、a分别表示拥有者、所属组、其他无关者和全部,+、-、=分别表示增加、减去、设定。

还有s、t,这两个权限代表什么呢?先说s,将文件的拥有者和用户组权限的执行位设置成s,分别称之为SUID和SGID,对二进制程序有效,SGID还能用在目录上。一个文件本身具有uid和gid的属性,表示拥有者和所属组,在文件被执行时,还会多出两个属性——euid和egid——分别表示执行文件的有效(当前)用户ID和有效(当前)用户组ID,Linux内核主要是根据euid和egid来确定进程对资源的访问权限。下面举个例子就清楚了:

假设文件myfile是属于foo用户的,是可执行的,现在没设SUID位,权限位是rwxr-xr-x,foo用户的uid和gid分别为200和201。另有一用户kevin,他的uid和gid分别为204和202。那么kevin运行myfile程序形成的进程的 euid=uid=204,egid=gid=202,内核根据这些值来判断进程对资源访问的限制,其实就是kevin用户对资源访问的权限,和foo没关系。然后我们将myfile设为SUID,则euid和egid变成被运行的程序的所有者的uid和gid,即现在kevin用户运行myfile,euid=200,egid=201,则这个进程具有它的属主foo的资源访问权限。http://i.cnblogs.com/EditPosts.aspx?postid=4678311

不知道执行SUID文件过程中,之前提到的系统的有效用户和有效用户组是否也对应于执行文件时的euid和egid, 即上例后半部,kevin运行myfile时,此时的系统有效用户是kevin还是foo呢?这个问题留待日后验证。

SUID的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。

SGID在二进制程序上的功效和SUID类似,在目录上能产生如下效果:假设该目录的所属组为gA,那么有效用户组为gB的用户进入此目录后,该用户的有效用户组就变成gA了,那么创建新文件,新文件的用户组就是gA。SGID如此,那么是否上述红字描述的问题也是一般答案呢?

更多内容可参看linux:SUID、SGID详解。

t,将文件的其他无关者权限执行位设为t,称为SBIT,仅对目录有效。功效:用户在设置了SBIT目录下创建的文件,只有自己和root才有权利删除此文件。


其它

$PATH环境变量,决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。

cpio命令:顾名思义,即输入输出的copy,现代电脑的标准输入就是键盘,标准输出是屏幕,我们可以通过重定向(|、>、<)输入输出,用它进行文件拷贝、打包解包等,和find等命令一起能发挥很大功效。关于cpio命令的中文man,可参看cpio命令详解

fork:拷贝一个子进程。如果一个进程fork之后,此时连同该进程是3个进程(该进程、fork后的父进程、fork后的子进程)呢,还是2个进程(该进程即fork后的父进程、fork后的子进程)呢?日后再解。

小结

接触到现在,概念倒还罢了,Linux的命令也忒多了,目前简单了解的有:man、cd、cp、kill、mkdir、mv、rm、nohup、cpio、ls、ln、jobs、find、whereis、which、type、tar、chmod、chown、su、sudo、gzip、cat、tail、bg、fg、at、crontab、echo、fork、ps、top……且不说每个命令各自的命令参数,尼玛,只能说用多如牛毛来形容了。

相关资料:

Shell脚本:Linux Shell脚本学习指南(超详细)

转载本文请注明出处:http://www.cnblogs.com/newton/p/4678311.html

转载于:https://www.cnblogs.com/newton/p/4678311.html

Linux之用户和权限相关推荐

  1. linux普通用户命令权限,Linux普通用户没有权限使用命令怎么办

    摘要 腾兴网为您分享:Linux普通用户没有权限使用命令怎么办,智能互联,智慧大学,微商助手,豌豆荚等软件知识,以及高考倒计时器,京东拼购app,单田芳评书打包,小米手机管家,离线小说,批量压缩图片大 ...

  2. linux 给用户添加权限

    linux 给用户添加权限 首先用 xshell 或者 MobaXterm 这样连接服务器的软件 然后使用管理员权限进入 root 目录 cd / // 进入服务器目录 sudo su // 进入管理 ...

  3. linux创建用户只读权限

    linux创建用户只读权限 第一步:添加用户并设置能够在shell上使用的命令 1.创建用户和登录shell 2.修改用户密码 3.创建用户shell执行命令目录 4.root修改用户的shell配置 ...

  4. Linux 创建用户和权限

    Linux 创建用户和权限 先切换到root用户 创建新用户 创建分组 查看用户 删除用户 设置密码 用户更改默认路径 设置用户的生命周期 用户切换 sudo 如何赋权给普通用户 如何查看命令路径 查 ...

  5. linux虚拟用户创建目录权限不足,在CentOs中安装vsFtpd并创建多个虚拟用户,且不同的用户拥有不同的权限以及指向不同的文件夹...

    在vsftpd中要实现不同用户不同权限,可以利用虚拟用户来实现. vsftpd的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而vsftpd的虚拟用户则是FTP ...

  6. linux中用户的权限是什么,linux中用户权限设置与更改相关介绍(上)

    不管是在生活中还是在工作中,我们都会经常碰到关于电脑权限方面的一些问题.现在介绍一下在linux系统中关于如何设置和管理用户的权限问题,介绍基本但很重要的命令. 在Linux中,权限分为三大类:基本权 ...

  7. linux给用户赋权限_linux/unix的用户与权限

    linux/unix 下的权限大致分读取.写入和执行三种,分别对应的 Readable, Writeable, Executeable.unix使用三个bit来保存权限信息,从高位到低位分别是 rwe ...

  8. linux用户命令权限管理,Linux命令-用户、权限管理

    用户是Unix/Linux系统工作中重要的一环,用户管理包括用户与组账号的管理. 在Unix/Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同 ...

  9. linux 普通用户touch权限不够_Linux 开启指令

    简单指令 1.1. ls 指令 语法1:# ls [路径] 表示列出指定路径下的文件夹和文件 的名字,如果路径没有指定则列出当前路径下的(list) 列如:在root用户的家目录中输入ls命令,则会看 ...

  10. linux的用户及权限管理,用户及权限管理

    一.Linux用户.组的概念 1.用户 管理员:root,0 其他用户:1-65535 系统用户:1-499,守护进程获取资源进行权限分配 普通用户:500+,交互式登陆 2.组 管理员组:root, ...

最新文章

  1. 青少年编程竞赛交流群周报(第039周)
  2. 深度学习概述:NLP vs CNN
  3. 武汉大专计算机专业分数线,武汉专科大学有哪些 2019武汉专科大学排名及分数线...
  4. Codeforces #528 Div2 F (1087F) Rock-Paper-Scissors Champion 树状数组+set
  5. 2020-12-22 一些有用的开源软件
  6. 22行代码AC_试题 历届试题 油漆面积【解题报告】
  7. 7极限精简版64位_DNF:国服更新64位客户端深度体验,真的有如此丝滑吗?
  8. 腾讯疯狂扩展7000人!我居然挂在了项目这块。。。
  9. python常用模块用法_python笔记之常用模块用法分析
  10. 基础总结篇之七:ContentProvider之读写短消息
  11. 【操作系统/OS笔记12】同步互斥的三种实现方法:禁用硬件中断、基于软件的解决方案、更高级的抽象
  12. javascript array map方法
  13. 最小二乘法用计算机求经验回归方程,最小二乘法求线性回归方程.doc
  14. odin学习2 button
  15. xshell写JS脚本自动进行操作
  16. 【Android 视频硬件编码】在Native层实现MediaCodec H264 编码 Demon
  17. STC51单片机-实验开发装置仿真-物联网应用系统设计
  18. 从k-line到决策实践:huobi api实现(一)
  19. 豪杰DVD播放器 3.0.8 URL重新定向栈溢出漏洞
  20. 计算机主机光驱弹不出来怎么办,电脑光驱弹不出来怎么办 电脑光驱不出来的图文解决方法...

热门文章

  1. 怎样用c语言预测股票价格,如何根据时间和价格的波动来预测股票走势
  2. 程序员写在猝死的前一天
  3. @2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017) K:Kayaking Trip(二分+贪心)
  4. 45.【Java 实现双色球中奖查询系统】
  5. 基数树结构---radix_tree
  6. 记2021沙尘漫天的春
  7. 计算机组装的硬件配置及报价,2021组装电脑配置清单及价格表说明
  8. COM ---- Inside COM Note
  9. JS-DOM操作基础
  10. DLL和EXE加载包在自身内部的资源文件