文档属性)

我们都知道,在windows下如果我们要查看文件或目录文件的属性的话,我们可以采用在目标文件上右键然后选择属性的方式来查看。同样在linux下文件也是有着自己的属性的,接下来是我个人在此问题上的总结,将会用最简洁的方式表达出来。


文档属性查看命令:ls -l

============================================================================
[root@san01 ~]# ls -l
total 40
-rw-------. 1 root root  967 Feb 13 05:17 anaconda-ks.cfg
-rw-r--r--. 1 root root   72 Mar  9 21:42 crontab.sh
drwxr-xr-x. 4 root root 4096 Mar  5 05:00 dir4
-rw-r--r--. 1 root root 8749 Feb 13 05:17 install.log
-rw-r--r--. 1 root root 3161 Feb 13 05:15 install.log.syslog
-rw-r--r--. 1 root root  512 Feb 18 19:34 mbr.bin
-rw-r--r--. 1 root root  183 Mar  5 05:30 test11
-rw-r--r--. 1 root root   14 Mar  5 05:33 test22
-rw-r--r--. 1 root root    0 Mar  5 05:28 test33
[权限位] [inode连接数] [属主] [属组] [大小] [mtime] [文件名称]
============================================================================


让我们以"-rw-r--r--. 1 root root  512 Feb 18 19:34 mbr.bin"为例


权限位

     - rw-  r-- r--. 1 root root  512 Feb 18 19:34 mbr.bin

    [1][234][567][890]

第1位代表文件类型:

    - 普通文件

    d 目录文件

    l 链接文件

    b 块设备文件(储存设备)

    s socket文件(用于通信)

    p pipe文件

    ...


第2-4位代表属主的权限

r-read;w-write;x-execute分别对应着"读、写、执行"三个权限,属主如果不具有此权限则显示为"-"


第5-7位代表属组的权限

r-read;w-write;x-execute分别对应着"读、写、执行"三个权限,属主如果不具有此权限则显示为"-"


第8-0位代表其他人的权限

r-read;w-write;x-execute分别对应着"读、写、执行"三个权限,属主如果不具有此权限则显示为"-"


PS:至于权限位最后的那个点,那是selinux的存在导致的,如果文件拥有selinux上下文环境则显示"."

PS:执行权限对于目录文件来说,代表着是否可以进入此目录的含义。


inode连接数

    -rw-r--r--. 1 root root  512 Feb 18 19:34 mbr.bin

代表与此文件inode号相同的文件数量(至于inode详细情形,我们以后在探讨)


属主

    -rw-r--r--. 1 root root  512 Feb 18 19:34 mbr.bin

代表了此文件归属于哪个用户


属组

    -rw-r--r--. 1 root root  512 Feb 18 19:34 mbr.bin

代表了此文件归属于哪个用户组


文件大小

    -rw-r--r--. 1 root root  512 Feb 18 19:34 mbr.bin

默认大小的单位是字节,我们可以用ls -lh命令来让它显示单位

==================================================================================
[root@san01 ~]# ls -lh
total 40K
-rw-------. 1 root root  967 Feb 13 05:17 anaconda-ks.cfg
-rw-r--r--. 1 root root   72 Mar  9 21:42 crontab.sh
drwxr-xr-x. 4 root root 4.0K Mar  5 05:00 dir4
-rw-r--r--. 1 root root 8.6K Feb 13 05:17 install.log   #不是以字节为单位的会显示单位
-rw-r--r--. 1 root root 3.1K Feb 13 05:15 install.log.syslog
-rw-r--r--. 1 root root  512 Feb 18 19:34 mbr.bin       #以字节为单位的依旧不会显示
-rw-r--r--. 1 root root  183 Mar  5 05:30 test11
-rw-r--r--. 1 root root   14 Mar  5 05:33 test22
-rw-r--r--. 1 root root    0 Mar  5 05:28 test33
==================================================================================


mtime

    -rw-r--r--. 1 root root  512 Feb 18 19:34 mbr.bin

文件的修改(modify)时间


文件名称

    -rw-r--r--. 1 root root  512 Feb 18 19:34 mbr.bin



与文件属性相关的命令)

chmod

作用:修改文件权限

语法

    chmod [选项] [u=rwx,][g=rwx,][o=rwx] filename

    chmod 744 filename      #r=4,w=2,x=1

    chmod u+x filename

选项:

    -R 递归改变子目录及子目录下所有文件。

==================================================================================
#chmod [选项] [u=rwx,][g=rwx,][o=rwx] filename
[root@san01 ~]# chmod u=rwx,g=rwx,o=rwx mbr.bin
[root@san01 ~]# ls -l mbr.bin
-rwxrwxrwx. 1 root root 512 Feb 18 19:34 mbr.bin
#可以单独改某个角色的权限
[root@san01 ~]# chmod o= mbr.bin
[root@san01 ~]# ls -l mbr.bin
-rwxrwx---. 1 root root 512 Feb 18 19:34 mbr.bin

#chmod 744 filename   个人觉得最常用
[root@san01 ~]# chmod 700 mbr.bin
[root@san01 ~]# ls -l mbr.bin
-rwx------. 1 root root 512 Feb 18 19:34 mbr.bin

#chmod u+x filename   特殊情况下很方便
[root@san01 ~]# chmod g+rw mbr.bin
[root@san01 ~]# ls -l mbr.bin
-rwxrw----. 1 root root 512 Feb 18 19:34 mbr.bin
==================================================================================

 

chown

作用:修改文件属主、属组

语法:chown [选项] user:group filename

选项:

    -R 递归改变子目录及子目录下所有文件。

==================================================================================
[root@san01 ~]# ls -l mbr.bin
-rwxrwx---. 1 root root 512 Feb 18 19:34 mbr.bin
[root@san01 ~]# chown nagios:nagios mbr.bin
[root@san01 ~]# ls -l mbr.bin
-rwxrwx---. 1 nagios nagios 512 Feb 18 19:34 mbr.bin

#还可以单独改变属主或属组
[root@san01 ~]# chown root mbr.bin
[root@san01 ~]# ls -l mbr.bin
-rwxrwx---. 1 root nagios 512 Feb 18 19:34 mbr.bin
#单独修改属组
[root@san01 ~]# chown :root mbr.bin
[root@san01 ~]# ls -l mbr.bin
-rwxrwx---. 1 root root 512 Feb 18 19:34 mbr.bin
==================================================================================

 

umask

作用:通过设置umask值,来控制新建目录文件及普通文件的初始权限

配置文件(初始化):

    全局 /etc/profile

    个人 ~/.bashrc        #"~"是家目录的意思

语法:

    查看 umask

    修改 umask=022

原理:

    目录文件的默认完整权限是777(rwxrwxrwx)

    减掉umask的022(----w--w-),所以新建目录文件权限为(rwxr-xr-x)755;

    普通文件的默认完整权限是666(rw-rw-rw-)

    减掉umask的022(----w--w-),所以新建目录文件权限为(rw-r--r--)644。

==================================================================================
[root@san01 ~]# umask
0022
#第一个0我们会在之后介绍到,它代表的是特殊权限位的umask

#创建普通文件
[root@san01 ~]# touch newfile;ls -l newfile
-rw-r--r--. 1 root root 0 Mar 10 00:10 newfile
#022+644=666

#创建目录文件
[root@san01 ~]# mkdir newdir;ls -ld newdir
drwxr-xr-x. 2 root root 4096 Mar 10 00:13 newdir
#022+755=777
==================================================================================

PS:普通文件的默认完整权限之所以是666,是因为普通文件默认不需要执行权限。

 

chattr

作用:设置文件的隐藏权限

语法:chattr +隐藏权限 filename

隐藏权限:

    a 這個档案将只能增加资料,而不能刪除也不能修改资料,只有root才能设定这个属性

    i 这个档案将不能做内容、名称、权限、设定连接文件等等任何的修改

==================================================================================
#隐藏权限a
[root@san01 ~]# cat newfile
hi                                        #原内容
[root@san01 ~]# chattr +a newfile
[root@san01 ~]# echo > newfile
-bash: newfile: Operation not permitted   #单纯的修改内容被拒绝了
[root@san01 ~]# echo good >>newfile
[root@san01 ~]# cat newfile
hi                                        #成功追加了新内容
good

#i隐藏权限i
[root@san01 ~]# chattr +i test11
[root@san01 ~]# echo good > test11        #修改内容被拒绝
-bash: test11: Permission denied
[root@san01 ~]# echo good >> test11       #追加内容被拒绝
-bash: test11: Permission denied
[root@san01 ~]# rm -rf test11             #删除文件被拒绝
rm: cannot remove `test11': Operation not permitted
[root@san01 ~]# mv test11 testaa          #修改文件名称被拒绝
mv: cannot move `test11' to `testaa': Operation not permitted
==================================================================================

 


lsattr

作用:查看文件的隐藏属性

语法:lsattr filename

选项:

    -R 连同子目录的资料也一同显示出来

    -d 如果接的是目录,列出目录本身的属性,而非目录内的文件属性

==================================================================================
#查看文件特殊权限
[root@san01 ~]# lsattr test11 newfile
----i--------e- test11
-----a-------e- newfile

#删除文件特殊权限
[root@san01 ~]# chattr -i test11
[root@san01 ~]# chattr -a newfile
[root@san01 ~]# lsattr test11 newfile
-------------e- test11
-------------e- newfile
==================================================================================


扩展命令)

history / !

作用:查看和调用历史命令

配置文件(初始化history记录的个数):

    全局 /etc/profile

    个人 ~/.bashrc

语法:

    history

    !! 执行上一条命令

    !n 执行~/.bash_history里的第n条命令

    !-n 执行~/.bash_history里的倒数第n条命令

    !关键字 执行关键字匹配的倒数第一条命令,例如!cp就是执行最后一次执行cp的那条命令

==================================================================================
#查看命令history
[root@san01 ~]# history|tail
  784  ls -l /etc -d
  785  ls -d
  786  ls -ld /etc
  787  ls /etc
  788  ls good
  789  echo $?
  790  ls newfile
  791  echo $?
  792  history|grep
  793  history|tail
 
#!!代表着执行上一条命令 
#[root@san01 ~]# !!
history|tail           #这里显示了真正执行的命令
  784  ls -l /etc -d
  785  ls -d
  786  ls -ld /etc
  787  ls /etc
  788  ls good
  789  echo $?
  790  ls newfile
  791  echo $?
  792  history|grep
  793  history|tail
==================================================================================


echo $? 

作用:查看上一条命令是否成功,0成功,非0失败

==================================================================================
#echo $?的结果为0,代表上一条命令执行成功
[root@san01 ~]# ls newfile
newfile
[root@san01 ~]# echo $?
0

#echo $?的结果不为0,代表上一条命令执行失败
[root@san01 ~]# ls good
ls: cannot access good: No such file or directory
[root@san01 ~]# echo $?
2
==================================================================================


!$

作用:上一条命令的最后一个参数,以tab或空格来作为参数的间隔。

==================================================================================
#情形1
[root@san01 ~]# ls -l /etc -d
drwxr-xr-x. 59 root root 4096 Mar 10 00:04 /etc
[root@san01 ~]# ls !$
ls -d
.

#情形2
[root@san01 ~]# ls -ld /etc
drwxr-xr-x. 59 root root 4096 Mar 10 00:04 /etc
[root@san01 ~]# ls !$
ls /etc
...内容省略...

#对比情形1和情形2,我们可以大概了解"!$"的作用。
==================================================================================