Linux File Properties

ls -l command show files properties. Let’s descrip what these properties mean.

1
2
3
4
5
6
[root@www ~]# ls -al
total 156
drwx------ 3 root root 4096 Sep 5 10:37 .gitignore
-rw-r--r-- 1 root root 5661 Sep 4 18:25 README
[ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ]
[ 权限 ][连结][拥有者][群组][文件容量][ 修改日期 ][ 檔名 ]

  • 权限
    第一栏代表这个文件的类型与权限(permission):
    这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个字符:
    第一个字符代表这个文件是『目录、文件或链接文件等等』:
    当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
    当为[ - ]则是文件,例如上表档名为『install.log』那一行;
    若是[ l ]则表示为连结档(link file);
    若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
    若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
    接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
    第一组为『文件拥有者的权限』;
    第二组为『同群组的权限』;
    第三组为『其他非本群组的权限』。

  • 连结
    第二栏表示有多少档名连结到此节点(i-node)

  • 拥有者
    第三栏表示这个文件(或目录)的『拥有者账号』

  • 所属群组
    第四栏表示这个文件的所属群组

  • 文件容量
    第五栏为这个文件的容量大小,默认单位为bytes;

  • 修改日期
    第六栏为这个文件的建档日期或者是最近的修改日期:

  • 档名
    第七栏为这个文件的档名

改变文件属性与权限

  • chgrp :改变文件所属群组
1
chgrp groupname [-R] dirname/filename ...
  • chown :改变文件拥有者
1
2
[root@www ~]# chown [-R] acount file_or_directory
[root@www ~]# chown [-R] acount:groupname file_or_directory //change own and group
  • chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
1
2
3
4
5
6
7
8
9
r:4
w:2
x:1
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
[root@www ~]# chmod [-R] 751 file_or_directory
[root@www ~]# chmod [-R] 700 file_or_directory
[root@www ~]# chmod [-R] 744 file_or_directory

Linux文件扩展名:

基本上,Linux的文件是没有所谓的『扩展名』的,我们刚刚就谈过,一个Linux文件能不能被执行,与他的第一栏的十个属性有关, 与档名根本一点关系也没有。这个观念跟Windows的情况不相同喔!在Windows底下, 能被执行的文件扩展名通常是 .com .exe .bat等等,而在Linux底下,只要你的权限当中具有x的话,例如[ -rwx-r-xr-x ] 即代表这个文件可以被执行喔!

不过,可以被执行跟可以执行成功是不一样的~举例来说,在root家目录下的install.log 是一个纯文本档,如果经由修改权限成为 -rwxrwxrwx 后,这个文件能够真的执行成功吗? 当然不行~因为他的内容根本就没有可以执行的数据。所以说,这个x代表这个文件具有可执行的能力, 但是能不能执行成功,当然就得要看该文件的内容啰~

虽然如此,不过我们仍然希望可以藉由扩展名来了解该文件是什么东西,所以, 通常我们还是会以适当的扩展名来表示该文件是什么种类的。
enterMysql.sh can execute, if you change its name to enterMysql, it can be #executed to.

1
2
3
[root@www ~]# sh enterMysql.sh
[root@www ~]# mv enterMysql.sh enterMysql
[root@www ~]# sh enterMysql