首页 > 系统服务 > 详细

linux 文件管理

时间:2019-08-28 12:14:48      阅读:68      评论:0      收藏:0      [点我收藏+]

创建文件:

touch:选项,参数

1.选项:

-a:或--time=atime或--time=access或--time=use  只更改存取时间;
-c:或--no-create  不建立任何文件;
-d:<时间日期> 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify  只更该变动时间;
-r:<参考文件或目录>  把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间>  使用指定的日期时间,而非现在的时间;
--help:在线帮助;
--version:显示版本信息。

2.使用范例:

实例一:创建不存在的文件

命令:

touch log2012.log log2013.log

输出:

[root@localhost test]# touch log2012.log log2013.log

[root@localhost test]# ll

-rw-r--r-- 1 root root    0 10-28 16:01 log2012.log

-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log

 

如果log2014.log不存在,则不创建文件

[root@localhost test]# touch -c log2014.log

[root@localhost test]# ll

-rw-r--r-- 1 root root    0 10-28 16:01 log2012.log

-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log

 

实例二:更新log.log的时间和log2012.log时间戳相同

命令:

touch -r log.log log2012.log

输出:

[root@localhost test]# ll

-rw-r--r-- 1 root root    0 10-28 16:01 log2012.log

-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log

-rw-r--r-- 1 root root    0 10-28 14:48 log.log

[root@localhost test]# touch -r log.log log2012.log 

[root@localhost test]# ll

-rw-r--r-- 1 root root    0 10-28 14:48 log2012.log

-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log

-rw-r--r-- 1 root root    0 10-28 14:48 log.log

 

实例三:设定文件的时间戳

命令:

touch -t 201211142234.50 log.log

输出:

[root@localhost test]# ll

-rw-r--r-- 1 root root    0 10-28 14:48 log2012.log

-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log

-rw-r--r-- 1 root root    0 10-28 14:48 log.log

[root@localhost test]# touch -t 201211142234.50 log.log

[root@localhost test]# ll

-rw-r--r-- 1 root root    0 10-28 14:48 log2012.log

-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log

-rw-r--r-- 1 root root    0 2012-11-14 log.log

 

说明:

-t  time 使用指定的时间值 time 作为指定文件相应时间戳记的新值.此处的 time规定为如下形式的十进制数:      

  [[CC]YY]MMDDhhmm[.SS]     

  这里,CC为年数中的前两位,即”世纪数”;YY为年数的后两位,即某世纪中的年数.如果不给出CC的值,则touch   将把年数CCYY限定在1969--2068之内.MM为月数,DD为天将把年数CCYY限定在1969--2068之内.MM为月数,DD为天数,hh 为小时数(几点),mm为分钟数,SS为秒数.此处秒的设定范围是0--61,这样可以处理闰秒.这些数字组成的时间是环境变量TZ指定的时区中的一个时 间.由于系统的限制,早于1970年1月1日的时间是错误的。

删除文件:

1.mv /tmp

2.find . -type f -name "*.log" -print0 | xargs -0 rm -f(xargs 用来把过滤到的结果传给后续的命令做参数)

3.rm

-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。

移动文件/目录:

文件的传输有两种,一种是推模式,一种是拉模式。

mv移动文件,重命名:

  mv -t /tmp a.sh b.sh c //将多个源文件移动到目录里

  同目录mv a b改名

  不同目录,源与目标都是文件,覆盖

--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
--strip-trailing-slashes:删除源文件中的斜杠“/”;
-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
--target-directory=<目录>:指定源文件要移动到目标目录;
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。

cp:

-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。

同样有-t选项

\cp -r -a aaa/* /bbb

不提示按Y、传递目录属性、不略过目录

 -a 复制目录以及目录里的文件,传递属性

install 复制文件创建目录;

--backup[=CONTROL]:为每个已存在的目的地文件进行备份。
-b:类似 --backup,但不接受任何参数。
-c:(此选项不作处理)。
-d,--directory:所有参数都作为目录处理,而且会创建指定目录的所有主目录。
-D:创建<目的地>前的所有主目录,然后将<来源>复制至 <目的地>;在第一种使用格式中有用。
-g,--group=组:自行设定所属组,而不是进程目前的所属组。
-m,--mode=模式:自行设定权限模式 (像chmod),而不是rwxr-xr-x。
-o,--owner=所有者:自行设定所有者 (只适用于超级用户)。
-p,--preserve-timestamps:以<来源>文件的访问/修改时间作为相应的目的地文件的时间属性。
-s,--strip:用strip命令删除symbol table,只适用于第一及第二种使用格式。
-S,--suffix=后缀:自行指定备份文件的<后缀>。
-v,--verbose:处理每个文件/目录时印出名称。
--help:显示此帮助信息并离开。
--version:显示版本信息并离开

 install -d a/b/c  e/f结果和mkdir -p a/b/c  e/f一样的

-g -o -m自定义所属组、所有者、权限模式

scp :

-1:使用ssh协议版本1;
-2:使用ssh协议版本2;
-4:使用ipv4;
-6:使用ipv6;
-B:以批处理模式运行;
-C:使用压缩;
-F:指定ssh配置文件;
-l:指定宽带限制;
-o:指定使用的ssh选项;
-P:指定远程主机的端口号;
-p:保留文件的最后修改时间,最后访问时间和权限模式;
-q:不显示复制进度;
-r:以递归方式复制

从远处复制文件到目录

scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz  /opt/soft

从远处复制到本地

scp -r root@10.10.10.10:opt/soft/mongodb  /opt/soft/

上传本地文件到指定远程目录

scp /opt/soft/nginx-0.5.38.tar.gz  root@10.10.10.10:/opt/soft/scptest

上传本地目录到远程机器指定目录

scp  -r  /opt/soft/mongdb   root@10.10.10.10:/opt/soft/scptest

查找:

locate

locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

yum install mlocate -y
需要生成一个查找库的--不常用
updatedb 我在这个查找库中查找对应文件

[root@localhost ~]# locate /etc/sh
/etc/shadow
/etc/shadow-
/etc/shells

find:

可以根据文件的任何一个属性,来查找文件
1、inode 2、文件类型 3、文件权限 4、硬连接数 5、所属主 6、所属组 7、文件大小 8、修改时间 9、文件名(globbing)-regex

按照时间:

-amin:以分钟为单位通过文件的最后存取时间(access time)查找文件。 
-cmin:以分钟为单位通过文件的状态修改时间(change time)查找文件。 
-mmin:以分钟为单位通过文件的数据修改时间(modify time)查找文件。 
-atime:以天为单位通过文件的最后存取时间(access time)查找文件。 
-ctime:以天为单位通过文件的状态修改时间(change time)查找文件。 
-mtime:以天为单位通过文件的数据修改时间(change time)查找文件。 
-newer:查找比当前文件数据修改时间更加新一点的另外的文件。 
-anewer:查找比当前文件的最后存取时间更加新一点的另外的文件。 
-cnewer:查找比当前文件的状态时间更加新一点的另外的文件。 

例:find ./ -amin +50   find ./ -mtime +1 find ./ -newer GeekDevOps.doc

按照用户、组:

-uid n:文件的所属用户uid为n。 
-user name:文件的所属用户为name。 
-gid n:文件的所属组gid为n。 
-group name:所属组为name的文件。 
-nogroup:没有所属组的文件。 
-nouser:没有所属用户的文件。

例:find / -uid `id -u`

按照权限:

-executable:文件可执行。 
-readable:文件可读。 
-writable:文件可写。

-perm mode:查找权限为mode的文件,mode的写法可以是数字,也可以是ugo的方式如:

find /home/ -perm 700 -ls 等于find /home/ -perm u=rwx -ls

这样查找是精确的,只符合当前权限,还能指定包括当前权限

[GeekDevOps@GeekDevOps-find /]$ find /home/ -perm -600 -ls
16803401    0 drwxr-xr-x   3 root     root           24 1月 23 17:09 /home/
534195    0 drwx------   2 GeekDevOps GeekDevOps       62 1月 23 17:09 /home/GeekDevOps
534196    4 -rw-r--r--   1 GeekDevOps GeekDevOps       18 8月  3 05:11 /home/GeekDevOps/.bash_logout
534197    4 -rw-r--r--   1 GeekDevOps GeekDevOps      193 8月  3 05:11 /home/GeekDevOps/.bash_profile

按照文件名:

-name pattern:文件名为pattern的文件。注意如果pattern中包括*等特殊符号的时候,需要加引号。
-iname:name的忽略大小写版本。
-lname pattern:查找符号连接文件名为pattern的文件。
-ilname:lname的忽略大小写版本。
注意:此处的pattern代表被查找的文件的名称。

例:find / -name "geekdevops.*"

按照路径:

-path pattern:根据完整路径查找文件名为pattern的文件。 
-ipath:path的忽略大小写版本。

例:find / -path "/u*SS"

其它匹配:

 

-regex pattern:用正则表达式匹配文件名。
-iregex:regex的忽略大小写版本。
-empty:文件为空而且是一个普通文件或者目录。
-size n[cwbkMG]:指定文件长度查找文件。单位选择位:
1 . c:字节单位。
2 . b:块为单位,块大小为512字节,这个是默认单位。
3 . w:以words为单位,words表示两个字节。
4 . k:以1024字节为单位。
5 . M:以1048576字节为单位。
6 . G:以1073741824字节温单位。
n前加-/+,表示小于和大于

-inum:根据文件的inode编号查找。

-links n:根据文件连接数查找。

-samefile name:找到跟name指定的文件完全一样的文件,就是说两个文件是硬连接关系。

-type c:以文件类型查找文件:
c可以选择的类型为:
1 . b:块设备。
2 . c:字符设备。
3 . d:目录。
4 . p:命名管道。
5 . f:普通文件。
6 . l:符号连接。
7 . s:socket。
例:ind / -size +10M -a -size -50M -type f

-links按照硬链接数进行查询

-maxdepth /-mindepth最多查找和最少查找几级目录

 

linux 文件管理

原文:https://www.cnblogs.com/abels0025/p/11422985.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!