Linux 基础-第1章 文件类基础命令

说明:本文内容来源于博主“骏马金龙”的《Linux基础千锤百炼》。 本文列出里面的骚操作,知识点,用于参考学习。

1.1.1 bash shell 通配符

可以使用 * ? [] 等的通配符来扩展路径或文件名。例如, ls *.log 将列出当前路
径下所有以 ".log" 字符结尾的文件名 ( 但不包括 "." 开头的隐藏文件 )
默认情况下, bash 提供的通配符规则比较弱,例如 "*" 无法匹配文件名开头的 "."
无法匹配路径分隔符号 ( 即斜线 "/") ,但可以通过 set shopt 命令开启额外的通
配功能,实现更完善的通配符规则。
例如,默认情况下,想要匹配目录 /path 下所有隐藏文件和非隐藏文件,如下:
ls .* *

感觉比tree显示得好看。

开启 dotglob 功能, "*" 就可以匹配以 "." 开头的文件:
shopt -s dotglob
ls *

1.6.1 cp 命令

选项说明:
-p : 文件的属性 ( 权限、属组、时间戳 ) 也复制过去。如果不指定 p 选项,谁执行复制动作,文件所有者
和组就是谁。
 
-r -R :递归复制,常用于复制非空目录。
-d :复制的源文件如果是链接文件,则复制链接文件而不是指向的文件本身。即保持链接属性,复制快
捷方式本身。如果不指定 -d ,则复制的是链接所指向的文件。
-a a=pdr 三个选项。归档拷贝,常用于备份
 
一般使用 cp -a 即可,对于目录加上 -r 选项即可。
注意, bash 内置命令在进行通配符匹配文件的时候, * ? [] 是无法匹配到以 "."
开头的文件的,所以 "*" 不会匹配隐藏文件。要通配隐藏文件,使用 "." 代替上述几
种通配元字符即可,它能匹配除了 "." ".." 这两个特殊目录外的所有文件。它并非
通配符,而是表示当前目录,显然直接复制目录,是可以将隐藏文件复制走的。
例如,复制 /etc/skel 目录下所有文件包括隐藏文件到 /tmp 目录下。
cp -a /etc/skel/. /tmp
如果有重复文件,则即使加上 -f 选项,也一样会交互式询问。解决方法可以是使用
"yes" 这个工具,它会不断的生成 y 字母直到进程被杀掉,当然也可以自行指定要生成的字符串。
yes | cp -a /etc/skel/. /tmp

这个yes指令是个亮点, yes重定向到文本不到2分钟,就能产生百亿行的y ,20多GB的容量的文本

1.6.3 mv 命令

mv 命令移动文件和目录,还可以用于重命名文件或目录。
-b :类似于 --backup ,但不接受参数 , 默认备份文件是在文件名后加上波浪线,如 /b.txt~
-f :如果目标文件已存在,则强制覆盖文件
mv 默认已经是递归移动 , 不需要 -r 参数。
 

1.6.4 mv 的一个经典问题(mv 的本质)

该问题涉及文件系统操作文件的机制,若不理解,请先深入学习文件系统。
mv 不能实现里层同名目录覆盖外层同名目录。如 /tmp 下有 a 目录, a 目录里还有 a 目录。

(关系到inode table ,data block ,inode指针的东西, 看不太懂。  但知道这个问题,还是有点开眼界的)

 

1.8.3 whatis

(这个面试题好像有过)列出给定命令 ( 并非一定是命令 ) man 文档信息。
whatis passwd
sslpasswd (1ssl) - compute password hashes
passwd (1) - update user's authentication tokens
passwd (5) - password file
根据上面的结果,执行:
man 1 passwd # 获取 passwd 命令的 man 文档
man 5 passwd # 获取 password 文件的 man 文档,文件类的 man 文档说明的是该文件中各配置项意义

man sslpasswd # 获取 sslpasswd 命令的 man 文档,实际上是 openssl passwd 的 man 文档

1.9 find

(1). 最基础的打印操作
[root@xuexi tmp]# find /tmp/a # 等价于 find /tmp/a -print,表示搜索/tmp/a 目录

(2). 文件名搜索: -name -path
[root@xuexi tmp]# find /tmp -name "*.log"
 
(3). 根据文件类型搜索: -type
一般需要搜索的文件类型就只有普通文件 (f) ,目录 (d) ,链接文件 (l)
[root@xuexi test]# find /tmp -type f -name "a*.sh"
搜索目录类文件,且目录名以 a 开头。
[root@xuexi test]# find /tmp -type d -name "a*"
(4). 根据文件的时间戳搜索: -atime/-mtime/-ctime
例如搜索 /tmp 3 天内修改过内容的 sh 文件,因为是文件内容,所以不考虑搜索 目录。
find /tmp -type f -mtime -3 -name "*.sh"
 
(5). 根据文件大小搜索: -size
例如搜索 /tmp 下大于 100K sh 文件。
find /tmp -type f -size +100k -name '*.sh'
 
(6). 根据权限搜索: -perm
例如搜索 /tmp 下所有者具有可读可写可执行权限的 sh 文件。
find /tmp -type f -perm -0700 -name '*.sh'
 
(7). 搜索空文件
空文件可以是没有任何内容的普通文件,也可以是没有任何内容的目录。
例如搜索目录中没有文件的空目录。
find /tmp -type d -empty
 
(8). 搜索到文件后并删除
例如搜索到 /tmp 下的 ".tmp" 文件然后删除。
find /tmp -type f -name "*.tmp" -exec rm -rf '{}' \;


linux 在查找删除后,echo显示删了哪些东西
find /root/del -type -f -exec bash -c "echo {}; rm -f {}" \;
(9). 搜索指定日期范围的文件,例如搜索 /test 2017-06-03 2017-06-06 间修改过的文件
find /test -type f -newermt 2017-06-03 -a ! -newermt 2017-06-06

(10). 并行加速搜索

为了加速搜索,使用 xargs 的并行功能。例如, 搜索 "/" 下的所有 "Find.pm" 结尾的文件:   (涨知识)
ls --hide proc / | xargs -i -P 0 find /{} -type f -name "*Find.pm"
可以使用 time 命令看看 cpu 利用率:
/usr/bin/time bash -c 'ls --hide proc / | xargs -i -P 0 find /{} -type f -name 
"*Find.pm" | sort'

/perlapp/perl-5.26.2/cpan/Pod-Parser/lib/Pod/Find.pm
/perlapp/perl-5.26.2/ext/File-Find/lib/File/Find.pm
/usr/share/perl5/vendor_perl/Pod/Find.pm
/usr/share/perl5/File/Find.pm
0.04user 0.25system 0:00.19elapsed 149%CPU (0avgtext+0avgdata 5492maxresident)k
0inputs+0outputs (0major+12685minor)pagefaults 0swaps

(11). 获取搜索到文件的绝对路径

 
# 使用 bash 的波浪号扩展 ~+      (列出当前目录下的所有文件夹/文件)
find ~+

 

(12). 获取搜索到文件的文件名部分 (basename)
mkdir /tmp/test/test1
touch /tmp/test/test1/{x,y,z}.png
find /tmp/test -printf "%f\n"


======等价求basename
find ~+ -printf "%f\n" 和  find ~+ -exec basename {} \;
显示的结果是一样的
(13). 从结果中排除目录自身
find 搜索目录时,总是会将搜索路径自身也包含到搜索结果中。想办法排除它是必 须的。
排除的方法是,加上一个 -path 选项并取反, -path 的参数和 find 的搜索路径参数 必须一致。
 
find /tmp/test ! -path /tmp/test
find . ! -path .
 

 

 

END

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值