赞
踩
目录
1.人不善于直接使用操作系统
2.如果让人直接访问操作系统a.操作成本特别高b.人会犯错,会带来不安全因素。
所以操作系统设计者不会让人直接操作操作系统。
那么我们是如何访问操作系统的呢?那么图形化界面和指令操作究竟是什么东西呢?
外壳程序的意义:
1.是用户和操作系统交互的中间软件层
2.可以在一定程度起到保护操作系统的作用。
Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
>将使用者的命令翻译给核心(kernel)处理。
>同时,将核心的处理结果翻译给使用者。
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制(root只有一个,具有Linux下的最高权限,一般不受权限的约束。)
普通用户:在linux下做有限的事情。(可以有多个,要受权限的约束)
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。Linux下可以同时存在多个用户,Linux是一个多用户操作系统。
命令: su [用户名]
功能:切换用户。(潜台词就是在切换当前的权限。)用户该如何进行身份切换呢?
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
这里我们创建了一个新用户烛渊,我们发现root用户切换为普通用户可以不输入普通用户的密码。
但是普通用户切换为root用户需要输入root用户的密码
普通用户切换为另一个普通用户需要输入要切换的那个用户的root密码。
下面我们又创建了一个普通用户芊樱,她切换为烛渊的账户就需要输入烛渊的密码。
对角色和文件操作
权限:
是什么? 针对人的,事物的基本属性决定权限相关的概念的-->文件权限-->一件事情是否允许被你“做”。
权限的核心:“人”+事物属性
认识一下Linux文件的权限
每一行中的时间为文件最后修改的时间
ll显示的第一列的第一个字符,表名该文件的文件类型
d:目录
-:普通文件
p:管道文件
b:块设备(磁盘设备)
c:字符设备(键盘或者显示器)
(Linux下,不以文件后缀来区分文件类型,但并不代表不可以使用,但在系统层面没有意义,给自己看的。)
注:gcc是Linux环境下的一个软件,gg!=linux系统,是区分后缀的。
下面的代码我们创建了一个hello.c的简单的C语言程序,在gcc下是可以编译的,但是如果我们将其重命名为hello.txt,就不可以编译了。
人:可以认为是一种角色或者身份。
拥有者:文件属于谁
所属组:文件属于哪一个组
other:不属于上面两个中的任意一个,就是other
linux不会记录other是谁,只会记录拥有者和所属组
在下面这张图中,第一个root代表着文件的拥有者,第二个root代表着所属组
每一行的第一个字母表示文件的所属类型
后面的字母每三个为一组,分别为owner,gooup,other的权限
r为read就是读取的权限,w为write就是写入的权限,x为可执行
如果没有某一个权限,则为"-"
基本权限
i.读(r/4): Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2): Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限
如何操作?
改人
改属性
使用chmod来改变文件的权限
a)chmod
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限root用户不受权限的约束,无视文件的权限。
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
chmod u+x hello.txt就可以给我们的使用者赋予执行hello.txt文件的权限
chmod u-x hello.txt就可以去除当前使用者读取hello.txt文件的权限,以此类推。
chmod u+rwx hello.txt就可以给我们的使用者赋予读取,写入和执行的权限
chmod g+x hello.txt就可以给我们的所属组加上执行hello.txt文件的权限
使用逗号可以执行多个权限修改
chmod a-r hello.txt就可以删掉使用者,所属组和其他的写入文件的权限。
如果没有权限就会产生以下的报错。
如何表示一个文件的权限:
可以使用rwx表示,也可以使用111来表示。
所以一个权限可以用一个八进制数来表示。
所有者,所属组和其他用户的权限可以用三个八进制数来表示
所以7转换成111,也就是拥有读取,写入和执行的权限,在下面的代码中
chmod 777 hello.txt
就是赋予所有者,所属组和其他用户读取,写入和执行的权限
普通用户不能直接把文件赋予别的普通用户,或者把文件取回来。
但是root用户可以强制操作。
使用chown改变文件的所有者
b)chown
功能:修改文件的拥有者
格式: chown [参数] 用户名 文件名使用chgrp改变文件的所属组
c)chgrp
功能:修改文件或目录的所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: -R 递归修改文件或目录的所属组普通用户可以在命令前加上sudo,就是执行以下命令,要以root的权限执行,仅限这一次,输入的密码为普通用户自己的密码。
但是用户想进行sudo操作,需要用户再信任列表里面才可以执行sudo操作。
而添加用户到信任列表是需要root身份的。
如果不在信任列表里面就会产生下面的报错。
因为other是不确定的,所以Linux并没有提供方法去秀给other的所属。
我们如果是文件的拥有者,又属于文件的所属组,但是我们被root设定了没有文件的读取权限,但是我们的所属组有文件的读取权限,我们依然无法读取文件。
因为权限只认定一次。
1.目录的权限:
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
目录的可执行权限是表示你可否在目录下执行命令。
如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。2.umask
为何我们创建一个目录或者文件,默认权限是你所看到的样子?
Linux默认:
一个目录被创建,起始权限为777
一个普通文件被创建默认的权限位666
最终权限==起始权限??
umask为权限掩码,凡是在umask中出现的权限,都不应该在最终权限中出现!
如果我们的初始权限位777,umask权限掩码为002,就表示权限掩码对前两个不做影响,2为010,7为111, 010按位取反就是101,101与111按位与为101,也就是我们所看到的最终权限
d)umask
功能:
查看或修改文件掩码
新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & (~umask)就是对我们的umask按位取反,然后再和umask按位与操作。
格式: umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。修改umask掩码
粘滞位
文件被删的权限并不是文件自身的权限,而是文件目录的权限
大家所有用户都在同一个共同的路径下,对该目录拥有读写执行权限的情况下
,就如tmp目录存储所有用户的临时文件。
1.当多个用户共享一个目录,需要在该目录下进行读写,创建删除文件
2.但是满足自己只能删除自己的,而不能删除别人的要求(w:可以互删的,但是不满足条件),所以产生了粘滞位。
1.粘滞位只能给目录设置。
2.粘滞位一般是谁来添加,还需要谁来去除(root无视)。
3.粘滞位只能给other设置。
[root@localhost ~]# chmod +t /home/ # 加上粘滞位
我们看到mytmp的最后一个字符为T,也就是x的一种特殊的形式。
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"? y
rm: 无法删除"/home/abc.c": 不允许的操作当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
如果我们的普通用户没有在信任列表里面是不能使用sudo暂时升级权限的
此时我们需要切换到root用户,输入下面的指令,也就是打开我们的sudoers文件
打开之后也就是我们下面的页面
将我们的光标移动到大约114行,找到root ALL的那一行,在这一行的下面写入我们的信任用户,下面就是将zhuyuan添加到信任列表里面。
接着我们的烛渊也可以使用sudo指令了
• 超级用户(super user):根账号root,可以执行所有任务,在系统中不受限制地执行任何操作。
• 系统用户(system user):系统本身或应用程序使用的专门账号。
• 普通用户(regular user):供实际用户登录使用的普通用户账号, 只能对自己目录下的文件进行访问和修改
• 超级用户(UID=0)
• 系统用户(伪用户) (UID=1~499, 65534(noboday)):限制本机登录
• 普通用户(UID>=1000): 操作权限受到限制
• 超级组(supersuser group)
• 系统组(system group)
• 自定义组
• 超级组,组名为root(GID=0)
• 系统组 (GID=1~499)
• 自定义组(GID>=1000)
一个用户可以同时属于多个组,某个组为主要组,其它为次要组。 Ubuntu在创建用户时,会为用户自动创建一个同名的组作为主要组(默认组)。
• 一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。
• 一对多:即一个用户可以存在多个用户组中。那么此用户具有多个组的共同权限。
• 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限。
• 多对多:多个用户可以存在多个组中。其实就是上面三个对应关系的扩展。
Ubuntu管理员是具有管理权限的普通用户,有权删除用户、安装软件和驱动程序、修改日期和时间等。
Ubuntu默认禁用root用户,系统安装时创建的第一个用户自动成为管理员(加入到sudo组)。
赋予普通用户管理员权限
sudo vim /etc/sudoers
在sudoers中添加
username ALL=(ALL) ALL
第一段:用户名或者用户组,表示谁有权限来使用后面的配置。
第二段:表示来源地,即从哪执行这条命令。 ALL表示所有计算机
第三段: 表示可以切换到什么用户。 ALL表示所有用户
第四段: 表示可以切换到哪些组下的用户。 ALL表示所有组
第五段: 表示能够执行的命令。 NOPASSWD:ALL表示执行任意命令都不需要密码
(给账号设置密码)
(这里新创建的用户所用的是sh,并不是bash,使用的shell换了)
格式: su [选项] [用户登录名]
从root切换到其它账户不需要输入密码,普通用户切换到普通用户需要输入目标账户密码。
Linux系统中,用户账户、用户密码、组信息均存放在不同的配置文件中。
用户配置文件:用于保存系统用户的基本信息
文件位置: /etc/passwd
文件中每一行对应一个系统用户的基本信息
文件中使用冒号(:) 分隔各个字段,从左起这些字段的含义如下:
字段1:用户名
字段2:用户登录密码。 x表示密码保存在用户密码文件中(/etc/shadow)
字段3:用户的ID号(即UID)
字段4:用户所属(默认)组的ID号(即GID)
字段5:用户全名
字段6:用户主目录。主目录主要用于存放用户的初始化文件
字段7:用户使用的Shell
(输入cat /etc/passwd)
zhuyuan:x:1000:1000:zhuyuan,,,:/home/zhuyuan:/bin/bash
zhuyuan是烛渊用户名
x是密码
1000是UID(user id)
1000是GID(group id)
zhuyuan,,,是注释,用户全名
/home/zhuyuan是用户主目录
/bin/bash是用户使用的shell
文件位置: /etc/shadow
文件中每一行对应一个用户的密码信息,采用的是 SHA512 散列加密算法
文件中使用冒号(:) 分隔各个字段,从左起这些字段的含义如下:
字段1:用户名
字段2:加密后的用户密码
字段3:最后一次密码修改的日期(相对1970年1月1日的天数)
字段4:最小修改时间间隔,两次密码修改之间的间隔天数,在此期间用户不能修改密码(空值或0表示可以随时修改密码)
字段5:密码有效期(该字段的默认值为 99999,也就是 273 年,可认为是永久生效。)
字段6:密码过期之前的警告天数(该字段的默认值是 7,也就是说,距离密码有效期的第 7 天开始,每次登录系统都会向该账户发出 "修改密码" 的警告信息。)
字段7:密码禁用期,密码过期之后仍然接受密码的天数,超过将无法登陆(空值表示无限制)
字段8:账户的失效时间:账户有效期(空值表示永不过期)
字段9:保留字段
(输入cat /etc/shadow)
zhuyuan:$6$qTg7FQ0U$/cGQLyckmGK1QoY.TiECtdVjEMR1UboJm20PL0ge/ekQ2e2RuAQJieNQdWye2YT6ZBD4HZ5nfVq43GYwYJmS40:19244:0:99999:7:::
zhuyuan是用户名
$6$qTg7FQ0U$/cGQLyckmGK1QoY.TiECtdVjEMR1UboJm20PL0ge/ekQ2e2RuAQJieNQdWye2YT6ZBD4HZ5nfVq43GYwYJmS40是加密之后的用户密码
19244最后一次修改密码的日期(相对1970年1月1日的天数)
0是最小修改的时间间隔,0表示可以随时修改密码
99999是密码的有效期,默认为99999,可认为是永久
7是密码过期之前的警告天数,默认为7。
后面三个空格之间分别表示密码禁用期(密码过期之后仍然接受密码的天数,空格表示没有限),账户的失效时间(空值表示永不过期),保留字段
用户组文件:用于保存用户组的基本信息
文件位置: /etc/group
文件中每一行对应一个用户组的基本信息
文件中使用冒号(:) 分隔各个字段,从左起这些字段的含义如下:
字段1:用户组的名称
字段2:组密码
字段3:用户组的ID号(即GID)(跟/etc/passwd中的GID对应)
字段4:用户列表,需要注意的是,如果该用户组是这个用户的初始组,则该用户不会写入这个字段。也就是说,写入这个字段的用户是这个用户组的附加用户。
(输入cat /etc/group)
adm:x:4:syslog,zhuyuan
adm是用户组的名称
x是组密码
4是用户组的ID号(即GID)
syslog,zhuyuan是用户列表(这个组的附加用户)
通过查看用户配置文件/etc/passwd来查看用户信息
cat /etc/passwd | grep user
使用文本分析工具查看全部用户列表
awk -F ':' '{print $1}' /etc/passwd
useradd 用于为系统添加普通用户。
【命令格式】
◼ useradd [option] username
【常用选项】
◼ -g:指定用户所属的用户组
◼ -m:创建用户主目录,默认不创建
◼ -d:指定用户主目录
◼ -s:指定用户使用的Shell
◼ -r:指定创建一个系统账号
◼ -u:指定用户UID
【参数说明】
◼ 参数表示要创建的用户名称(用户名称不使用中文,最好全使用小写字母)
【用法示例】
◼ useradd -m tom
新建一个名为tom的用户,使用-m选项,其余选项默认;
新建一个名为jerry的用户,UID设为1200, 其余选项默认;
新建一个名为kitty的用户,shell设为/bin/bash, 其余选项默认;
观察/etc/passwd中三个用户的信息有什么不同;
每个账号默认的udi和gid都是一致的,然后编号tom是1002,但当jerry设置为1200后,编号就从1200开始往后编写。然后用户的主目录都是在/home/下对应的用户名称的文件夹,然后shell不指定的话默认是sh,指定的话才是bash
- 查看/home里的文件夹,是否每个账号都有家目录,并说明原因;
只有tom有家目录,因为我们的tom加了-m选项,就是创建用户主目录,默认的话是不创建的。
为系统添加用户后,需要使用passwd命令为新用户设置密码,否则新用户无法登录系统。
【命令格式】
◼ passwd [option] username
【常用选项】
◼ -d (delete):删除用户口令
◼ -l (lock):暂时锁定指定的用户账号
◼ -u (unlock):解除指定用户账号的锁定
◼ -S (status):显示指定用户账号的状态
【参数说明】
◼ 参数表示要设置密码的用户名称【用法示例】
◼ passwd:设置当前用户的密码
◼ passwd tom:设置指定用户的密码root用户可以使用passwd设置所有用户密码
普通用户可以使用passwd设置自身密码
该命令用于将系统中不再使用的用户删除。不允许删除正在使用的用户。
【命令格式】
◼ userdel [option] username
【常用选项】
◼ -r:删除用户时,连同用户的家目录和邮件文件一并删除
【参数说明】
◼ 参数表示要删除的用户名称
【用法示例】
◼ userdel -r tom
usermod命令用于修改用户的基本信息。
【命令格式】
◼ usermod [option] username
【常用选项】
◼ -d:为用户指定新的家目录
◼ -m:为用户指定新的家目录时,移动原来家目录中的所有文件到新目录(与-d一起使用)
◼ -s:修改用户默认的Shell
◼ -l:修改用户名
◼ -L:锁定账号
【参数说明】
◼ 参数表示要修改的用户名称
【用法示例】
◼ usermod -md /home/newdir tom(将原来的家目录移动到指定的新目录)
◼ usermod -s /bin/ksh tom
把tom用户改名为tim, UID改为2000(使用man usermod找出需要的选项),主目录改为/home/tim;
- 把jerry用户锁定,分别切换到kitty与jerry, 观察有什么不同。
无法切换到jerry用户
(进一步测试)
使用root账户是可以su到锁定账户的,使用别的一般账户是没办法su到锁定用户的,锁定用户是可以切换到别的用户的。
【命令格式】
◼ groupadd groupname
【常用选项】
◼ -g:指定GID
◼ -r:创建系统组,不带此选项创建普通组
【参数说明】
◼ 参数表示要创建的用户组名称
【用法示例】
◼ groupadd bigdata
建立一个名为bigdata的自定义组,GID=1500;
建立一个名为datascience的自定义组,选项为默认,观察该组的GID;
【命令格式】
◼ groupdel groupname
【常用选项】
没有选项
【参数说明】
◼ 参数表示要删除的用户组名称
【用法示例】
◼ groupdel bigdata
删除ds组,查看kitty所属的组。(Kitty所属的是Kitty组)
使用groupmod命令修改组名和GID
【命令格式】
◼ groupmod [option] groupname
【常用选项】
◼ -g:修改GID
◼ -n:修改组名
【参数说明】
◼ 参数表示要修改的用户名称
【用法示例】
◼ 修改bigdata的GID为1030
groupmod -g 1030 bigdata
◼ 修改bigdata的组名为hugedata
groupmod -n hugedata bigdata
把datascience组改名为ds,GID=2000;
groups用于显示某用户所属的全部组。
命令格式】
◼ groups username
【常用选项】
没有任何选项
【参数说明】
◼ 参数表示要查看所属组的用户名,没有参数查看当前用户的所属组。
【用法示例】
◼ groups tom
◼ groups
查看kitty所属的组;
【命令格式】
◼ gpasswd [option] username groupname
【常用选项】
◼ -a: 向指定组添加用户
◼ -d: 从指定组中删除用户
【参数说明】
◼ 参数表示要操作的用户名和组名。
【用法示例】
◼ gpasswd -a tom hugedata
◼ gpasswd -d tom hugedata
把用户tim,jerry添加到bigdata组中,把用户kitty添加到datascience组中;
【命令格式】
◼ id username
【常用选项】
没有任何选项
【参数说明】
◼ 参数表示要查看信息的用户名,没有参数查看当前用户的信息。
【用法示例】
◼ id tom
【命令格式】
◼ who
【常用选项】
没有任何选项
【参数说明】
没有任何参数
【用法示例】
◼ who
【命令格式】
◼ last [option] username
【常用选项】
-n: n为数字,指定查询的次数
【参数说明】
◼ 参数表示要查看信息的用户名,没有参数查看当前用户的信息。
【用法示例】
◼ last -5 zhuyuan
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。