1.1. Linux学习内容(文件属性与权限)
1.1.1.目录与文件:windows与Linux系统在目录与文件组织上的区别在于,windows将不同的磁盘分为C、D、E…等盘。而Linux的文件组织方式是从“/”开始的一棵树,所以“/”也被称为根目录。
Linux下终端运行显示文件系统使用 [ls] 命令,靠颜色来区分不同文件类型(windows下带有<dir>或使用中括号[]括起来的名称是目录),一般蓝色代表目录、绿色代表可执行文件、青色代表符号连接等。具体的取决于配置文件/ect/DIR_COLORS的规定。有的Linux版本默认不提供颜色区分的支持,所以使用[ls –color=auto]来让其使用颜色来区别。man这命令不止可以查看某个命令的使用方法,还能够查看某个配置文件的配置方法,所以可以使用 [man dir_colors] 命令了解如何修改不同文件类型对应的颜色。
1.1.2. 命令别名:使用 [alias] 命令创建命令别名。例如:[alias ls=’ls –color=auto’] ,这样以后执行 [ls] 命令就等同于执行 [ls –color=auto]。若想使命令别名永久生效,可以将它添加到/etc/bashrc或/home/<user>/.bashrc文件中,前者对所用用户有效,后者只对<user>生效。
1.1.3. 文件属性,Linux下文件有三个固有属性分别是拥有者、所属用户组、其他用户。Linux下的文件属性可使用 [ls –l]来查看文件的属性,其结构为:
文件类型和权限:例如 [-rwxr-xr-x]第一个字符用于描述文件类型,可有的取值为“-(普通文件) , d(目录) , l(软连接) , b(设备文件,块设备,如保存磁盘等保存大块数据的设备) , c(设备文件,字符设备,如键盘鼠标等需要连续串行读写的设备) , s(套接字文件) , p(命名管道文件)”,其后三个字符代表拥有者权限,再三个代表所属用户组权限,最后三个字符代表其他用户权限。在Linux系统中一个文件是否是可执行文件是通过属性来决定的,而不是扩展名。
1.1.4. 在Linux下有些文件是隐藏文件 [ls]命令无法显示出来,需要添加 [-a]选项,[ls –a]。[ls –al]命令可查看全部文件的属性。
1.1.5. 连接数与文件连接:Linux所使用的文件系统是一种基于inode的文件系统,inode是所有类Unix操作系统中的一种数据结构也是这类操作系统中文件系统的核心,每创建一个新文件都会分配一个inode,且每个文件都有唯一的一个inode编号。系统通过inode定位每一个文件,而不是文件名。为了提高文件系统的执行效率,访问过的文件的inode会被缓存在内存中,而“连接数”这个属性就是inode的引用计数(Linux中允许一个文件拥有多个名字)。
软连接与硬连接:软连接相当于windows下的快捷方式。而硬连接则是给该文件的连接数加一,对硬连接的操作就是对原文件的操作,删除原文件后对硬连接无影响,要删除全部引用后,该文件才删除。创建文件连接用命令 [ln]
创建软连接:ln –s /bin/bash sh //软连接sh指向/bin/bash
创建硬连接:ln /bin/bash sh //硬连接sh指向/bin/bash
注意:软连接可以创建在任意位置,硬连接则目标文件与连接文件必须在同一磁盘分区内。硬连接使得同一文件能够拥有不同的路径,还能防止恶意删除,因为删除操作只是将连接数减一,提高了文件系统的可靠性。
1.1.6. 修改文件文件所有者或用户组:
chown [-R] username filename //修改文件的所有者
chown [-R] username:group filename //修改文件的所有者和用户组
chgrp group filename //修改文件的用户组
修改用户权限:chmod
数字法,用数字来代替r(可读),w(可写),x(可执行),4=r,2=w,1=x。权限组合用这些数字的和表示,所以设置文件的权限只需三个数字。如:chmod 710 filename //给filename赋予rwx--x---权限
文字法,直接引入四个字母u(拥有者)、g(所属组)、o(其他)、a(全部),三个操作符+(增加权限)、-(去掉权限)、=(设定权限)。如: chmod a-x filename //给filename对所有用户取消执行权限
chmod ugo-x filename chmod go=rx filename
1.1.7. 深入文件权限:在Linux中文件权限不仅只有r、w、x,还有s和t这两个特殊权限。
S权限可以出现在文件拥有者的x权限位上,也可以出现在文件所属组的x权限位上。前者被称为Set UID,简称SUID,而后者被称为Set GID,简称SGID。
SUID:文件被设置成SUID后,拥有这样的功能。
A、 SUID仅对二进制程序有效。
B、 执行者对于该程序具有x的可执行权限。
C、 执行权限仅在执行该程序的过程中有效。
D、 执行者将具有该程序拥有者的权限。
典型的便是su命令,执行 [ls –l /bin/su]后可看到,su这个命令的文件权限是“-rwsr-xr-x”,因为它的拥有者是root所以执行改命令的用户将具有root所具有的权限,这也是su命令能切换用户权限的实现原理。
SGID:文件拥有SGID权限后,获得的功能。
A、 SGID对二进制程序有效。
B、 执行者对于该程序具有x的可执行权限。
C、 执行者在执行的过程中将会获得该程序所属用户组的支持。
SGID除了用在二进制程序外,还能够用在目录上。当一个目录设置了SGID权限后将具有以下功能。
A、 用户若对于此目录拥有r与x权限时,该用户能够进入此目录。
B、 该用户在此目录下的有效用户组将变成该目录的用户组。
C、 若用户在此目录下具有w的权限,则用户所创建的新文件的用户组与此目录的用户组相同。
t权限:s权限能出现在拥有者和所属用户组的x权限位上,而其他用户的x权限位上也是可以出现的。但是不能再使用s了,而应该使用t。t权限的名称是Sticky Bit,简称SBIT。t权限仅对目录有效。其作用如下:
A、 用户若对此目录拥有w和x权限,即拥有写的权限。
B、 当用户在此目录下创建了文件或目录,仅自己与root才有权利删除该文件。
设置SBIT权限可以使自己创建的文件仅能让自己与root删除,防止被他人误删除。典型的例子为/tmp目录。
设置SUID、SGID、SBIT权限时,不仅可以使用文字法。同样可以使用数字法,只是将原来的3位数字扩展成为4位,在最前一位添加这三种权限之和,SUID用4表示,SGID用2表示,SBIT用1表示。例如4757表示rwsr-xrwx.
1.1.8. 几个特别的目录名:“.” (代表当前目录) , “..” (代表上一级目录), “-” (代表上一个工作目录), “~”(代表当前用户的home目录)。
值得注意的是,在”/”根目录下同样存在”..”,只不过其意义与“.”相同,都代表当前目录。由于“.”目录的存在,所以目录本身连接数加1,目录中每创建一个子目录,因为子目录中包含“..”目录,所以目录本身的连接数也会加1。因此”.” 和“..”就是实际的文件硬连接的例子。
1.1.9. 五个文件搜索命令:whereis , locate , which , find , type.
whereis和locate依靠一个包含有本地所有文件的信息,并且每天通过自动执行updatedb命令更新一次的数据库(/var/lib/mlocate/)进行搜索。搜索速度相比其他搜索命令最快。
which一般用来确认系统中是否安装了指定的软件,它只是在$PATH环境变量(用于保存可执行文件的默认搜索路径)中指定的路径来搜索可执行文件的位置。
type命令是用来判断一个命令是否属于shell内置的。如果是非内置的shell命令,并且使用了type的-p选项,type就相当于是which命令了。
find命令相比其他命令比较复杂且效率低。例如:
$ find / -mtime -1 –exec ls –l {} \; -exec是find命令对找到的文件执行的动作。”ls –l {}”中”{}”是占位符,在find命令的执行过程中会不断被替换成当前找到的文件。这样在例子中的ls命令就完整了,能够显示想要的文件的详细信息了。而”\;”是因为-exec的命令结束标记是”;”。但实际使用中往往报错,find拒绝工作。这是因为在bash(Linux的默认shell,几乎所有发行版本都是这样)环境中有特殊意义,所以需要用”\”来转义一下。
1.1.10. 文件打包。在Linux系统中一般是*.tar.gz、*.tar.bz2、*.tar.xz三种压缩格式,压缩比从低到高的排序是gz<bz2<xz,压缩速度恰恰相反。
解压语法:[tar –vx –f filename] 或者[tar –vxf filename]
打包语法:[tar –zcvf filename.tar.gz FILES] //z代表gz包
[tar –jcvf filename.tar.bz2 FILES] //j代表bz2包
[tar –Jcvf filename.tar.xz FILES] //J代表xz包
FILES代表要被打包和压缩的文件或这目录的名称。