CS Basics
2017.01.17
定点数与浮点数
定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数。最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达大范围的实数。
先回顾一下 ls -l
的输出:
输出结果的第一个字段就是描述文件和目录权限的编码。这个字段的第一个字符代表了对象的类型:
-
代表文件d
代表目录l
代表链接c
代表字符型设备b
代表块设备n
代表网络设备之后有 3 组三字符的编码。每一组定义了 3 种访问权限:
r
代表对象是可读的w
代表对象是可写的x
代表对象是可执行的若没有某种权限,在该权限位会出现单破折线。这 3 组权限分别对应对象的 3 个安全级别:
如上图,_config.yml
文件有下面 3 组权限:
rw-
文件的属主 frankr--
文件的属组 staffr--
系统上其他用户这些文件权限从何而来?答案是 umask
。umask
命令用来设置所创建文件和目录的默认权限。
$ touch newfile
$ ls -l newfile
-rw-r--r-- 1 frank staff 0 Oct 7 21:50 newfile
$ umask
0022
touch
命令用分配给我的用户账户的默认权限创建了这个文件。umask
命令可以显示和设置这个默认权限。如上面代码所示,当前的默认权限为 0022
。第一位代表了一项特别的安全特性,叫作粘着位(sticky bit),后面的 3 位表示文件或目录对应的 umask 八进制码:
权限 | 二进制值 | 八进制码 | 描述 |
---|---|---|---|
--- | 000 | 0 | 没有任何权限 |
--x | 001 | 1 | 只有执行权限 |
-w- | 010 | 2 | 只有写入权限 |
-wx | 011 | 3 | 有写入和执行权限 |
r-- | 100 | 4 | 只有读取权限 |
r-w | 101 | 5 | 有读取和执行权限 |
rw- | 110 | 6 | 有读取和写入权限 |
rwx | 111 | 7 | 有所有权限 |
八进制模式先取得权限的八进制值,然后再把这三组安全级别(属主、属组和其他用户)的八进制值顺序列出。因此,八进制模式的值 664 代表属主和属组成员都有读取和写入的权限,而其他用户都只有读取权限。
这里就有个疑问了,系统上默认的八进制的 umask 值是 0022
,而我所创建的文件的八进制权限却是 644 (rw-r–r–),这是如何得来的呢?
umask 值只是个掩码。它会屏蔽掉不想授予该安全级别的权限。接下来我们还得再多进行一些八进制运算才能搞明白来龙去脉。
具体说来,就是要把 umask 值从对象的全权限值中减掉。对文件来说,全权限的值是 666
(所有用户都有读 和写的权限);而对目录来说,则是 777
(所有用户都有读、写、执行权限)。所以在上例中,文件一开始的权限是 666
,减去 umask 值 022
之后,剩下的文件权限就成了 644
。
可以用 umask
命令为默认 umask 设置指定一个新值。
$ umask 026
$ touch newfile2
$ ls -l newfile2
-rw-r----- 1 frank staff 0 Oct 7 22:14 newfile2
chmod
命令用来改变文件和目录的安全性设置:
chmod options mode file
mode
参数可以使用八进制模式也可使用符号模式进行安全性设置。当然,八进制模式设置非常直观,直接用期望赋予文件的标准 3 位八进制权限码即可。
$ ls -l newfile
-rw-r--r-- 1 frank staff 0 Oct 7 21:50 newfile
$ chmod 760 newfile
$ ls -l newfile
-rwxrw---- 1 frank staff 0 Oct 7 21:50 newfile
使用符号模式需要对应 1) user 2) group 3) others 三种身份,我们用 u, g, o 来代表三种身份的权限,此外,a 则代表 all 亦即全部的身份!读写和执行的权限用 r, w, x 表示:
chmod | u g o a | + (加入) - (除去) = (设定) | r w x | file |
如果我们不知道原先的文件属性,而只想要增加 .bashrc 这个文件的所有用户均可写入的权限,那么就可以使用:
chmod a+w .bashrc
chown
命令用来改变文件的属主,chgrp
命令用来改变文件的默认属组。
chown
命令的格式如下:
chown options owner[.group] file
可用登录名或 UID 来指定文件的新属主,chown
命令也支持同时改变文件的属主和属组,也可以只改变一个目录的默认属组。
$ chown chris newfile
$ chown chris.shared newfile
$ chown .newgroup newfile
但需要注意,只有 root 用户能够任意改变文件的属主。任何属主都可以改变文件的属组,但前提是属主必须是原属组和目标属组的成员。
好吧,文件权限先这样了。
Frank Lin
CS Basics
2017.01.17
定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数。最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达大范围的实数。
Tutorials
2020.01.09
IKEv2, or Internet Key Exchange v2, is a protocol that allows for direct IPSec tunnelling between networks. It is developed by Microsoft and Cisco (primarily) for mobile users, and introduced as an updated version of IKEv1 in 2005. The IKEv2 MOBIKE (Mobility and Multihoming) protocol allows the client to main secure connection despite network switches, such as when leaving a WiFi area for a mobile data area. IKEv2 works on most platforms, and natively supported on some platforms (OS X 10.11+, iOS 9.1+, and Windows 10) with no additional applications necessary.