您的位置:首页 > 运维架构 > Linux

linux文件与目录管理

2015-10-04 18:09 676 查看
一、一切皆文件
linux下“一切皆文件”,不仅数据被组织成文件形式,连各种设备资源也被抽象成了文件形式,而对文件只有read、write、open、close几种操作,这样便统一了用户对各种资源的访问方式,简化了操作。
二、文件类型 普通文件(-,f)、目录文件(d)、符号链接文件(l)、设备文件( 字符设备c,块设备b)、命名管道(p)、套接字文件(s) 查看文件类型file /path/to/somefile...,可同时查看多个文件的类型,中间用空格相隔 以下当我们将文件和目录并称时,一般指狭义上的“文件”

三 、如何指定一个文件或目录 linux使用层次化结构表示文件路径,一个目录就是一个名称空间,同一目录下文件不能同名。指定一个文件或目录有绝对路径相对路径两种方式: 绝对路径:从顶级名称空间(即根)起始标记的路径,例如/home/tesla/test 每个绝对路径由基名(由命令basename获悉)和目录名(由dirname获悉)组成,以/home/tesla/test为例,其基名为test,目录名为/home/tesla 相对路径:相对于当前目录而言的路径,例如../test 几种独特的路径表示
.:当前目录 ..:上一级目录
-:前一个工作目录
~:当前使用者的家目录
四、与目录相关的操作 1、cd:切换至指定目录 用法:cd DirName cd ~username:切换至指定用户的家目录 2、pwd:以绝对路径的方式打印当前工作目录 3、mkdir:创建目录 用法:mkdir [option]... DIR...(多同时创建多个目录,用空格隔开) 常用选项: -p:一次创建多个层次目录,如mkdir /temp/a/b/ -m:创建目录的同时设置目录的权限,如mkdir -m 740 /temp/a 4、rmdir:删除指定的空目录 用法:rmdir [option]... DIR... 常用选项: -p:删除指定目录及其上级目录 注意:要删除的目录必须为空,使用-p选项一次删除多个层级空目录,直至不空的目录为止。例如rmdir -p /temp/a/b/c,若目录b,c为空,a不空,则会删除b,c,保留a 5、tree:以树状图显示目录层级结构,该程序需额外安装 常用选项: -d:显示目录名称而非内容 -L #:只显示#层目录 -a:显示所有目录和文件
[root@localhost ~]# tree -d /lib64
/lib64
├── dbus-1
├── device-mapper
├── rsyslog
├── rtkaio
├── security
│   ├── pam_filter
│   └── pam_krb5
├── tls
└── xtables

9 directories

五、文件与目录管理查看文件内容:
1)cat:连接并显示文本文件内容 用法:cat [option]... FILE...,可同时显示多个文本文件,以空格隔开 常用选项: -n:显示行号 -E:显示行结束符 2)tac:逆序显示文本文件内容 3)nl:添加行号打印文本文件内容 4)head:用于显示文件的开头的内容。在默认情况下显示文件的头10行内容。 常用选项: -n [-]#:显示前#行内容,若有加-则显示除最后#行外的其他内容 -c [-]#: 显示文件的前#个字节的内容 如head -n 3 /etc/inittab /etc/passwd 5)tail:类似于head,只是tail是显示文件尾部的内容 常用选项: -n [+]#:显示最后#行内容,如果有+则从文件开头的第#项开始显示 -f:使tail一直显示尾部,因此有实时监视的效果,ctrl+c退出 6)lessmore:这两个命令均用于分屏显示文本文件内容,不同的是less命令允许向前或向后浏览,而more命令只能向前浏览。用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。退出按q键。在用less或more查看文本文件内容时,也可搜索字串,方法同vim字串搜索

查看文件或目录状态信息stat:用于显示文件或目录的状态信息,包括文件大小,块数,inode号,权限,时间戳等,比ls命令更详细 用法:stat [option]... FILE... 时间戳Access、Modify、Change的含义:
Access文件最后一次被访问的时间 Modify:文件内容最后一次被修改的时间,例如被vim编辑过后该时间会更新 Change:文件状态最后一次改变的时间,例如移动,修改权限、属主、属组等均会引起该值改变 通常modify操作也会引起Access和Change更新
[tesla@localhost ~]$ stat test/init
File: `test/init'
Size: 884       	Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d	Inode: 131172      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  501/   tesla)   Gid: (  501/   tesla)
Access: 2015-10-01 09:18:06.768163964 +0800
Modify: 2015-10-01 09:18:06.768163964 +0800
Change: 2015-10-01 09:18:39.550391159 +0800
[tesla@localhost ~]$ vim test/init
[tesla@localhost ~]$ stat test/init
File: `test/init'
Size: 824       	Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d	Inode: 145404      Links: 1
Access: (0644/-rw-r--r--)  Uid: (  501/   tesla)   Gid: (  501/   tesla)
Access: 2015-10-01 09:19:42.763840959 +0800
Modify: 2015-10-01 09:19:42.763840959 +0800
Change: 2015-10-01 09:19:42.764840957 +0800
[tesla@localhost ~]$

复制文件或目录:
cp: 用来将一个或多个源文件或者目录复制到指定的目的文件或目录 用法:cp [option]... SRC... DEST 常用选项: -a:相当于-dpr,实际上是存档 -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录 -f:强行覆盖 -i:交互式操作,复制前询问 --preserve=[ATTR_LIST]:指定保留原文件或目录的哪些属性,ATTR_LIST为mode,ownership,timestamps -p:保留原文件或目录的属性,相当于--preserve=mode,ownership,timestamps -P:复制符号链接本身 -r/R:递归复制目录及其子目录内的所有内容 关于cp命令的几点说明: 1)SRC是文件,如果DEST不存在,复制SRC为DEST;如果DEST存在:1、如果DEST是文件,则覆盖 2、如果DEST是目录,将SRV复制进DEST中,并保持原名 2)如果SRC不止一个,则DEST必须是目录 3)cp默认情况下不复制目录,若要复制目录,可使用选项-r 4)复制后的新文件属主默认为执行该操作的用户,可使用--preserve或-p选项保留原属性 5)如果复制的是一个符号链接文件,则会将该链接文件所指向的文件复制,且保留符号链接的名字。如果想复制符号链接文件本身,可使用选项-P

移动和删除
1)mv:将源文件(或目录)重命名为目标文件,或将源文件移动至指定目录。 用法:mv [option]... SRC... DEST 常用选项: -b:当目标文件存在时,覆盖前,为其创建一个备份 -i:移动前询问 -f:强制覆盖,覆盖前不询问 -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作 若源文件有多个,则目标文件必须是目录 2)rm:删除文件或目录 用法:rm [option]... FILE... 常用选项: -i:删除前询问 -f:强制删除,删除前不询问 -r/R:递归处理,将指定目录下的所有文件与子目录一并处理 rm默认不删除目录,使用-r选项可删除目录及其下所有内容
[tesla@localhost ~]$ cp /etc/{rc.local,inittab} test
[tesla@localhost ~]$ cp /etc/rc.local ./
[tesla@localhost ~]$ mv -b rc.local test/
[tesla@localhost ~]$ ls test
inittab  rc.local  rc.local~
[tesla@localhost ~]$ rm -irv test
rm: descend into directory `test'? y
rm: remove regular file `test/rc.local~'? y
removed `test/rc.local~'
rm: remove regular file `test/inittab'? y
removed `test/inittab'
rm: remove regular file `test/rc.local'? y
removed `test/rc.local'
rm: remove directory `test'? y
removed directory: `test'

创建文件:
除了可以通过复制现有文件或使用编辑器(如vim))直接编辑生成新文件之外,还可以通过touch命令创建一个空文件 touch命令有两个功能:一是创建新的空文件;二是将已存在文件的访问时间和修改时间更新为系统当前的时间,而它们的数据不变 用法:touch [option]... FILE...
常用选项: -a:只更改访问时间 -d,--date=字符串:使用指定字符串表示时间替代当前时间 -m:只更新修改时间 -t:使用[[CC]YY]MMDDhhmm[.ss] 格式的时间替代当前时间 -r,--reference=file:使用指定文件的时间属性替代当前时间
tesla@localhost ~]$ ls test/
init
[tesla@localhost ~]$ touch test/terminate
[tesla@localhost ~]$ touch -mt 10010830 test/terminate
[tesla@localhost ~]$ stat test/terminate
File: `test/terminate'
Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050d	Inode: 145388      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  501/   tesla)   Gid: (  501/   tesla)
Access: 2015-10-01 10:05:22.332344736 +0800
Modify: 2015-10-01 08:30:00.000000000 +0800
Change: 2015-10-01 10:05:33.662422730 +0800

其它文本文件处理工具
1)wc:统计指定文件中的字节数、单词数、行数, 并显示出来
用法:wc [option]... FILE... 常用选项: -l:统计行数 -c:统计字节数 -m: 统计字符数 -w:统计单词数 -L: 打印最长行的长度 2)cut:该命令有两个功能,一是在文件中的每一行提取指定片断,并显示在标准输出上,二是连接两个或多个文件,如cut file1 file2 > file3,将file1和file2的内容合并再输出至file3中
用法:cut [option]... FILE... 常用选项: -b:仅显示行中指定范围的字节 -c:仅显示行中指定范围的字符 -d:指定分隔符默认为制表符),分隔符必须是单个字符,例如要指定空格为分隔符可写为-d ' ' -f:指定要显示的字段(以列为单位),如-f1,5表示第1、第5字段,-f1-5表示第1到第5之间的字段,-f与-d结合使用
[tesla@localhost ~]$ wc /etc/passwd /etc/inittab
33   51 1590 /etc/passwd
26  149  884 /etc/inittab
59  200 2474 total
[tesla@localhost ~]$ cut -d: -f1 /etc/passwd /etc/inittab > /tmp/initpas
[tesla@localhost ~]$ head -n 3 /tmp/initpas
root
bin
daemon
[tesla@localhost ~]$ wc -l  /tmp/initpas
59 /tmp/initpas
3)sort:将文件内容进行排序。以行为单位,从首字符开始,依次按ASCII码值进行比较,最后将按升序输出,注意,sort并不实际改变文件内容
用法:sort [option]... FILE... 常用选项: -f:忽略字符大小写 -t:指定分隔符 -k:指定分隔符后要进行排序的字段 -n:指明以数值大小进行排序,sort默认是以字符来排序的 -u:排序后去重(注意:相同且相邻的行才算重复) -r:降序输出结果 -o:将排序后的结果写入到文件,而非标准输出
[tesla@localhost ~]$ cat /tmp/sortest
distribute:80
describe:5
attribute:35
literature:100
Alter:11
attribute:35
consist:20
[tesla@localhost ~]$ sort /tmp/sortest
Alter:11
attribute:35
attribute:35
consist:20
describe:5
distribute:80
literature:100
[tesla@localhost ~]$ sort -u -t : -k 2 /tmp/sortest
literature:100
Alter:11
consist:20
attribute:35
describe:5
distribute:80
[tesla@localhost ~]$ sort -u -t : -k 2 -n /tmp/sortest
describe:5
Alter:11
consist:20
attribute:35
distribute:80
literature:100
[tesla@localhost ~]$ sort -u -t : -k 2 -n /tmp/sortest -o /tmp/sortest
[tesla@localhost ~]$ cat /tmp/sortest
describe:5
Alter:11
consist:20
attribute:35
distribute:80
literature:100
4)uniq去重后显示文件内容
用法:uniq [option]... FILE... 常用选项: -c:在每行旁边显示该行出现的次数 -d:仅显示重复出现的行 -u:仅显示出没有重复的行 相同且相邻的行才算重复
[root@localhost ~]# cat /tmp/sortest
describe:5
Alter:11
consist:20
consist:20
attribute:35
Alter:11
[root@localhost ~]# uniq -c /tmp/sortest
1 describe:5
1 Alter:11
2 consist:20
1 attribute:35
1 Alter:11

修改文件或目录属性
1)修改文件权限,见博客http://9124573.blog.51cto.com/9114573/1698033 2)chown:修改文件或目录的属主和属组,指定属主和属组使用名称或ID均可 用法:chown [-R] [--reference=somefile] user[:group或.group] file... 常用选项: --reference=somefile:参照指定文件的属主属组设定目标文件的属主属组 -R:递归处理 示例:chown -R tesla /tmp/test chown tesla:science /tmp/elec #将elec的属主和属组分别修改为tesla和science chown :science /tmp/elec #作用等同于chgrp science /tmp/elec chown --reference=/tmp/future /tmp/past 3)chgrp:修改文件或目录的属组 用法同chown类似,不再赘述 注意:只有root用户才能修改文件属主和属组 4)chattr:给文件或目录设置隐藏属性 用法:chattr [+|-] [特殊属性] FILE... +:表示增加特殊属性 -:表示移除特殊属性 = :更新为指定参数 常用特殊属性: A:访问文件后,其atime不会改变。由此减少了频繁I/O对性能的损耗 a:设置a之后,该文件(或目录)将只能增加内容,不能删除或更改原有内容,只有root用户能够设置该属性 i:该属性使文件(或目录)不能被删除、更名、写入、设定链接,只有root用户能够设置 s:如果文件被删,将会被完全从磁盘上移除,无法恢复 u:如果文件被删,其内容仍保存于磁盘上,可以恢复 例:锁定系统关键文件: chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 5)lsattr:显示文件的隐藏属性 用法:lsattr [option]... FILE... 选项: -a:将隐藏文件的特殊属性也显示出来 -d:仅显示目录自身的特殊属性 -R:递归处理,边同目录下所有文件和子目录一并显示
[root@localhost tesla]# lsattr test/*
-----a-------e- test/inittab
-------------e- test/passwd
[root@localhost tesla]# rm -f test/inittab
rm: cannot remove `test/inittab': Operation not permitted
[root@localhost tesla]# echo "hello" > test/inittab
-bash: test/inittab: Operation not permitted
[root@localhost tesla]# echo "hello" >> test/inittab
[root@localhost tesla]# echo $?
0
[root@localhost tesla]# chattr +a test
[root@localhost tesla]# lsattr -d test
-----a-------e- test
[root@localhost tesla]# cp /etc/rc.local test/
[root@localhost tesla]# ls test
inittab  passwd  rc.local
[root@localhost tesla]# rm -f test/passwd
rm: cannot remove `test/passwd': Operation not permitted

命令和文件的查找
1)which:通过遍历PATH环境变量所保存的目录用于查找并显示给定命令的绝对路径 用法:which [选项] [参数] 常用选项: -a:查找全部内容,而非第一个文件,因which默认是搜索到第一个目标文件后就停止
[root@localhost tesla]# which ls find
alias ls='ls --color=auto'
/bin/ls
/bin/find
2)whereis:用来定位二进制程序、源代码文件和man手册页等相关文件的路径
用法:whereis [选项]... [参数]... 常用选项: -b:只查找二进制文件 -m:只定位帮助文件 -s:只定位源代码文件
[root@localhost tesla]# whereis ssh ftp
ssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1.gz
ftp: /usr/bin/ftp /usr/share/man/man1/ftp.1.gz
3)locate:查找文件或目录,非实时非精确查找,速度快。不搜索具体目录,而是根据索引(/var/lib/mlocate/mlocate.db)查找,该索引由系统创建并在系统空闲时自动更新,也可手动使用updatedb命令更新。索引构建很占资源。
例:locate -i /etc/rc #搜索/etc目录下所有以rc开头的文件,忽略字符大小写 4)find:查找文件或目录,实时精确查找,速度慢,因为要遍历所有文件进行条件匹配 用法:find [option]... [查找路径] [查找条件] [处理动作] 查找路径 :默认为当前目录,find后可接多个目录 查找条件:默认为指定路径下的所有文件 -name "文件名":支持使用通配符 -iname"文件名":查找时忽略字符大小写 -user USERNAME:根据文件属主查找 -group GROUPNAME -uid UID:删除某用户后,原来属主为该用户的文件其属主会变成该用户的ID号,因此可使用-uid作为查找条件找到这些文件 -gid GID -nouser:查找没有属主的文件 -nogroup -type TYPE:根据文件类型查找 -size [+|-]#UNIT:根据文件大小查找 ,常用单位有K,M,G #UNIT:#-1<x<=# -#UNIT:x<=#-1 +#UNIT:x># -atime [+|-]N:根据时间戳查找,以“天”为单位,另外,还有mtime,ctime。amin/mtime/ctime表示以“分钟”为单位 N:N<=x<N+1 -N:x<N 今天到N天之间的 +N:x>=N+1 N天之前的 -mtime [+|-]N:根据修改时间查找 -perm [+|-]MODE:根据权限查找 MODE:与MODE精确匹配 +MODE:只要能包含指定的任意一类用户的任意一位权限即可,例如权限为-w--w--w-的文件符合条件-perm -446 -MODE:为每类用户指定的每一位权限都要能够被包含 -maxdepth: 查找最大目录层数

组合条件查找: -a:与。例,find /etc -iname "p*" -a -user root 查找etc目录下以p开头且属主为root的文件 -o:或 !/-not:非。例,find /tmp -not \( -iname "*r*" -o -user gentoo \) 查找tmp目录下文件名不包含r且属主不为gentoo的文件 处理动作:默认显示至屏幕 -print:显示 -ls:类似于ls -l -exec COMMAND {} \; # {}代表由find找到的内容;-exec到\;是关键字,代表处理动作的开始与结束 -ok COMMAND {} \; 相当于交互式exec find一次性查找符合条件的所有文件,并一同传递给-exec或-ok后面指定的命令,但有些命令无法接受过长的参数,此时可使用find 条件 | xargs COMMAND(xargs:把其他命令给它的数据传递给它后面的命令作为参数),例如find /tmp -iname "*test*" | xargs rm -f

六、find使用示例 1、查找/var目录属主为root,且属组为mail的所有文件;
[root@localhost ~]# find /var -user root -a -group mail
/var/spool/mail
2、查找/usr目录下不属于root、bin和hadoop的所有文件;
[root@localhost ~]# find /usr ! \( -user root -o -user bin -o -user hadoop \)
/usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
3、查找/etc目录下最近一周内其内容修改过,且属主不为root、hadoop的所有文件;
[root@localhost ~]# find /etc -mtime -7 -a ! \( -user root -o -user hadoop \)
[root@localhost ~]#
4、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
[root@localhost ~]# find / -atime -7 -a \( -nouser -o -nogroup \)
find: `/proc/9323/task/9323/fd/5': No such file or directory
find: `/proc/9323/task/9323/fdinfo/5': No such file or directory
find: `/proc/9323/fd/5': No such file or directory
find: `/proc/9323/fdinfo/5': No such file or directory
5、查找/etc目录下大于20k且类型为普通文件的所有文件;
[root@localhost ~]# find /etc -size +20k -a -type f
/etc/prelink.cache
/etc/pki/tls/certs/ca-bundle.crt
/etc/pki/tls/certs/ca-bundle.trust.crt
...
6、查找/etc目录下所有用户都没有写权限的文件;
[root@localhost ~]# find /etc ! -perm +222 -ls
133044    4 -r--r--r--   1 root     root          146 Aug 17  2013 /etc/pam.d/cups
131339  308 -r--r--r--   1 root     root       314336 Aug  6 04:52 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
131342  184 -r--r--r--   1 root     root       185023 Aug  6 04:52 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
131340  228 -r--r--r--   1 root     root       232342 Aug  6 04:52 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
131341  184 -r--r--r--   1 root     root       185220 Aug  6 04:52 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
131343  172 -r--r--r--   1 root     root       172980 Aug  6 04:52 /etc/pki/ca-trust/extracted/java/cacerts
133042    4 -r--r--r--   1 root     root          460 Aug 17  2013 /etc/dbus-1/system.d/cups.conf
145410    4 ----------   1 root     root         1177 Oct  1 23:55 /etc/shadow
145406    4 ----------   1 root     root          675 Oct  1 23:55 /etc/gshadow
131109    4 ----------   1 root     root         1148 Oct  1 20:46 /etc/shadow-
144046    4 -r--r-----   1 root     root         4002 Mar  2  2012 /etc/sudoers
142606    4 -r-xr-xr-x   1 root     root         2134 Nov 24  2013 /etc/rc.d/init.d/lvm2-lvmetad
142607    4 -r-xr-xr-x   1 root     root         2665 Nov 24  2013 /etc/rc.d/init.d/lvm2-monitor
142605    4 -r-xr-xr-x   1 root     root         1340 Nov 24  2013 /etc/rc.d/init.d/blk-availability
131101    4 ----------   1 root     root          664 Oct  1 20:46 /etc/gshadow-
138423    4 -r--r--r--   1 root     root          324 Nov 22  2013 /etc/ld.so.conf.d/kernel-2.6.32-431.el6.x86_64.conf
7、查找/etc目录下至少有一类用户没有执行权限的文件;
[root@localhost ~]# find /etc ! -perm -111 -ls
...
131115  628 -rw-r--r--   1 root     root       641020 Oct  2  2013 /etc/services
140932    4 -rw-r--r--   1 root     root         1117 Nov 12  2010 /etc/pcmcia/config.opts
131094    4 -rw-r--r--   1 root     root         1512 Jan 12  2010 /etc/aliases
...
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
[root@localhost ~]# find /etc/init.d -perm -113
/etc/init.d
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cut rm chown