通过第一节课程的学习,你应该已经知道,Linux 是一个可以实现多用户登录的操作系统,比如“李雷”和“韩梅梅”都可以同时登录同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件。但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的 用户管理 和 权限机制,不同用户不可以轻易地查看、修改彼此的文件。
下面我们就来学习一下 Linux 下的账户管理的基础知识
请打开终端,输入命令:
$ who am i
# 或者
$ who mom likes
第一列表示打开当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用 whoami 即可)
第二列的 pts/0 中 pts 表示伪终端,所谓伪是相对于 /dev/tty 设备而言的,伪终端就是当你在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端,pts/0 后面那个数字就表示打开的伪终端序号,你可以尝试再打开一个终端,然后在里面输入 who am i,看第二列是不是就变成 pts/1 了
第三列则表示当前伪终端的启动时间。
还有一点需要注意的是,在某些环境中 who am i 和 who mom likes 命令不会输出任何内容,这是因为当前使用的 SHELL 不是登录时的 SHELL,没有用户与 who 的 stdin 相关联,因此不会输出任何内容。例如我在本地的 Ubuntu 系统上输入这个命令就不会有提示。
此时我们只需要打开一个登录 SHELL 的终端例如 Tmux,再在新的终端里执行命令即可。
$ tmux
who 命令其它常用参数
一般我们登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里就要用到 sudo 这个命令了。
su,su- 与 sudo
需要注意 Linux 环境下输入密码是不会显示的
su <user> 可以切换到用户 user,执行时需要输入目标用户的密码。
sudo <cmd> 可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。
su - <user> 命令也是切换用户,但是同时用户的环境变量和工作目录也会跟着改变成目标用户所对应的。
现在我们新建一个叫 lilei 的用户:
$ sudo adduser lilei
这个命令不但可以添加用户到系统,同时也会默认为新用户在 /home 目录下创建一个工作目录:
现在你已经创建好一个用户,并且你可以使用你创建的用户登录了,使用如下命令切换登录用户:
$ su -l lilei
退出当前用户跟退出终端一样,可以使用 exit 命令或者使用快捷键 Ctrl+D。
用户组
在 Linux 里面如何知道自己属于哪些用户组呢?
方法一:使用 groups 命令
$ groups shiyanlou
冒号之前表示用户,冒号之后表示该用户所属的用户组。
每次新建用户如果不指定用户组的话,默认会自动创建一个与用户名相同的用户组
方法二:查看 /etc/group 文件
$ cat /etc/group | sort
cat 命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。
| sort 表示将读取的文本进行一个字典排序再输出,然后你将看到如下一堆输出,你可以在最下面看到 shiyanlou 的用户组信息:
没找到?没关系,你可以使用 grep 命令过滤掉一些你不想看到的结果:
$ cat /etc/group | grep -E "shiyanlou"
group_name:password:GID:user_list
你看到上面的 password 字段为一个 x,并不是说密码就是它,只是表示密码不可见而已。
这里需要注意,如果用户的 GID 等于用户组的 GID,那么最后一个字段 user_list 就是空的,这里的 GID 是指用户默认所在组的 GID,可以使用 id 命令查看。比如 shiyanlou 用户,在 /etc/group 中的 shiyanlou 用户组后面是不会显示的。lilei 用户,在 /etc/group 中的 lilei 用户组后面是不会显示的。
将其它用户加入 sudo 用户组
使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限
$ sudo usermod -G sudo lilei
$ groups lilei
删除用户
$ sudo deluser lilei --remove-home
使用 –remove-home 参数在删除用户时候会一并将该用户的工作目录一并删除。
如果不使用那么系统会自动在 /home 目录为该用户保留工作目录。
删除用户组可以使用 groupdel 命令,倘若该群组中仍包括某些用户,则必须先删除这些用户后,才能删除群组。
Linux文件权限
查看文件权限
使用较长格式列出文件:
$ ls -l
ls命令其他常用用法
1.显示除了 .(当前目录)和 …(上一级目录)之外的所有文件,包括隐藏文件(Linux 下以 . 开头的文件为隐藏文件)。
$ ls -a
当然,你可以同时使用 -a 和 -l 参数:
$ ls -al
2.查看某一个目录的完整属性,而不是显示目录里面的文件属性:
$ ls -dl <目录名>
3.显示所有文件大小,并以普通人类能看懂的方式呈现:
$ ls -asSh
变更文件所有者
切换到 lilei 用户,然后在 /home/lilei 目录新建一个文件,命名为 iphone11。
$ su - lilei
$ pwd
$ touch iphone11
$ ls -alh iphone11
现在切换回到 shiyanlou 用户,使用以下命令变更文件所有者为 shiyanlou。
# 需要切换到 shiyanlou 用户执行以下操作
$ cd /home/lilei
$ ls iphone11
$ sudo chown shiyanlou iphone11
现在查看,发现文件所有者成功修改为 shiyanlou。
修改文件权限
如果你有一个自己的文件不想被其他用户读、写、执行,那么就需要对文件的权限做修改。文件的权限有两种表示方式:
方式一:二进制数字表示
每个文件有三组固定的权限,分别对应拥有者,所属用户组,其他用户,记住这个顺序是固定的。文件的读写执行对应字母 rwx,以二进制表示就是 111,用十进制表示就是 7,对进制转换不熟悉的同学可以看看 进制转换。例如我们刚刚新建的文件 iphone11 的权限是 rw-rw-rw-,换成对应的十进制表示就是 666,这就表示这个文件的拥有者,所属用户组和其他用户具有读写权限,不具有执行权限。
如果我要将文件 iphone11 的权限改为只有我自己可以用那么就可以用这个方法更改它的权限。
为了演示,我先在文件里加点内容:
$ echo "echo \"hello shiyanlou\"" > iphone11
然后修改权限:
$ chmod 600 iphone11
$ ls -alh iphone11
切换到 lilei 用户,尝试写入和读取操作,可以看到 lilei 用户已经不能读写这个 iphone11 文件了:
方式二:加减赋值操作
要完成上述实验相同的效果,你可以:
$ chmod go-rw iphone11
g、o 还有 u 分别表示 group(用户组)、others(其他用户) 和 user(用户),+ 和 - 分别表示增加和去掉相应的权限。
更多
adduser 和 useradd 的区别是什么
答:useradd 只创建用户,不会创建用户密码和工作目录,创建完了需要使用 passwd 去设置新用户的密码。adduser 在创建用户的同时,会创建工作目录和密码(提示你设置),做这一系列的操作。其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。而 adduser 更像是一种程序,需要你输入、确定等一系列操作。
Linux 还有一些关于隐藏权限和特殊权限的内容,想全面了解 Linux 权限管理这部分内容的用户可以通过其它方式学习。
作业
添加一个用户 loutest,使用 sudo 创建文件 /opt/forloutest,设置成用户 loutest 可以读写。截图并把操作过程写入实验报告。
提示: 如何创建一个文件呢?可以考虑 touch 命令,执行 sudo touch /opt/forloutest 这个命令可以创建一个空文件,但前提是执行这个命令的 loutest 用户需要具备 sudo 权限。
第一步,添加一个用户loutest。
sudo adduser loutest
第二步,让loutest用户具备sudo权限。
sudo usermod -G sudo loutest
第三步,loutest用户使用sudo创建文件 /opt/forloutest
su - loutest sudo touch /opt/forloutest
第四步,修改权限
sudo chmod go+rw /opt/forloutest