首页 > 代码库 > linux文件目录与管理
linux文件目录与管理
l 绝对路径;路径的写法一定由根目录/写起,例如/usr/share/doc这个目录
l 相对路径;路径的写法不是由/写起,例如由;/usr/share/doc要到/usr/share/man下面时,可以写成“cd…/man”这就是相对路径的写法。相对路径意指相对于目前工作目录的路径。
相对路径的用途
cd后面跟的一些特殊目录
. 代表层次目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表“目前用户身份”所在的朱文件夹
~account 代表account这个用户的主文件夹(account是个帐号名称)
特别注意;在所有目录下面都会存在的两个目录,分别是. 与.. 分别代表此层与上层目录的意思
创建的处理目录的命令;
Cd:切换目录
Pwd;显示当前目录;
Mkdir;新建一个新的目录;
Rmdir;删除一个空的目录
Cd(相对路径或绝对路径)
Cd ~vbird 代表去到vbird这个用户的主文件夹,即/home/vbird
Cd ~ 表示回到自己的主文件夹,即是/root这个目录
Cd 没有加上任何路径,也还是代表回到自己主文件夹的意思
Cd..表示去到目前的上层目录,即是/root的上层目录的意思。
Cd – 表示回到刚才哪个目录,
Cd /var/spool/mail 这个就是绝对路径的写法,直接指定要去的完整路径名称
Cd ../mqueue 这个是相对路径的写法,我们由/var/spool/mail 到/var/spool/mqueue就这样写
Pwd (显示目前所在的目录)
Pwd (-P) 显示档期那的路径,而非使用连接(link)路径
加上-P参数后,会不以连接文件的数据显示,而是显示正确的完整路径
Mkdir (新建新目录)
Mkdir (-mp) 目录名称
参数;
-p;帮助你直接将所需要的目录(包含上层目录)递归创建起来
加上-p可以递归创建多层目录
-m:配置文件案的权限,这届设置,不需要看默认权限(umask)
Mkdir -m
范例;新建权限为rwx—x—x的目录
-m 来强制为目录设置权限,否则系统会使用默认权限
Rmdir -p (删除“空”的目录)
参数;
-p;连同上层“空的”目录也一起删除
利用-p参数可以将空的多层递归目录删除 这个rmdir仅能“删除空的目录”
关于执行文件路径的变量:$PATH
例题;
使用一般账户A执行ifconfig时,会出现“-bash:ifconfig:commandnot found”的字样,因为ifconfigshi是放置到/sbin下面,而由上面的结果中我们还可以发现vbird的PATH并没有设置/sbin,所以默认无法执行
但是可以使用/sbin/ifconfig eth0来执行这个命令,因为一般用户还是可以使用ifconfig来查询系统IP的参数,既然PATH没有规范到/sbin,那么我们使用“绝对路径”也可以执行该命令
u 不同身份用户默认的PATH不同,默认能够随意执行的命令也不同(如root与vbird);
u PATH是可以修改的,所以一般用户还是可以修改PATH来执行某些位于/sbin或/usr/sbin下的命令来查询;
u 使用绝对路径或相对路径直接指定某个命令的文件名来执行,会比查询PATH来得正确;
u 命令应该放置到正确的目录下面,执行才会比较方便
u 本目录(.)最好不要放到PATH当中
文件与目录管理
在文件与目录的管理上,不外乎“显示属性”,“复制”“删除文件”及“移动文件或目录”等。
查看文件与目录:ls
Ls (-aAdfFhilnrRst) 目录名称
Ls (--color={never,auto,always}) 目录名称
Ls (--full-time) 目录名称
参数;
-a;全部的文件,连同隐藏文件(开头为.的文件)一起显示出来
-A;列出全部的文件(连同隐藏文件,但不包括.与..这两个目录)
-d:仅列出目录本事,而不是列出目录内的文件数据
-f:直接列出结果,而不进行排序(ls默认会以文件名排序)
-F;根据文件,目录等信息给与附加数据结构,例如;
*:代表可执行文件; /:代表目录; =:代表 socket文件; | :代表FIFO文件
-h:将文件容量以人类易读的方式(例如GB,kb等)列出来
-i:列出inode号码,
-l:列出长数据串,包含文件的属性与权限等数据
-n;列出UID与GID;而非用户与用户组的名称(UID与GID会在帐号管理提到)
-r:将排序结果反向输出,例如;原本文件名由小到大,反向则由大变小
-R;连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来
-S;以文件容量大小排序,而不是用文件名排序
-t:依时间排序,而不是用文件名
--color=never:不要依据额外年间特性给与颜色显示
--color=always:显示颜色
--color=auto:让系统自行依据设置来判断是否给与颜色,
--full-time:以完整时间模式(包含年,月,日,时,分)输出
--time={atime,ctime};输出访问时件或改变权限属性事件(ctime)而非内容更改时间
案例一
将主文件夹下的所有文件列出来(含属性与隐藏文件)
-a全部的文件,连同隐藏文件(开头为.的文件)
-l列出长数据串,包含文件的属性与权限等数据
承上题;不显示颜色,但在文件名末显示出改文件名代表的类型
范例三;完整呈现文件的修改时间
通过—full-time可以查阅到比较正确的完整时间格式
复制,删除,与移动 :cp,rm,mv
要复制文件,使用cp(copy)这个命令即可,还可以创建连接文件(快捷方式),对比两文件的新旧而与更新,以及复制整个目录等的功能,至于移动目录与文件,则使用mv(move),这个命令也可以直接拿来作重命名,至于 删除就是rm(remove)命令
cp (复制文件或目录)
cp (-adfilprsu) 源文件(source) 目标文件(destination)
cp (options) source1 source2 source3 … directory
参数;
-a:相当与-pdr的意思,至于pad请参考后文(常用)
-d:若源文件为连接文件的属性(link file),则复制连接文件属性而非文件本身;
-f:为强制(force)的意思了,若目标文件已经存在且无法开启,则删除后再尝试一次
-i;若目标文件(destination)已经存在时,在覆盖时会先询问操作的进行(常用)
-l:进行硬件连接(hard link)的连接文件创建,而非复制文件本身
-p;连同文件的属性一起复制过去,而非使用默认属性(备份常用);
-r;递归持续复制,用于目录的复制行为(常用);
-s;复制成为符号链接文件(symbolic link),即“快捷方式”文件;
-u;若destination比source旧才更新destination
最后需要注意的,如果源文件有两个以上,则最后一个目的文件一定要是“目录”才行!
复制(cp)这个命令非常重要的,不同身份者执行这个命令会有不同的结果产生,尤其是-a,-p的参数,对于不同身份来说,区别非常大,
拷贝文件极其所拥有的特性则加上-a即可
cp /etc 到 /tmp目录下
如果是目录则不能直接复制,要加上-r的参数
Cp -r /etc /tmp
-r是可以复制目录,但是文件与目录的权限可能会被改变
所以,也可以利用-a 来执行命令,尤其是在备份的情况下
Cp -s bashrc bashrc_slink
Cp -l bashrc bashrc_hlink
Ls -l bashrc*
使用-s -l 都会创建所谓的连接文件
-l就是所谓的硬链接,bashrc_shlink 是一个“快捷方式,”这个快捷方式会连接到bashrc,所以你会看到文件名又侧会有一个指向(->)的符号
至于bashrc_hlink文件与bashrc的属性与权限完全一模一样,与尚未进行连接前的差异则是第二列的link数由1变成2了
若~/.bashrc 比 /tmp/bashrc新才复制过来
Cp -u ~/.bashrc /tmp/bashrc
这个-u的特性是在目标文件与源文件有差异时才会复制的
所以,比较常用与“备份的工作当中”
rm (移除文件或目录)
rm(-fir)文件或目录
参数;
-f:就是force的意思,忽略不存在的文件,不会出现警告信息;
-i;互动模式,在删除前会询问用户是否操作;
-r;递归删除,最常用在目录的删除了,这是非常危险的参数!!!
rm -i bashrc*
将目录下的开头为bashrc文件名全部删除;
*代表的是0到无穷多个任意字符
将cp范例中所创建的/tmp/etc/这个目录删除掉
Rmdir /tmp/etc
删不掉 因为这不是空的目录!
Rm -r /tmp/etc
连续按y可删除
如果不想按y
\rm -r /tmp/etc
在命令前面加上反斜杠,可以忽略掉alias的指定参数
Mv (移动文件或目录,或更名)
Mv (-fiu)source destination
Mv (options)source1 source2 source3 … directory
-f:force强制的意思,如果目标文件文件已经存在,不会询问而直接覆盖
-i:若目标文件(destianation)已经存在,就会询问是否覆盖
-u:若目标文件已经存在,且source比较新,才会更新(update)
Basename /etc/sysconfig/network
Network 很简单,就取得最后的文件名
Dirname /etc/sysconfig/network
/etc/sysconfig 取得目录名
文件内容查阅
显示文件内容可以使用cat 与more即less,
u Cat;由第一行开始显示文件内容
u Tac;从最后一行开始显示,可以看出tac是cat的倒写形式
u nl ;显示的时候,顺便输出行号,
u more;一页一页地显示文件内容
u less;与more类似,但是比more更好的是,它可以往前翻页
u head;只看头几行
u tail;只看结尾几行‘
u od;以二进制的方式读取文件内容
cat (-AbEnTv)
参数
-A:相当于-vET的整合参数,可列出一些特殊字符,而不是空白而已
-b;列出行号,仅针对非空白行做行号显示,空白行不标行号;
-E;将结尾的断行字符$显示出来;
-n;打印出行号,连同空白行也会有行号,与-b的参数不同
-T:将(Tab)按键以^I显示出来;
-v:列出一些看不出来的特殊字符
More (一页一页翻动)
More /etc/man.config
空格键:代表向下翻一页;
Enter:代表向下滚动一行;
/字符串;代表在这个显示的内容中,向下查询“字符串”这个关键字
:f 立刻显示出文件名以及目前显示的行数
q 代表立即离开more,不再显示该文件内容
b或(ctrl)-b 代表往回翻页,不过这操作只对文件有用,对管道无用
使用more并不能往前翻页,使用less可以使用上下按键等功能前后翻看文件
空格键:向下翻动
Pagedown 向下翻动一页;
Pageup 向上翻动一夜
/字符串 向下查询“字符串”的功能
?/字符串 向上查询“字符串”的功能;
n 重复前一个查询(与/或?有关)
N 反向重复前一个查询(与/或?有关);
q 离开less这个程序
数据选取
我们可以将输出的数据做一个简单的选取,那就是取出前面(head)与取出后面(tail)文字的功能,不过 head与tail都是以行为单位来进行数据选取的
Head(取出前几行)
head (-n number)文件
-n :后面接数字,代表显示几行的意思
tail (取出后面几行)
tail -n number 文件
取出文件后面几行 number行数
修改文件的时间或创建新文件:touch
Liunx下三个主要的时间变动
Modification time
当该文件的内容数据更改时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限
Status time
当该文件的状态改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更改这个时间
Access time
当该文件的内容被取用时,就会更新这个读取时间。举例来说,我们使用cat去读取/etc/man.config,就会更新该文件的atime了,
Touch (-acdmt) 文件
参数;
-a:仅修改访问时间;
-c:仅修改文件的时间,若该文件不存在则不创建新文件
-d:后面可以接欲修改的日期而不用目前的日期,也可以使用—date=“日期或时间”;
-m:仅修改mtime;
-t:后面可以接欲修改的时间而不用目前的时间
创建一个bashrc文件日期为2007/09/15 2:02
Touch -t 0709150202 bashrc
-t 后面加上修改的时间
通过touch可以轻易修改文件的日期与时间,并且也可以创建一个空的文件夹,看文件什么时候被改动过查看ctime 就算是复制过来的文件,这个时间也是没有办法修改的。
创建一个空的文件
将某个文件日期修改为目前日期(mtime与atime)
除了rwx权限外,在linux的Ext2/Ext3文件系统下,我们还可以设置其他的系统隐藏属性,这部分可使用chattr来设置,而以lsattr来查看,最重要的属性就是可以设置其不可修改的特性,让连文件的所有者都不能进行修改,这个属性很重要,尤其是在安全机制方面
在/tmp下创建一个目录 名称为qwe 并且目录所有这为dmstai,用户组为users,此外任何人都可以进入该目录浏览文件,不过除了dmstai之外,其他人不能修改该目录下的文件
新建目录:Mkdir /tmp/qwe
修改属性:Chown -R dmstai:users/tmp/qwe
修改权限:chmod -R 755 /tmp/qwe
文件默认属性 :umask
Umask是指定;目前用户在新建文件或目录时候的权限默认值
022反掩码的权限
直接输入umask可以看到数字形态的权限设置分数,一种加入-S参数,就会以符号类型显示出来 第一组是特殊权限用的 先不用看
- 若用户创建“文件”则默认没有可执行权限(x),即只有r,w这两个选项,也就是最大为666,默认权限如下
- rw-rw-rw-
- 若用户新建“目录”,则由于x与是否可以进入此目录有关,因此默认为所有权限均开放,即为777分,默认权限如下
- Drwxrwxrwx
umask对新建目录与文件的默认权限很有关系
umask 002 即可修改umask的权限
文件隐藏属性 chattr,lsattr
下面的chattr只能在ext2和ext3的文件系统上面生效
Chattr(设置文件的隐藏属性)
Chattr(+-=)(ASacdistu)文件或目录名称
参数;
+:增加某一个特殊参数,其他原本存在参数则不动
-:删除某一个特殊参数,其他原本存在参数则不动
=:仅有后面接的参数
A:当设置了A这个属性时,若你有访问此文件(或目录)时,他的访问事件atime将不会被修改,可避免I/O较慢的机器过度访问磁盘,这对速度较慢的计算机有帮助
S:一般文件是异步写入磁盘的,如果加上S这个属性时,当你进行任何文件的修改,该行动都会同步到磁盘中
a:当设置a之后,这个文件将只能增加数据, 而不能删除也不能修改数据,只有root才能设置这个属性。
c:这个属性设置之后,就会自动将此文件压缩,在读取的时候就会自动解压缩。但是在存储的时候就会先进行压缩后在存储(对大文件挺有效的)
d:当dump程序被执行的时候,设置d属性将可使文件(或目录)不会被dumnp备份
i:这个i它可以让一个文件“不能被删除,改名,设置连接也无法写入或添加数据”对于系统安全性有很大的帮助,只有root能设置此属性
s:当文件设置了s属性时,如果这个文件被删除,它将会被完全从这个硬盘空间中删除
u:与相反,当使用u来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来找回该文件
注意;属性设置常见的是a与i的设置值,而且很多设置值必须要身为root才能设置
I在系统的数据安群上面,由于这些属性是隐藏的性质,所以需要以lsattr才能看到该属性,其中最重要的就是+i与+a这个属性了,+i可以让一个文件无法被更懂,
此外,如果是logfile这种的登录文件,就更需要+a这个可以增加但是不能修改旧有的数据与删除的参数了,
Lsattr(显示文件隐藏属性)
Lsattr (-adR) 文件或目录
参数;
-a;将隐藏文件的属性也秀出来;
-d;如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R;连同子目录的数据也一并显示出来。
使用chattr设置后, 可以利用lsattr来查看隐藏的属性
文件的特殊权限,SUID,SGID,SBIT
SetUID出现
当s这个标志出现在文件所有者的x权限上时,例如上面的权限,此时就被称为set UID,简称为SUID的特殊权限,suid有这样的限制与功能
l SUID权限仅对二进制程序有效
l 执行者对于该程序需要具有x的可执行权限
l 本权限仅在执行该程序的过程中有效
l 执行者将具有改程序所有则的权限
SUID只可用在二进制程序上,不能够用在shell script上面,这是因为shell script只是将很多的二进制文件调进来执行而已,所以Sudi的权限部分,还是得看shell script调用进来的程序设置,而不是shell script本身,当然SUID对目也是无效的
Set GID
当s标志在文件所有者的x项目为suid,那s在用户组的x时则称为set GID,SGID。
查看具有SGID权限的文件
与SUID不同的是,SGID可以针对文件或目录来设置,如果是对文件来说,SGID有如下的功能
l SGID对二进制程序有用
l 程序执行者对与程序来说,需要备有x的权限;
l 执行者在执行的过程中将会获得该程序用户组的支持
StickyBit
l 这个Sticky Bit(SBIT)目前只针对目录有效,对于文件已经没有效果了。SBIT对于目录的作用是;
l 当用户对于此目录具有w,x权限,则具有写入的权限时;
l 当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件
SUID/SGID/SBIT权限设置
4为SUID
2为SGID
1为SBIT
l 例子;
假设要将一个万能键权限改为-rwsr-xr-x时,由于s在用户权利中,所以是GID,因此,在原有的755之前还有加上4,也就是“chmod4755 filename”来设置。此外还有大S与大T的产生,参考下面
l touch test 创建一个测试用的空文件
chmod 4775 test;加入具有SUID的权限
ls -l test 查看
l chmod 6755 test; 加入具有SUID/SGID的权限
ls -l test 查看
l chmod 7666 test;具有空的SUID/SGID权限
ls -l test
st都是替代x权限,因为执行的是666并没有执行权限,
符号来代替
SUID为u+s SGID为g+s,SBIT则是o+t,
乘上,在上述的文件权限中加入SGID与SBIT
查看文件类型;file
File;后面跟上需要查看的文件
命令与文件的查询
脚本文件名的查询
Which(寻找“执行文件”)
Which(-a) command
参数;
-a:将所有由PATH目录中可以找到的命令均列出来,而不是第一个被找到的命令名称
l 这个命令是根据PATH这个环境变量所规范的路径去查询“执行文件”的文件名。所以,重点是找出执行文件而已,且Which后面接的是完整文件名,。若加上-a参数,则可以列出所有的额可以找到的同名执行文件,而非仅显示第一个而已
l Which默认是查找PATH内所规范的目录。
文件名的查找
Whereis(寻找特定文件)
Whereis(-bmsu)文件或目录名
参数;
-b;只找二进制格式的文件
-m;只找在说明文件manual路径下的文件
-s;只找source源文件
-u;查找不在上述三个选项当中的其他特殊文件
Locate(寻找的数据是由已创建的数据库/var/lib/mlocate)里面的数据所查找到的
Locate(-ir) keyword
-i:忽略大小写的差异
-r:后面可接正则表达式的显示方式
范例;找出系统中所有与passwd相关的文件名
Locatepasswd
它是经由数据库查找的,数据库的创建默认是每台执行一次,手动更新数据库updatedb
Updated;根据/etc/updated.conf的设置去查找系统硬盘内的文件名,并更新/var/lib/mlocate内的数据库文件
Locate;依据/var/lib/mlocate内的数据库记载,找出用户输入的关键字文件名
Find
Find(PATH)(option) (action)
参数;
1. 与实践有关的参数,共有-atime,-ctime与-mtime,下面以-mtime说明
-mtime n :为数字,意义为在n天之前的“一天之内”被更改过的文件;
-mtime +n :列出在n天之前(不含n天本身)被更改过的文件名;
-mtime-n ;列出n天之内(含n天本身)被更改过的文件名
-newer file :file为一个存在的文件,列出比file还要新的文件名
Find / -mtime 0
0代表目前的事件,所以从喜爱你在开始到24小时前,有改动过内容的万能键都会被列出来,那如果是3天之前的24小时内? Fine
/ -mtime 3 有改动过的文件都被列出来的意思
寻找/etc下面的文件,如果文件日期比/etc/passwd新 就列出来
Find /etc -newer /etc/passwd
-newer用在分辨两个文件之间的新旧关系是很有用的
找出4天内被改动过的文件名
Find /var -mtime -4
找出4天前的那一天
Find/var -mtime 4
有没有加上+—差别很大
+4代表大于等于5天前的文件名;find /var -mtime +4
-4代表小于等于4天前的文件名;find /var -mtime -4
4则是代表4-5提起你那一天的文件名:find /var -mtime 4
参数
与用户或用户组名有关的参数;
-uidn :n为数字,这个数字是用户的帐号ID。即UID,这个UID是记录在/etc/passwd 里面与帐号名称对应的数字
-gidn :n为数字,这个数字是用户组名的ID.即GID,这个GID记录在/etc/group中,
-username :name为用户组名,例如users
-nouser:寻找文件的所有者不存在/etc/passwd 的人
-nogroup:寻找文件的所有用户组不存在于/etc/group中的文件,当你自行安装软件时,很可能该软件的属性当中并没有文件所有者,这是可能的,在这个时候就可以使用-nouser与-nogroup查找。
查找/home 下面属于vbird的文件
Find/home -user vbird
当我们要找出任何一个用户在系统当中的所有文件时,就可以利用这个命令将属于某个用户的所有文件都找出来。
查找系统中不属于任何人的文件
Find / -nouser
通过这个命令,可以轻易就找出哪些不太正常的文件
与文件权限及名称有关的参数
-name filename;查找文件名为filename的文件
-size(+—)SIZE;查找比SIZE还要大(+)或小(-)的文件,这个size的规格有;c:代表byte;k:代表1024bytes。所以要找比50kb还大的文件,就是“-size +50k”
-typeTYPE :查找文件的类型为TYPE的,类型主要有,一般正规文件(f),设备文件(b,c),目录(d),连接文件(l),socket(s),及fifi(p)等属性
-permmode ;查找文件权限“刚好等于”mode的文件,这个mode与类似chmod的属性值,举例来说,-rwsr-xr—r—的属性为4755
-perm-mode ;查找文件权限“必须要全部包括mode的权限”的文件,举例来说我们要查找-rwxr--r--,即0744的文件,使用-perm -0744,当一个文件的权限为-rwsr-wr-x,即4755时,也会被列出来,因为-rwsr-xr-x的属性已经包括了-rwxr—r—的属性了
-perm+mode:查找文件权限“包含任意mode的权限”的文件,举例来说,我们查找-rwxr-xr-x,即-perm +755时,但一个文件属性为-rw-------也会被列出来,因为它有-rw…的属性存在
范例;
找出文件名为passwd的这个文件
Find/ -name apsswd
利用这个-name可以查找文件名
找出/var目录下文件类型为Socket的文件名有哪些
Find/var -type s
查找文件当中含有SGID或SUID或SBIT的属性
Find/ -perm +7000
所谓的7000就是---s--s—t,那么只要含有s或t的就列出来
所以当然要使用+7000.使用-7000表示要含有—s—s—t的所有三个权限
因此就是+7000
将/bin目录下只要具有SUID或SGID的文件就列出来
Find/bin -perm +6000
因为SUID是4分,SGID是2分总共6分,因此可用+6000来处理这个权限,
其他可进行的操作;
-execcommand:command为其他命令,-exec后面可再接其他的命令来处理查找到的结果
-print:将结果打印到屏幕上,这个操作是默认操作
将上个范例找到的文件使用ls -l 列出来
Find/ -perm +7000 -exec ls -l {}\;
-perm后面跟的是具有SUID与SGID的权限
-exec后面跟的是额外的命令 比如 ls -l
{}代表的是“由find找到的内容”,find到的结果会被放到{}位置中
-exec一直到“\;”是关键字,代表find额外命令的开始(-exec)到结束(/;)在这中间的就是find命令内的额外命令,在本例中就是ls-l{}
因为“;”在bash环境下有特殊意思的;因此利用反斜杠来转义。
找出系统中大于1MB的文件
Find/ -size + 1000k
找出/etc下面文件名包含httpd的文件,
Find/etc -name ‘*httpd*;’
不但可以指定查找的目录(连同子目录)。并且额可以利用额外的参数来找到最正确的文件名。
权限与命令件的关系(极重要)
权限对于用户帐号来说是非常重要的,因为它可以限制用户能不能读取/新建/删除/修改文件或目录,在这一节将两者结合,说明一下什么命令在什么样的权限下才能够运行
l 让用户能进入某目录成为“可工作目录”的基本权限
l 可使用的命令;例如cd等切换工作目录的命令
l 目录所需权限;用户对这个目录至少需要具有x的权限
l 额外需求,如果用户想要在这个目录内利用ls查阅文件名,则用户对此目录还需r的权限
用户在某个目录内读取一个文件的基本权限是什么
l 可使用的命令,
linux文件目录与管理