目录的相关操作指令 (鸟哥私房菜)
1 指令集访问
2 【cd】 更改目录
3 【pwd】 显示目录路径
4 【mkdir】 创建目录,但无法建立多层目录 mkdir -p 可以自行建立多层目录
5 【rmdir】 删除目录
6 【PATH】 环境变量 查看环境变量 echo $PATH.
eg.PATH指令的使用方法:
7 【cp】 复制档案
8 【rm】 删除档案
注:删除非空目录是,只能用rm-r来删掉
9 【mv】 移动档案
10 【basename】 取得最后的文档名
【dirname】取得目录名
eg.
二 档案内容查询
11 【cat】将一个档案内容连续的打印输出到屏幕上。 cat是Concatenate 连续的简写
12 【tac】 反向打印档案内容,与【cat】指令正好相反操作
13 【nl】添加打印行号
14 【more】 一页一页翻动进行档案显示
15 【less】一页一页反动
16 【head】取出前面几行
17 【tail】取出后面几行
注:tail -f 动态监听某个文档,并显示。 比如 日志文件,我们要查看某个日志文件的动态效果,就需要tail-f命令来进行监听并显示,来测试某个软件或者服务哪个地方出问题
18【od】 查阅非文本文档
之前以上命令都是用来查阅文本文档的内容,但要查看非文本文档内容时,就需要【od】命令
19 【touch】修改档案时间或建立新的档案
任何一个文档,在Linux下都有三个时间
modification time (mtime) 该档案内容发生改变时,会更新该时间
status time (cime) 当该档案状态发生改变时,更新该时间。例如 修改权限,修改文档属性等
access time(time) 当文档内容被读取时,就会更新这个时间 例如 利用cat命令读物文档时,该时间就会更改
默认显示时间为 mtime 。例如,通过ls-l命令查看档案时,显示的时间即为mtime时间。
touch命令的用途,例如 某个文档的建立因为系统时间或者其他原因导致的系统时间出现混乱,那该档案的建立时间就有可能会发生出现在未来的情况,如果应用程序利用该文档就会导致应用程序出现混乱无法顺利运行的情况,就可以利用touch命令进行文档时间的修改
显示三个时间,可以用命令ll来显示。
eg
解释: mkdir 建立目录
修改属性 chown ,将该文档的所有者属性赋给dmtsai用户
修改权限chmod 755 7/5/5 user/group/other 即 r/w/x对应的数字为 4/2/1 即 user所有者应有7的权限,即r/w/x权限,而 group和other只拥有 5/5的权限,即 r/x的权限,即只读权限
20 【umask】 档案预设权限
当用户建立某个档案时,系统会有一个默认权限。而这个默认权限的更改则需要 umask命令来实现
上图第二行中,0022,一般权限只有 r/w/x权限,即后面三维数字022,第一位0权限,则是特殊权限用的。所以,一般情况下,只需要关注后3位数字即可。
对于权限的指定,还需要区分在前一篇博客中所说的,针对档案和目录的x的权限含义时不一样的。对档案,x的权限在于该档案是否可执行,即是否是可执行程序等。而对于目录,x的含义在于是否能够打开该文档。
针对普通档案来说,只有写等操作,而不需要执行。所以针对普通档案的权限,x是不必须的。但对于档案来说,因为x权限牵涉到该文档是否能被用户打开,所以x权限是必须的。这点在设置权限时一定要多加注意。
umask命令,后面的数字不是代表该文档的权限,而是代表该文档需要减掉的权限。例如 要去掉写的权限,则umask 2 .去掉x的权限 则umask 1.以此类推,而非代表该文档设置的权限,这点也要多注意,又是一个坑。
上例中 umask 0022权限的解析为 第一位为特殊权限,不做考虑。 第二位为所有者权限,因为是0即不拿掉任何权限。第三位和第四位分别是group和other权限,2代表w的权限,即group和other拿掉了w的权限。
21 【chattr】 配置文档隐藏属性
22 【lsattr】显示档案隐藏属性
23 【Set UID】 特殊权限标识,建成SUID的特殊权限。例如 用lsattr查看权限时,如果出现【-rwsr-xr-x】,当s这个标志出现在档案拥有者的x权限上时,此时就被成为Set UID,简称 SUID的特殊权限,SUID特殊权限的功能如下:
。SUID权限仅对二进制程序有效(binary program)
。执行者对于改程序需要具有x的可执行权限
。本权限仅对执行改程序的过程中有效。(这个需要好好理解,什么叫过程有效)
。执行者将具有该程序拥有者的(owner)权限(这个就要结合上面那一条,程序过程有效来理解这个owner权限),书中给出例子,能够更好的理解第二项和第三项的内容,例子如下
注:SUID仅可用于binary program(二进制可执行文件)上,不能够用在shell script 上,因为shell sript只是将很多binary执行档加载进来进行执行而已。所以,SUID权限的部分不针对shellscript,而要看shellscript的内部的执行程序的具体权限来定。
24 【Set GID】
当s标志在档案拥有者的x项目为SUID时,那s在群组中的x时,则成为Set GID,SGID。请注意区分SGID和SUID的区别,SUID针对的是所有者的X权限的S,SGID针对的是群组,即Group群组权限的X权限的S。一个针对所有者,一个针对群组。
。SGIDdui 对二进制程序有用,即binary program
。程序执行者对于该程序来说,需具备X的权限
。执行者在执行的过程中将会获得该程序群组的支持。(是否就是能够获得该群组的相关权限?这句话我不理解,标记一下以后再加深认识),根据后面例子似乎有点明白其中的意思了。
假设某档案目录属于group组,该组有两个账户a,b.该档案group组的权限为770.如果不加SGID权限,则group组的a 用户创建的文档,b用户虽然也是group组的用户,但是只可以删除和移动,而无法修改。因为a用户虽然属于group组的用户,但是他创建的文档还是只属于a,而b是没有权限修改的。但是假如SGID权限之后,则group组的所有成员都可以在该档案目录下进行修改,进行协同操作。因为加入SGID权限之后,a创建的档案也即加入了group组,而非之前的a所在的用户组。
下面的例子能够加深你的理解。
25 【Sticky Bit】
Sticky Bit,SBIT只针对目录有效,作用如下
。 当用户对于此目录具有w,x权限,亦即具有写入的权限时
。当用户在该目录下建立档案或者目录时,今有自己与root才有权利删除该档案
加深理解的解释
例:
tmp目录的权限有rwxrwxrwt,通过权限可得,任何人都可以进入tmp目录进行写入和读取操作,但是,rwt的t权限就表示,只有自己能够删除,更名,搬移自己的目录,别人无法进行上述操作
即 chmod u=rwxs,go=x test; 设置权限
chmod g+s,o+t test 设置SGID和SBIT权限
26 【file】查看某个档案的基本数据,例如查看某档案是否属于ASCII或者data档案,或者是二进制binary档案,且其中是否使用动态函数库(share library)等信息。
透过这个指令,我们能够判断该档案的格式。再做下一步的处理
27【which】寻找执行档
在【PATH】环境变量所规范的路径中,搜索【执行档】的文档名
eg. whith -a ifconfig 在操作用户的环境变量【path】中搜索ifconfig档案。-a 将所有PATH目录中可以找到的指令均列出,而不止第一个被找到的指令名称
28 【whereis】 寻找特定档案。
注:find,whereis,locate之间的异同。
find速度慢,草硬盘,通常都是采用whereis或者locate来检查,如果还找不到才使用find来搜寻,whereis和locate是利用数据库来搜寻数据,find是直接搜索硬盘,针对硬盘的操作。
29 【locate】
其中有句话,找出系统中所有与passwd相关的档名。也就是模糊查询的概念。
是否可以这样来理解,whereis相当于“=”,locate相当于 like \’%%\’
注:locate查询的数据来源于/var/lib/mlocate/里边的数据所搜寻的。而这个数据源的建立默认是每天执行一次,所以当你新建立起来的档案,却还在数据库更新之前搜寻该档案,那么locate指令会告诉你找不到。这就需要手动更新数据源,通过指令【updatedb】会读取/etc/updatedb.conf配置文件,更新整个数据库档案。二者的关系如下图:
30 【find】
find加时间进行查找数据档。具体如下
总结,权限与指令之间的关系
操作实例: 文件只能有一个组,而用户可以有多个组
假设系统中有两个账号,分别是alex和arod,这两个人除了自己的群组之外还共同支持一个名为project的群组,假设这两个用户需要共同拥有/srv/ahome/目录的开发权,且该目录不允许其他人进入查询,请问该目录的权限设定应为何?请先以传统权限说明,再以SGID的功能解析。
目标 了解为何项目开发时,目录最好需要设定SGID的权限
前提 多个账号支持同一个群组,且共同拥有目录的使用权
需求 需要使用root的身份来进行chmod,chgrp等帮用户设定好他们的开发环境才行
上图中/srv/ahome文档的权限是 -rw-rw-r alex alex 0 。即该文档只有对于alex用户和alex群组具有读取和写入的权限,其他人权限只有读取的权限。跟要求不匹配,这就需要加入特殊权限SGID的权限。