用户
1. 用户查看
伪终端,所谓伪是相对于 /dev/tty 设备而言的,还记得上一节讲终端时的那七个使用 [Ctrl]+[Alt]+[F1]~[F7] 进行切换的 /dev/tty 设备么,这是“真终端”;
伪终端就是当你在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端,
who am i
who -a
参数 | 说明 |
---|---|
-a | 打印能打印的全部 |
-d | 打印死掉的进程 |
-m | 同am i,mom likes |
-q | 打印当前登录用户数及用户名 |
-u | 打印当前登录用户登录信息 |
-r | 打印运行等级 |
1.2. 创建用户
在 Linux 系统里, root 账户拥有整个系统至高无上的权利,比如 新建/添加 用户。
root 权限,系统权限的一种,与 SYSTEM 权限可以理解成一个概念,但高于 Administrator 权限,root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力,所有对象他都可以操作,所以很多黑客在入侵系统的时候,都要把权限提升到 root 权限,用 Windows 的方法理解也就是将自己的非法帐户添加到 Administrators 用户组。
更比如安卓操作系统中(基于 Linux 内核)获得 root 权限之后就意味着已经获得了手机的最高权限,这时候你可以对手机中的任何文件(包括系统文件)执行所有增、删、改、查的操作。
我们一般登录系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里就要用到 sudo 这个命令了。
不过使用这个命令有两个大前提,
一是你要知道当前登录用户的密码,
二是当前用户必须在 sudo 用户组。
su,su- 与 sudo
需要注意 Linux 环境下输入密码是不会显示的。
su 可以切换到用户 user,执行时需要输入目标用户的密码,sudo 可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。
su - 命令也是切换用户,同时环境变量也会跟着改变成目标用户的环境变量。
现在我们新建一个叫 lilei 的用户:
$ sudo adduser lilei
(Linux 下密码输入是不显示任何内容的),respecting-god 用户密码可以通过 sudo passwd respecting-god 命令进行设置。
然后是给 lilei 用户设置密码,后面的选项的一些内容你可以选择直接回车使用默认值:
$ ls /home
这个命令不但可以添加用户到系统,同时也会默认为新用户创建 home 目录:
现在你已经创建好一个用户,并且你可以使用你创建的用户登录了,使用如下命令切换登录用户:
$ su -l lilei
退出当前用户跟退出终端一样可以使用 exit 命令或者使用快捷键 Ctrl+d。
1.3. 用户组
在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源,就跟家的形式差不多,你的兄弟姐妹(不同的用户)属于同一个家(用户组),你们可以共同拥有这个家(共享资源),爸妈对待你们都一样(共享权限),你偶尔写写日记,其他人未经允许不能查看(私有资源和权限)。当然一个用户是可以属于多个用户组的,正如你既属于家庭,又属于学校或公司。
在 Linux 里面如何知道自己属于哪些用户组呢?
方法一:使用 groups 命令
$ groups respecting-god
其中冒号之前表示用户,后面表示该用户所属的用户组。这里可以看到 respecting-god 用户属于 respecting-god 用户组,每次新建用户如果不指定用户组的话,默认会自动创建一个与用户名相同的用户组(差不多就相当于家长的意思,或者说是老总)。
默认情况下在 sudo 用户组里的可以使用 sudo 命令获得 root 权限。
respecting-god 用户也可以使用 sudo 命令,为什么这里没有显示在 sudo 用户组里呢?
可以查看下 /etc/sudoers.d/respecting-god 文件,我们在 /etc/sudoers.d 目录下创建了这个文件,从而给 respecting-god 用户赋予了 sudo 权限:
方法二:查看 /etc/group 文件
$ cat /etc/group | sort
这里 cat 命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。
| sort 表示将读取的文本进行一个字典排序再输出,然后你将看到如下一堆输出,你可以在最下面看到 respecting-god 的用户组信息:
你可以使用命令过滤掉一些你不想看到的结果:
$ cat /etc/group | grep -E "respecting-god"
/etc/group 文件格式说明
/etc/group 的内容包括用户组(Group)、用户组口令、GID 及该用户组所包含的用户(User),每个用户组一条记录。格式如下:
group_name:password:GID:user_list
你看到上面的 password 字段为一个 x 并不是说密码就是它,只是表示密码不可见而已。
这里需要注意,如果用户的 GID 等于用户组的 GID,那么最后一个字段 user_list 就是空的,比如 respecting-god 用户,在 /etc/group 中的 respecting-god 用户组后面是不会显示的。lilei 用户,在 /etc/group 中的 lilei 用户组后面是不会显示的。
1.3.1将其它用户加入 sudo 用户组
默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限:
注意 Linux 上输入密码是不会显示的
$ su -l lilei
$ sudo ls
会提示 lilei 不在 sudoers 文件中,意思就是 lilei 不在 sudo 用户组中,至于 sudoers 文件(/etc/sudoers)你现在最好不要动它,操作不慎会导致比较麻烦的后果。
使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。
这里我用 respecting-god 用户执行 sudo 命令将 lilei 添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限:
$ su respecting-god # 此处需要输入 respecting-god 用户密码,respecting-god 的密码可以通过 `sudo passwd respecting-god` 进行设置。
$ groups lilei
$ sudo usermod -G sudo lilei
$ groups lilei
然后你再切换回 lilei 用户,现在就可以使用 sudo 获取 root 权限了。
1.4. 删除用户
sudo deluser lilei --remove-home
2. Linux 文件权限
文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。
Unix/Linux系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Unix/Linux系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。
在 Unix/Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。
2.1 查看文件权限
ls 命令了,如你所见,我们用它来列出并显示当前目录下的文件,当然这是在不带任何参数的情况下,它能做的当然不止这么多,现在我们就要用它来查看文件权限。
使用较长格式列出文件:
~/clash/PowerVim$ ls -l
total 52
drwxrwxr-x 2 respecting-god respecting-god 4096 4月 3 08:24 docs
-rw-rw-r-- 1 respecting-god respecting-god 2190 4月 3 08:24 install.sh
-rw-rw-r-- 1 respecting-god respecting-god 35147 4月 3 08:24 LICENSE
-rw-rw-r-- 1 respecting-god respecting-god 7643 4月 3 08:24 README.md
你可能除了知道最后面那一项是文件名之外,其它项就不太清楚了,那么到底是什么意思呢:
可能你还是不太明白,比如第一项文件类型和权限那一堆东西具体指什么,链接又是什么,何为最后修改时间,下面一一道来:
- 文件类型
关于文件类型,这里有一点你必需时刻牢记 Linux 里面一切皆文件,
正因为这一点才有了设备文件( /dev 目录下有各种设备文件,大都跟具体的硬件设备相关)这一说。
socket:网络套接字,具体是什么,感兴趣的用户可以自己去了解或期待实验楼的后续相关课程。
pipe 管道,这个东西很重要,我们以后将会讨论到,这里你先知道有它的存在即可。
软链接文件:链接文件是分为两种的,另一种当然是“硬链接”(硬链接不常用,具体内容不作为本课程讨论重点,而软链接等同于 Windows 上的快捷方式,你记住这一点就够了)。
- 文件权限
读权限,表示你可以使用 cat 之类的命令来读取某个文件的内容;
写权限,表示你可以编辑和修改某个文件;
执行权限,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 exe 后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。
你需要注意的一点是,一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。
-
所有者权限,这一点相信你应该明白了,至于所属用户组权限,是指你所在的用户组中的所有其它用户对于该文件的权限,比如,你有一个 iPad,那么这个用户组权限就决定了你的兄弟姐妹有没有权限使用它破坏它和占有它。
-
链接数
链接到该文件所在的 inode 结点的文件名数目(关于这个概念涉及到 Linux 文件系统的相关概念知识,不在本课程的讨论范围,感兴趣的用户可以自己去了解)。 -
文件大小
以 inode 结点大小为单位来表示的文件大小,你可以给 ls 加上 -lh 参数来更直观的查看文件的大小。
明白了文件权限的一些概念,我们顺带补充一下关于 ls 命令的一些其它常用的用法:
- 显示除了 .(当前目录)和 …(上一级目录)之外的所有文件,包括隐藏文件(Linux 下以 . 开头的文件为隐藏文件)。
$ ls -A
respecting-god@respectinggod-Lenovo-Legion-Y7000P2020H:~/clash/PowerVim$ ls -A
.ctags docs .git install.sh LICENSE README.md .vim .vimrc
当然,你可以同时使用 -A 和 -l 参数:
$ ls -Al
copy
查看某一个目录的完整属性,而不是显示目录里面的文件属性:
$ ls -dl <目录名>
显示所有文件大小,并以普通人类能看懂的方式呈现:
$ ls -AsSh
其中小 s 为显示文件大小,大 S 为按文件大小排序,若需要知道如何按其它方式排序,请使用“man”命令查询。
2.2 变更文件所有者
若前面已经执行删除lilei用户的命令,这里重新创建一下。
假设目前是 lilei 用户登录,新建一个文件,命名为 “ iphone6 ”:
# 注意当前的用户必须是 lilei
# 如果是 respecting-god 用户需要切换到 lilei(如果之前已经删除需要重新创建下)
$ sudo adduser lilei
[sudo] password for respecting-god:
Adding user `lilei' ...
Adding new group `lilei' (1001) ...
Adding new user `lilei' (1001) with group `lilei' ...
Creating home directory `/home/lilei' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for lilei
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
respecting-god@respectinggod-Lenovo-Legion-Y7000P2020H:~/clash/PowerVim$ su lilei
Password:
$ su lilei
$ cd /home/lilei
$ touch iphone6
可见文件所有者是 lilei :
现在,换回到 respecting-god 用户身份,使用以下命令变更文件所有者为 respecting-god :
# 需要切换到 respecting-god 用户执行以下操作
$ su respecting-god
$ cd /home/lilei
$ ls iphone6
$ sudo chown respecting-god iphone6
现在查看,发现 文件所有者成功修改为 respecting-god :
$ ll iphone6
-rw-rw-r-- 1 respecting-god lilei 0 5月 4 09:42 iphone6
2.3 修改文件权限
如果你有一个自己的文件不想被其他用户读、写、执行,那么就需要对文件的权限做修改,这里有两种方式:
方式一:二进制数字表示
每个文件的三组权限(拥有者, 所属用户组, 其他用户),
且 每个文件对应一个 rwx
,
read , write, x: 执行
即上图中的一个 数字 “7”;
$ ll iphone6
-rw-rw-r-- 1 respecting-god lilei 15 5月 4 13:53 iphone6
所以如果我要将文件“ iphone6 ”的权限改为只有我自己可以用那么就这样:
为了演示,我先在文件里加点内容:
$ echo "hello respecting-god" > iphone6
然后修改权限:
$ chmod 600 iphone6
sudo chmod 600 iphone6
[sudo] password for lilei:
现在,其他用户已经不能读这个“ iphone6 ”文件了:
ll iphone6
-rw------- 1 respecting-god lilei 15 5月 4 13:53 iphone6
方式二:加减赋值操作
完成上述相同的效果,你可以:
$ chmod go-rw iphone6
/home/lilei$ ll iphone6
---------- 1 respecting-god lilei 15 5月 4 13:53 iphone6
g、o 还有 u 分别表示 group、others 和 user,+ 和 - 分别表示增加和去掉相应的权限。
home/lilei$ chmod gou+rw iphone6
/home/lilei$ ll iphone6
-rw-rw-rw- 1 respecting-god lilei 15 5月 4 13:53 iphone6
3. adduser 与 useradd 的区别?
-
useradd 只创建用户,创建完了用 passwd lilei 去设置新用户的密码。
其实 useradd、userdel 这类操作更像是一种命令,执行完了就返回。 -
adduser 会创建用户,创建目录,创建密码(提示你设置),做这一系列的操作。
而 adduser 更像是一种程序,需要你输入、确定等一系列操作。
Linux 还有一些关于隐藏权限和特殊权限的内容,想全面了解 Linux 权限管理这部分内容的用户可以通过其它方式学习。
4. 实践
- 新建 loutest 用户;
sudo adduser loutest
- 将 loutest 用户 添加到 sudo 用户组中,
在没有添加到 sudo 用户组中, 此时 loutest 的身份;
/home$ su -l loutest:
:~$ sudo ls
[sudo] password for loutest:
loutest is not in the sudoers file. This incident will be reported.
使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。
~$ su respecting-god
$ groups loutest
loutest : loutest
-------
$ sudo usermod -G sudo loutest
$ groups loutest
loutest : loutest sudo
- 创建文件:
sudo touch /opt/forloutest
[sudo] password for loutest:
ll /opt/forloutest
-rw-rw-rw- 1 root root 0 5月 4 14:23 /opt/forloutest
- 将文件forloutest 的读写权限赋给用户loutest;
sudo chown loutest:loutest /opt/forloutest
$ ll /opt/forloutest
-rw-rw-rw- 1 loutest loutest 0 5月 4 14:23 /opt/forloutest
注意,loutest:loutest ,用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
5. 增加 Swap 空间
5.1 查看现有 swap 空间
free -m
free -g ( 单位是G)
5.2 创建一个swap 文件
swap交换空间其实就是硬盘上一个特定的文件,只不过这个文件只有内存在读写,只不过这个文件比较大些。
mkdir /home/roo/swapfile
cd /home/roo/swapfile
sudo dd if=/dev/zero of=swap50 bs=1G count=50
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2
参数注释:
1 if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
2 of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
3 ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
4 cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
5 skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
6 seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
7 count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
8 conv=conversion:用指定的参数转换文件。
ascii:转换ebcdic为ascii
ebcdic:转换ascii为ebcdic
ibm:转换ascii为alternate ebcdic
block:把每一行转换为长度为cbs,不足部分用空格填充
unblock:使每一行的长度都为cbs,不足部分用空格填充
lcase:把大写字符转换为小写字符
ucase:把小写字符转换为大写字符
swab:交换输入的每对字节
noerror:出错时不停止
notrunc:不截短输出文件
sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
5.3 转换swap 文件
注意, 不要漏掉 转换成 swap
类型这个步骤。
将生成的文件转换成swap类型的文件
sudo mkswap -f swap50
5.4 激活swap 文件
sudo swapon swap50
卸载的话使用 swapoff
sudo swapoff swap50
5.5 永久生效
虽然交换空间到此已经扩展成功了,但是电脑重启的话,还是会恢复默认的swap大小。
如果要一直使用这个swap,要把它写入/etc/fstab
文件中.
/home/roo/swapfile/swap none swap defaults 0 0