在Linux中,任何一个文件都有用户(User),所属群组(Group),及其他人(Ohters)三种身份的个别权限。另外,系统上的帐号和root 的相关信息在 /etc/passwd 这个文件里,个人密码在 /etc/shadow 这个文件里。所有的组名在 /etc/group 中。这三个文件是很重要的,不要随便删了。。。
Linux 文件属性
【ls】 查看文件的命令。登陆系统,使用【su - 】 切换成root 使用【ls -al 】
[root@study ~]# ls -al # 显示所有文件,包括隐藏文件
总用量 36
dr-xr-x---. 5 root root 225 5月 27 21:04 .
dr-xr-xr-x. 17 root root 224 5月 12 21:30 ..
-rw-------. 1 root root 2201 5月 12 21:31 anaconda-ks.cfg
-rw-------. 1 root root 10 5月 26 20:40 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
drwx------. 4 root root 31 5月 26 20:29 .cache
drwxr-xr-x. 3 root root 18 5月 26 20:29 .config
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
drwx------. 3 root root 25 5月 12 21:32 .dbus
-rw-r--r--. 1 root root 2249 5月 12 21:32 initial-setup-ks.cfg
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-------. 1 root root 114 5月 27 21:04 .xauthcodBEp
权限 连接 拥有者 用户组 文件容量 修改日期 文件名
-
dr-xr-x— 这个东西代表文件的类型与权限
这一栏十个字符,第一个字符代表这个文件时目录[d],文件[ - ]或链接文件[ | ]等.[b] 表示为设备文件里面的可供存储的周边设备。 [c] 表示设备文件里面的端口设备,键盘鼠标啥的。
接下来的字符三个一组。是 [ rwx] 的组合。r 代表可读,w 可写,x 可执行如果没有权限就是 - 。注意这三个的顺序不变。
共有三组,第一组时文件拥有者可具备的权限,第二组是加入此用户组之帐号的权限,第三组其他人的权限。
这些权限都是针对用户的,而不是电脑。 -
第二栏表示有多少文件名连接到此节点(inode),每个文件都会将他的权限与属性记录到文件系统的 inode 中,不过,我们的目录树使用文件名来记录,因此每个文件名都会连接到一个 inode,,这个属性就是记录有多少不同的文件名连接到同一个 inode 号码。
修改文件属性和权限
- 修改所属用户组: chgrp
要被修改的组名必须要在 /etc/group 文件中存在才行。 - 修改文件拥有者,chown.用户也必须是已经存在的帐号,还可以顺便修改用户组的名称,如果连目录下所有的子目录或文件同时更改文件拥有者,前面加上 -R 就好。
chown [-R] 帐号名称:所属用户组 文件或目录
通常我们使用cp 源文件 目标文件
进行复制文件发送给其他人,但是新的文件属性不变,所以为了使其他人可以使用,就要使用 chgrp chown 来修改用户组,文件拥有着。 - 修改权限 chmod 权限的设置方法有两种,数字和符号。
- 数字:文件的基本权限有9个,三个身份三个权限。
r:4 w:2 x:1 [-rwxrwx---] owner=4+2+1=7 group=7 other=0 所以权限数字就是770
.chmod [-R] xyz 文件或目录
[root@study ~]# ls -al .bashrc
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
[root@study ~]# chmod 777 .bashrc # 开启全部权限
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 12月 29 2013 .bashrc
- 符号类型修改文件权限。使用 u ,g,o 来代表三个身份。此外 a 代表 all 集全部身份
[root@study ~]# chmod u=rwx,go=rx .bashrc
[root@study ~]# chmod a+w .bashrc # 三种用户都加上可写的权限
[root@study ~]# chmod a-w .bashrc # 减去
目录与文件权限的意义
- 权限对文件的重要性
文件时实际含有数据的地方,包括一般性文本,数据库文件,二进制可执行文件。
- r :可读取此文件的世纪内容,如读取文本文件的文字内容等;
- w : 可以编辑,新增或是修改文件的内容(不包括删除)
- x :该文件具有可以被系统执行的权限。
对于可执行文件,在 window 中,一个文件是否可以执行主要看扩展名。但是在 linux 下,就看有没有这个权限。跟文件名没有关系。
- 权限对目录的重要性
目录主要的内容是记录文件名列表,文件名与目录有强烈的关联,
- r : 表示具有读取目录结构列表的权限,当有这个权限时,表示你可以查询该目录下的文件名数据,所以可以使用 ls 这个命令将该目录的内容列表显示出来。
- w 表示你具有改动该目录结构列表的权力,建立新的文件和目录,删除已经存在的文件和目录(无论该文件的权限是什么),将以存在的文件或目录进行更名,移动该目录的文件、目录的位置。
- x 虽然目录不可被执行,这个代表用户能否进入该目录成为工作目录(就是进入该目录的权限)。所谓的工作目录就是你目前所在的目录,变换目录的命令就是 [cd[ 。也就是说,如果你有 r 权限,但没有 x 权限,你可以浏览此目录下的文件列表,但不能切换进这个目录,也就无法执行该目录下的任何命令,即使你有该目录的 r w 权限。
来玩一下:
- 先用root 身份建立所需的文件与目录环境
[root@study ~]# cd /tmp # 进入所有人都可以工作的 /tmp 目录
[root@study tmp]# mkdir testing # 建立新目录
[root@study tmp]# chmod 744 testing # 修改目录权限
[root@study tmp]# touch testing/testing # 建立空文件
[root@study tmp]# chmod 600 testing/testing # 修改文件权限
[root@study tmp]# ls -ald testing testing/testing # 展示一下
drwxr--r--. 2 root root 21 5月 31 20:12 testing
-rw-------. 1 root root 0 5月 31 20:12 testing/testing
一般身份的用户对这个目录只有 r 权限。
☁ ~ cd /tmp # 我们使用一般身份
☁ /tmp ls -l testing/ # 我们虽然有 r 权限可以查询文件,但是权限不够(没有x),所以会出现一堆问好。
ls: 无法访问testing/testing: 权限不够 # 可以读取目录的文件名列表,但是读不出来详细信息
总用量 0
-????????? ? ? ? ? ? testing
☁ /tmp cd testing/ # 当然没有x 进不去这个目录
cd: 权限不够: testing/
我们将文件拥有者改一下
[root@study tmp]# chown nero /tmp/testing/
[root@study tmp]# ls -ld /tmp/testing/
drwxr--r--. 2 nero root 21 5月 31 20:12 /tmp/testing/ # 我们这个账户就有了全部的权限
☁ /tmp cd testing/
☁ testing ls -l
总用量 0
-rw-------. 1 root root 0 5月 31 20:12 testing
☁ testing rm testing # 还可以进行删除
rm:是否删除有写保护的普通空文件 "testing"?
很多时候,目录不必有r 权限,有x 就行,因为即使你不知道目录的文件名,但可以进去,,,没有r 就是无法使用tab 的补全功能。。。。
linux 文件种类与扩展名
众所周知,任何设备在linux 下都是文件,连数据沟通的借口也有专属的文件在负责。所以linux 的文件种类很多,就像一般文件 [-] 与目录文件 [d]
- 文件种类
-
常规文件,就是我们在进行读写的类型的文件,就是[ - ]。。。可以分为:
1.纯文本文件ASCII: 这是系统中最多的一种文件类型,我们人类可以看懂,,数字,字母啥的。你可以使用[cat ~/.bashrc ] 来读取文件的内容。
2.二进制文件(binary): 可执行文件就是这种类型,就像刚才说的 cat 就是一个二进制文件。
3.数据文件(data) : 有些程序在运行的过程中会读取某些特定格式的文件。这些特定格式的就是数据文件,。就比如我们的登陆的数据记录在 /var/log/wtmp 中,使用 cat 会乱码,因为这是一种特殊的格式 -
目录 [d]
-
连接文件(link) :就类似与快捷方式,第一个属性是 [ l ]
-
设备与设备文件(device) :与系统周边及存储有关的文件通常在 /dev 这个目录下
1.区块(block)设备文件:就是一些存储数据,以供系统随即存取的借口设备,就像硬盘 [ b]
2.字符设备文件(character ):一些串行端口的接口设备,就像鼠标键盘。这些设备的特点就是一次性读取,不能够截断输出。就像你的鼠标不能瞬移。。 [c ] -
数据接口文件( sockets),这种类型通常用在网络上的数据交换。 [s]
-
数据传送文件(FIFO,pipe),主要用来解决多个程序同时读写一个文件所造成的错误问题,FIFO就是先进先出,即管道。。。[ p ]
-
linux 文件扩展名
linux 下其实没有所谓的扩展名,一个文件能不能执行,主要根据那十个权限,跟文件名无关。不过有可执行的权限和具有可执行的代码不是一回事。就像纯文本文件,有可执行能力,但执行不了。。。
但是我们还是希望有适当的扩展名来表示文件:
*.sh: 脚本或批处理文件(scripts)
*Z、*.tar,*.tar.gz , *.zip , *.tgz 压缩文件,根据压缩软件不同,有不同的扩展名
*.html , *.php 网页文件,代表 HTML 和 PHP 语法的网页文件, html 可以通过浏览器打开,php文件,通过客户端的浏览器来服务端浏览,可以得到运算后的网页结果。
从网络下到你的 linux 系统中,文件的属性和权限可能会被修改阿 -
文件名的长度限制。。255字节,大概128个汉字。。所以linux 的文件名可能会非常长。。。
-
文件名限制:
* ? < > ; & ! 【 】 | \ ' " ( ) { }
另外,文件开头 [ . ] ,这个是隐藏文件。同时命令的执行中,通常使用 -option 这类的,避免使用 [ + - ] 来开头
进展缓慢阿。。。什么时候我能建个自己的服务器呢。。。。。。。。。