六、Linux档案与目录管理
1、目录与路径
1.1、相对路径与绝对路径
- 相对路径:路径的写法一定由根目录/写起,例如/usr/share/doc
- 绝对路径:路径的写法不是由/写起;
绝对路径的正确度比较好。
1.2、目录的相关操作:cd,pwd,mkdir,rmdir
- . 代表此层目录
- .. 代表上一层目录
- - 代表前一个工作目录
- ~ 代表目前用户身份所在的家目录
-~ account 代表account这个用户的家目录(account是这个账号的名称)
cd:变换目录
pwd:显示目前所在的目录 pwd 【-P】
mkdir:建立新目录 mkdir 【-mp】
mkdir test1
mkdir -m 711 testing
rmdir:删除空的目录 mkdir 【-p】
rmdir test1
注意:rmdir只能删除空的目录
1.3、关于执行文件路径的变量:$PATH
1)当我们执行一个指令的时候,例如ls,系统会依照PATH的设定去每个PATH的定义的目录下搜寻文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先搜寻到的同名指令先被执行
2)echo $PATH 查看哪些目录被定义出来了,$表示后面接的是变量
3)将/root 加入到PATH目录:PATH="$PATH":/root
注意:
- 不同身份使用者预设的PATH不同,默认能够随意执行的指令也不同;
- PATH是可以修改的,所以一般使用者还是可以透过修改PATH来执行位于/sbin或/usr/sbin下的指令来查询;
- 使用绝对路径或相对路径直接指定某个指令的文件名来执行,会比搜索PATH来的正确;
- 指令应该放置到正确的目录下,执行才会比较方便;
- 本目录(.)最好不要放置到PATH当中;
2、档案与目录管理
档案与目录的管理,主要包括显示属性、拷贝、删除档案以及移动档案或目录;
2.1、档案与目录的检视:ls
ls 【-aAdfFhilnrRSt】 目录名称
ls 【--color={never,auto,always}】 目录名称
ls 【--full-time】 目录名称
2.2、复制、删除与移动:cp,rm,mv
- cp:复制档案或目录
cp 【-adfilprsu】来源文件 目标文件
cp ~/.bashrc /tmp/bashrc- rm:移除档案或目录
rm 【fir】档案或目录- mv:移动档案与目录,或更名
mv 【fiu】source destination
注:mv还可以用于变更档名 mv mvtest mvtest2
2.3、取得路径的文件名与目录名称
用斜线"/"来分辨档案和目录;
basename /etc/sysconfig/network 获取到最后的档名
dirname /etc/sysconfig/network 取得目录名
3、档案内容查阅
最长使用的显示档案内容的指令可以说是cat,more和less了。此外,如果要查看一个很大型对的档案(好几百兆),但是我们只需要后端的几行字而已,用tail,才外tac这个指令也可以达到;
- cat 由第一行开始显示档案内容;
- tac 从最后一行开始显示,可以看出tac是cat的倒着写;
- nl 显示的时候,顺道输出行号;
- more 一页一页的显示档案内容;
- less与more类似,但比more更好的是,可以往前翻页;
- head 只看头几行;
- tail 只看尾巴几行;
- od 以二进制的方式读取档案内容
3.1、直接检视档案内容:cat,tac,nl
- cat cat 【-AbEnTv】档案
- nl:添加行号打印 nl 【-bnw】 档案
3.2、可翻页检视:more,less
- more:一页一页翻动
例如:more /etc/man.config
空格键(space):代表向下翻一页
Enter:代表向下翻一行
/字符串:代表在这个现实的内容当中,向下搜寻字符串
:f 立刻显示出文件名机目前显示的行数
q:离开
b:代表往回翻页,只对档案有用,对管线无用- less:一页一页翻动
例如:less /etc/man.config
空格键:向下翻动一页
pagedown:向下翻动一页
pageup:向上翻动一页
/字符串:向下搜寻字符串的功能;
?字符串:向上搜寻字符串的功能;
n:重复前一个搜寻
N:反向的重复前一个搜寻
q:离开
3.3、资料截取:head,tail
- head:取出前面几行
head 【-n number】 档案
例如:head -n 20 /ect/man.config- tail:取出后面几行
tail 【-n number】 档案
例如:tail /etc/man.config
3.4、非纯文本:od
od 【-t TYPE】 档案
-t:后面可接各种类型的输出;
a:利用默认的字符来输出;
c:使用ASCII字符来输出;
d:利用十进制来输出数据;
f:利用浮点数来输出数据;
o:利用八进制来输出数据;
x:利用十六进制来输出数据;
3.5、修改档案时间与建制新档:touch
- modification time (mtime):当改档案的内容数据变更时,就会更新这个时间,内容数据指的是档案的内容,而不是档案的属性或权限;
- status time (ctime):当该档案状态改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间;
- access time (atime)当该档案的内容被取用时,就会更显这个读取时间;
touch 【acdmt】 档案
功能:建立一个空的档案;将某个档案日期修订为目前(mtime与atime)
4、档案与目录的默认权限与隐藏权限
除了基本r,w,x权限外,在Linux的Ext2、Ext3文件系统下,我们还可以设定其他的系统隐藏属性,这部分可以使用chattr来设定,而以lsattr来查看,最重要的属性就是可以设定其不可修改的特性,让档案的拥有者都不能进行修改;
4.1、档案预设权限:umask
umask:就是指定用户在建立档案或目录时候的权限默认值;
umask
umask -S
umask的分数指的是该默认值需要减掉的权限;
预设情况:
- 若使用者建立为档案,则预设没有可执行x权限,即只有rw这两个项目,也就是最大为666,预设权限:-rw-rw-rw
- 若用户建立为目录,则由于x与是否可以进入此目录有关,因此默认所有权限均开启,即777分,预设权限:drwxrwxrwx
例如:umask 002
4.2、档案隐藏权限:chattr,lsattr
- chattr:配置文件案隐藏属性
chattr 【+-=】【ASacdistu】档案或目录名称- lsattr:显示档案隐藏属性
lsattr 【-adR】档案或目录
4.3、档案特殊权限:SUID,SGID,SBIT权限设定
- SUID:Set UID
当 s 这个标志出现在档案拥有者的 x 权限上时
例如: -rwsr-xr-x
SUID 权限仅对二进制程序(binary program)有效;
执行者对于该程序需要具有 x 的可执行权限;
本权限仅在执行该程序的过程中有效 (run-time);
执行者将具有该程序拥有者 (owner) 的权限- Set GID
当s标志在档案拥有者的x项目为SUID,那s在群组的x时则称为SGID
例如:-rwx--s--x
与 SUID 不同的是,SGID 可以针对档案或目录来设定!如果是对档案来说, SGID 有如下的功能:
SGID 对二进制程序有用;
程序执行者对于该程序来说,需具备 x 癿权限;
执行者在执行的过程中将会获得该程序群组的支持!
除了 binary program 之外,事实上 SGID 也能够用在目录上,这也是非常常见的一种用途! 当一个 目录设定了 SGID 的权限后,他将具有如下的功能:
用户若对于此目录具有 r 不 x 的权限时,该用户能够进入此目录;
用户在此目录下的有效群组(effective group)将会变成该目录的群组;
用途:若用户在此目录下具有 w 的权限(可以新建档案),则使用者所建立的新档案,该新档案的群组与此目录的群组相同。- SBIT:只针对档案有效,对目录已经没有效果了
当用户对于此目录具有 w, x 权限,亦卲具有写入的权限时;
当用户在该目录下建立档案或目录时,仅有自己不 root 才有权力删除该档案- SUID/SGID/SBIT权限的设定
在三个数字之前在加上一个数字的话,最前面的那个数字即代表这几个权限了
SUID:4,SGID:2,SBIT:1
例如:chmod 4755 filename
另外还有大S和大T产生的
4.4、观察文件类型:file
如果想要知道某个档案的基本数据,例如是属于ASCII或者是data档案,或者是binary,且其中有没有用到动态函式库等信息,就可以用file这个指令来检阅;
例如:file ~/.bashrc
5、指令与档案的搜寻
5.1、脚本文件名的搜寻:which
which:寻找执行档
which 【a】 commod
5.2、档案档名的搜寻:whereis,locate,find
- whereis:寻找特定档案
whereis 【-bmsu】 档案或目录名
Linux系统会将系统内的所有档案都记录在一个数据库档案里面,而当使用whereis或者locate时,都会以此数据库档案的内容为准;- locate
locate 【-ir】keyword
使用locate是有限制的:
因为他是经由数据库来搜寻的,而数据库的建立默认是在每天执行一次 (每个 distribution 都不同,CentOS 5.x 是每天更新数据库一次!),所以当你新建立起来的档案, 即还在数 据库更新之前搜寻该档案,那么 locate 会告诉你『找不到!』呵呵!因为必须要更新数据库呀!
更新数据库方法:updatedb- find
find 【PATH】【option】【action】
6、权限与指令间的关系(极其重要)
- 让用户能进入某目录称为可工作目录的基本权限
可使用的指令:例如 cd 等变换工作目录指令;
目录所需权限:用户对这个目录至少需要具有 x 的权限
额外需求:如果用户想要在这个目录内利用 ls 查阅文件名,则用户对此目录还需要 r 的权限。- 用户在某个目录内读取一个档案的基本权限为何?
可使用的指令:例如本章谈到的 cat, more, less 等等
目录所需权限:用户对这个目录至少需要具有 x 权限;
档案所需权限:使用者对档案至少需要具有 r 的权限才行!- 让使用者可以修改一个档案的基本权限为何?
可使用的指令:例如 nano 或未来要介绍的 vi 编辑器等;
目录所需权限:用户在该档案所在的目录至少要有 x 权限;
档案所需权限:使用者对该档案至少要有 r, w 权限- 让一个使用者可以建立一个档案的基本权限为何?
目录所需权限:用户在该目录要具有 w,x 的权限,重点在 w 啦!- 让用户进入某目录并执行该目录下的某个指令之基本权限为何?
目录所需权限:用户在该目录至少要有 x 的权限;
档案所需权限:使用者在该档案至少需要有 x 的权限