基本知识
普通权限: r(read) w(write) x(execute)
用户类别: u(user) g(group) o(other)
对于每种用户都有一个指定的权限,分别用rwx这三个位表示,当用户没有该权限时就用 - 表示。
1 [root@compute ~]# ll /home/ 2 总用量 496 3 drwx------. 2 root root 16384 5月 26 14:12 lost+found 4 drwx------. 3 1010 user1 4096 7月 28 00:08 user1 5 drwx------. 3 user3 root 4096 7月 28 06:31 user3 6 drwx------. 3 user4 user4 4096 7月 28 00:29 user4
以上面的user1为例,d表示该文件为目录文件,d后面的rwx表示u(user)对其具有读写执行权限,之后的 - - - 表示g(group)里面的用对其没有任何权限,最后的 - - - 同理表示o(other)对其没有任何权限。
由于rwx这三个位只有两种状态——有这种权限或者没有这种权限——因此可以用0和1来对其进行编号
0 → 000 —— ---
1 → 001 —— --x
2 → 010 —— -w-
3 → 011 —— -wx
4 → 100 —— r--
5 → 101 —— r-x
6 → 110 —— rw-
7 → 111 —— rwx
因此以后可以直接用数字代表权限,比如 755 表示 rwxr-xr-x
改变文件的属主
# chown(change owner) 用法:chown USERNAME file1,file2...
1 [root@compute demo]# touch a 2 [root@compute demo]# ll 3 总用量 0 4 -rw-r--r--. 1 root root 0 7月 28 22:20 a 5 [root@compute demo]# chown user3 a 6 [root@compute demo]# ll 7 总用量 0 8 -rw-r--r--. 1 user3 root 0 7月 28 22:20 a
-R :递归修改子目录和文件,默认情况下不会修目录里面的问价的信息。
--reference=path/to/file 将file1,file2...的属主设置成和path/to/file文件一样。
1 [root@compute demo]# touch b 2 [root@compute demo]# ll 3 总用量 0 4 -rw-r--r--. 1 user3 root 0 7月 28 22:20 a 5 -rw-r--r--. 1 root root 0 7月 28 22:32 b 6 [root@compute demo]# chown --reference=a b 7 [root@compute demo]# ll 8 总用量 0 9 -rw-r--r--. 1 user3 root 0 7月 28 22:20 a 10 -rw-r--r--. 1 user3 root 0 7月 28 22:32 b
chown不仅可以修改属主,还可以修改属组,用法: chown USERNAME:GROUP file1,file2...(如果只写 :GROUP 可以只修改属组,其中:可用 . 号代替)
改变文件的属组
# chgrp 用法:chgrp GROUP file1,file2...
-R和--reference的用法和chown用法相同。
修改文件的权限
#chmod
1、修改三类用户的权限:chmod MODE file1,file2... 其中MODE是三位8进制数,比如 644 表示修改文件的权限为 rw-r--r--。注意如果位数不足,比如输入的MODE为32,默认解析为032,而不是320。
该命令同上面的chown命令一样支持 -R 和 --reference。
2、修改某类用户的权限:用法:chmod 用户类别=权限 file1,file2... 。这里的用户类别为u(user), g(group), o(other), a(all)中的一个。权限为rwx的组合,如:chmod g=rx hello.c 。更详细的用法参考下面的例子。
3、修改某类用户的某位权限:把用法2中的 = 号变成 -/+ 即可。如:给hello文件的user位加上执行权限 chmod u+x hello 。
1 [root@compute demo]# ll 2 总用量 0 3 -rw-r--r--. 1 user3 root 0 7月 28 22:20 a 4 -rw-r--r--. 1 user3 root 0 7月 28 22:32 b 5 [root@compute demo]# chmod 777 a 6 [root@compute demo]# ll 7 总用量 0 8 -rwxrwxrwx. 1 user3 root 0 7月 28 22:20 a 9 -rw-r--r--. 1 user3 root 0 7月 28 22:32 b 10 [root@compute demo]# chmod go-x a 11 [root@compute demo]# ll 12 总用量 0 13 -rwxrw-rw-. 1 user3 root 0 7月 28 22:20 a 14 -rw-r--r--. 1 user3 root 0 7月 28 22:32 b 15 [root@compute demo]# chmod u=rwx,go=rw b 16 [root@compute demo]# ll 17 总用量 0 18 -rwxrw-rw-. 1 user3 root 0 7月 28 22:20 a 19 -rwxrw-rw-. 1 user3 root 0 7月 28 22:32 b
新文件的默认权限——umask
系统中有一个umask变量,它记录了一个三位8进制数,当创建目录时,新目录的默认权限就是777-umask,创建文件时,新文件的权限默认是666-umask。
注意这里的 “-” 不是算术中的减,是拿掉的意思,比如当umask为003时,其对应为--- --- -wx,这时创建文件的默认权限是在 666(rw- rw- rw-) 中拿掉 003(--- --- -wx) 得到 664(rw- rw- r--)。而不是用666-003得到663(rw- rw- -wx),这样会造成 x 权限无中生有。
对于管理员来说,umask默认为022,对于普通用户来说umask的默认值为002。
直接使用umask可以查看当前用户的umask值。使用 umask OCT 可以改变umask的值(OCT为三位8进制数)
以是否登入为区分可将shell分为登入式shell和非登入式shell
登入式shell:
正常通过终端登入的shell
su - USERNAME
su -l USERNAME
非登入式shell:
su USERNAME
图形界面下打开的虚拟终端
自动执行的shell脚本
bash的配置文件
全局配置文件:/etc/profile, /etc/profile.d/*.sh, /etc/bashrc
个人配置文件:~/.bash_profile, ~/.bashrc
profile类的文件:设置环境变量,运行命令或脚本
bashrc类的文件:设置本地变量,定义命令别名
登入式shell读取配置文件的顺序:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非登入式shell读取配置文件的顺序:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
在/etc/profile文件中有这样一段语句:
1 # By default, we want umask to get set. This sets it for login shell 2 # Current threshold for system reserved uid/gids is 200 3 # You could check uidgid reservation validity in 4 # /usr/share/doc/setup-*/uidgid file 5 if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then 6 umask 002 7 else 8 umask 022 9 fi
这段语句设置了不同用户在每次重新登入后的默认umask不同。