1.chown :
chown 用来改变文件的属主和属组:
[root@localhost ~]# chown aming:root files.log
[root@localhost ~]# ll files.log
-rw-r--r--. 1 aming root 58 Mar 19 13:37 files.log
只改变属主:
[root@localhost ~]# chown aming files.log
只改变属组:
[root@localhost ~]# chown :aming files.log //双引号后跟属组即可
补充:想要只改变属组,还有一条“正牌”命令: chgrp
[root@localhost ~]# chgrp aming files.log //作为了解,可以不使用该命令
2.chmod :
chmod 用来更来权限。有两种方式,既可以通过字母 u g o a, r w x 更改,也可以通过数字形式更改:
方式一:字母形式
针对谁进行修改:u-- user g -- group o -- others a -- all
修改什么权限: r-- read w -- write x -- execute
r 权限 对于普通文件为可cat haed tail more less vi vim (当然这里的vi 和 vim 只能查看,不能修改)。对于目录为可ls 。
w 权限 对于普通文件为可echo vi vim rm mv cp,对于目录为可mkdir touch 新建目录和新建文件。
x 权限 对于普通文件为可执行,对于目录为可cd 。
方式二:数字形式
将权限换算成数字,r 对应 4 ,w 对应 2 ,x 对应 1,即如果一个文件权限为 r-xr--r--,换算为数字为 644 。
目录的默认权限为777,普通文件的默认权限为666,用户新创建的目录或普通文件的默认权限需要配合其自身的umask 计算出来,查看umask :
[root@localhost ~]# umask
0022
对于root 用户来说,他的 umask 为 0022,用后三位换算成字母表示的权限,为----w--w- 。计算root 创建的目录权限 (rwxrwxrwx) -(----w--w-) = (rwxr-xr-x) = 755,同样的算法可以计算出root 创建的文件权限为644 。对于普通用户来说,初始umask 为0002。可以手动设置umask值:
[root@localhost ~]# umask 0001
3.chattr,lsattr :
3.1 chattr可以为文件、目录设置特殊权限:常设的权限为i a ,说一下两者分别的作用:
i权限 (1)作用于文件时,文件不可 mv rmchown chgrp chmod rename,可以cp(不会复制该特殊权限)cat head tail more less 。(2)作用于目录时,目录下不可 mkdirtouch vi vim echo 创建新目录或新文件,对于目录中原本存在的文件,不可mv rm rename ,可以cat head tail more less chown chgrp chmod cp(这里的 cp 不能复制在当前目录下,因为复制到当前目录下相当于在该目录下新建文件)vivim echo 修改内容。对于目录自身来说,不可mv rm chown chgrp chmod rename,可以cp(同样不会复制该特殊权限)ls 。
为目录/文件添加/消除该特殊权限:
[root@localhost ~]# chattr +i filename (或foldername) //添加权限
[root@localhost ~]# chattr -i filename (或 foldername)//消除权限
如果对于目录添加/消除权限时,顺带为该目录下的所有文件及目录添加/消除权限,使用 -R 参数:
[root@localhost ~]# chattr +i -R foldername //添加权限
[root@localhost ~]# chattr -i -R foldername //消除权限
a权限 (1)作用于文件时,文件不可 mv rmchown chgrp chmod rename,可以 cp(不会复制该特殊权限) cat headtail more less echo(不可重定向> ,只能追加新内容>> )vi vim(注意,虽然 a 的作用主要是限制只能追加新内容,不允许修改旧内容,但vi vim 中只能查看,即便不修改旧内容,在最下方添加新内容也不能正常保存退出,想要追加只能使用>> )。
3.2 lsattr用来查看文件的特殊权限:
[root@localhost ~]# lsattr filename
-------------e- filename
其中e 为默认值,如果添加了特殊权限,结果是酱紫的:
-----a-------e- duan.log
也可能是酱紫:
----i--------e- duan.log
lsattr 常用参数 -d -R :
[root@localhost ~]# lsattr -d . // 或直接 lsattr -d 查看当前目录自身的特殊权限
[root@localhost ~]# lsattr -R /tmp/learn/ //查看 learn/ 下所有文件及目录的权限。包括
//子目录中的文件
4.suid,sgid, sticky_bit:
4.1 suid(set_userid) 只能作用于二进制文件,使其他用户临时拥有该二进制文件所属主的权限,其中s = S + x,S 代表二进制文件的所属主对该二进制文件没有执行权限(实际中没有用到S的情况,因为连属主都没有可执行权限,会使得suid 毫无意义)。
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 25980 Feb 22 2012/usr/bin/passwd
以passwd 命令为例,其权限为rwsr-xr-x ,passwd命令的作用是修改密码,密码需要写入/etc/shadow 文件中。其他用户对该文件无权限,所以按理说其他用户不能通过passwd 修改密码,这样的结果是,其他用户在有修改密码的需求时只能找root,会带来极大的不方便。此时, suid 派上用场,临时给予其他用户 root 权限,使其他用户可以修改自己的密码。
设置suid ,两种方法:
[root@localhost ~]# chmod u+s /usr/bin/passwd //suid 对应u 位的 s ,取消则为 u-s
[root@localhost ~]# chmod 4755 /usr/bin/passwd //suid 对应的数字为4,取消则为 0755
4.2sgid(setgroupid) 可以作用于二进制文件和目录。作用于二进制文件时,可以使其他用户临时拥有该二进制文件所属组的权限;作用于目录时,在无论哪个用户在目录下新建的文件或目录拥有和该目录相同的属组(包括在该目录下的子目录中创建,同样生效,有继承性):
[root@localhost ~]# ll -d /tmp/learn
drwxrwsrwx.songwei songwei 4096 Mar 20 16:09 /tmp/learn
[root@localhost ~]# touch /tmp/learn/rootfile
[root@localhost ~]# ll !$
-rw-r--r--. root songwei 512 Mar 2016:20 /tmp/learn/rootfile
在其下面创建目录时同理。注意,的新建的目录不仅继承父目录的属组,还继承了父目录的sgid,新建的文件则只继承父目录的属组,不会继承父目录的sgid。
设置sgid,两种方法:
[root@localhost ~]# chmod g+s /tmp/learn //sgid 对应g 位的 s,取消则为 g - s
[root@localhost ~]# chmod 2755 /tmp/learn //sgid 对应的数字为2, 取消则为 0777
4.3stick_bit 只能作用于目录,使得该目录下的文件和目录只能由其属主用户 rm mvchown chgrp chmod vi vim(vi vim 可查看不可修改,即便强制保存也不允许) echo,非属主用户只能 cp cathead tail more less。这里补充一个知识:用户对文件或目录执行rm mv rename 操作时,有没有权限不取决于该文件或目录本身,而取决于其所在目录的权限,如:(但其他操作,比如vi vim echo chown chgrp chmod ,取决于文件或目录本身的权限,如果使用 vivim 强制保存退出,相当于先rm 再 touch,文件名虽然没有改变,但 user 和 group 已经改变,注意,可以这里可以多敲一下命令多试试。)
[songwei@localhost ~]# ll -d /tmp/folder
drwxrwxrwx. root root 4096 Mar 15 13:12 /tmp/folder
[songwei@localhost ~]# ll -d /tmp/folder
-rw-rw-r-- 1 leiqin leiqin 0 Mar 21 01:30 leiqin.log
-rw-rw-r-- 1 lishiming lishiming 0 Mar 21 01:30lishiming
由于目录权限为777,所以 songwei 用户可以对 leiqin.loglishiming 两个文件进行rm mv rename 操作,因为这些操作相当于对/tmp/folder 的w 权限,这一点要理解。知识补充结束。
要避免rm mv rename vi vim (这里vi vim 底行模式的操作为强制保存wq!)其他用户创建的文件,可以为目录添加stick_bit,同样两种方法:
[root@localhost ~]# chmod o+t /tmp/folder //stick_bit 对应o 位的 t,取消为 o - t
[root@localhost ~]# chmod o+t /tmp/folder //stick_bit 对应,取消为0777
在Linux中应用 stick_bit 的一个实例是 /tmp 目录:
[root@localhost ~]# ll -d /tmp
drwxrwxrwt. root root 4096 Mar 7 18:17 /tmp
5.用于搜索文件的几个命令:――
5.1which 用于从 $PATH 变量中的路径下查找文件,如果有 alias 关联,也会显示出来:
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/bin/ls
有人可能会疑惑,在使用which cd 时为什么找不到?因为cd 为内置命令,所谓内置命令是在kernel 中写好的,而像ls 这种都是第三方的。需要用到5.2 中的type 命令。
5.2type 用于查看指定命令的类型,判断其是内置命令还是外部命令:
[root@localhost ~]# type cd
cd is a shell builtin //builtin 内部命令
[root@localhost ~]# type java
java is /usr/local/jdk1.8.0_40/bin/java //外部命令
[root@localhost ~]# type ls
ls is aliased to `ls --color=auto' //alias 别名
使用-p 参数时,如果命令为外部命令,作用相当于which,如果命令不是外部命令(即内部命令或别名),则什么都不会显示:
[root@localhost ~]# type -p java
/usr/local/jdk1.8.0_40/bin/java
[root@localhost ~]# type -p cd
[root@localhost ~]#
5.3whereis 并非精确匹配,会在如下几个固定的几个目录中搜索: /bin /bin/sbin /usr/bin /usr/sbin /usr/share/man/man1 。搜索的文件类型只能属于原始代码、二进制文件或是帮助文件:
[root@localhost dira]# whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz/usr/share/man/man1/ls.1.gz
5.4locate 其实是 find -name的另一种写法,但查询速度比后者快得多,因为locate 不搜索具体目录,而是搜索一个数据库(/var/lib/mlocate/mlocate.db, 16进制,查看需要使用 hexdump -C命令),该数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate 命令可能会查到刚刚被删除的文件,也可能查不到刚刚新建的文件。为了避免这种情况,可以在使用locate 之前,先使用updatedb 命令手动更新数据库。
5.5find
该命令已经在《权当开篇――Linux学习之路(一)》中做过比较详细的总结,具体可以参看这篇博客,访问链接为 http://xitongjiagoushi.blog.51cto.com/9975742/1619923 。
6.软链接和硬链接:
软链接和硬链接也已经在《权当开篇――Linux学习之路(一)》中做过比较详细的总结,具体可以参看这篇博客,访问链接为 http://xitongjiagoushi.blog.51cto.com/9975742/1619923 。