文件查找与解压缩

文件查找:

  1. which 查找可以执行文件,只搜索$PATH里的目录

$ which ls /bin/ls which只搜索$PATH里的目录,如果搜索当前目录的文件是没有任何结果的

$ ls -l 总用量 0 -rw-rw-r– 1 huanghao huanghao 0 3月 1 12:24 a.txt $ which a.txt

  1. whereis 与which差不多,只不过它会查找帮助文件,还会查找库文件

$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz

$ whereis libip6tc.so.0 libip6tc.so: /lib/libip6tc.so.0

#搜索一个文件,不管文件存在不存在,返回结果永远是不带扩展名的文件名+ : $ whereis b.txt
b:

  1. slocate, locate

这两个放在一起说,是因为slocate实际上软链接到了locate,它俩是一样的,ubuntu里是mlocate

locate passwd

/etc/passwd

/etc/passwd-

/etc/cron.daily/passwd

/etc/init/passwd.conf

/etc/pam.d/chpasswd

/etc/pam.d/passwd

/etc/security/opasswd

/home/huangxm/passwd

/home/huangxm/passwd-

/home/huangxm/cron.daily/passwd

/home/huangxm/init/passwd.conf

它把所有包含passwd的文件都查找出来了,我们新建一个文件newfile.txt,查找一下

locate newfile.txt

却没有返回任何结果,可以newfile.txt明明存在,但它是刚刚创建的。

实际上locate并不是在文件系统里查找文件,而是在它的数据库/var/lib/slocate/slocate.db中查,ubuntu 是 /vra/lib/mlocate/mlocate.db

接下来更新一下该数据库

updatedb

locate newfile.txt /home/huanghao/test/newfile.txt找到了,所以如果数据库不更新,

locate是无法查找到新创建的文件的;但是总不能每次使用都更新db吧。 所以linux中每天有计划任务来更新db,看一下

  1. find 这个就是踏踏实实的从硬盘查找文件了

find newfile.txt 在当前目录中查找

find / -name a.txt 从/开始查找文件a.txt

find / -name “newfile‘” #从/开始查找所有包含newfile的文件

find / -name “newfile‘” -ls 查找并列出文件属性

find / -name “newfile‘” -exec file {} ; #查找并执行file命令 {}的意思是将查找的结果放进去

find / -name “newfile‘” -ok rm {} ; #查找并删除,-ok是提示需要交互, -exec是不提示,直接执行

find /home -user shrek -ls #查找属于用户shrek的文件并列出来

find /home -user shrek -a -group shrek -a -type d -ls #查找属于用户shrek并且属于组shrek的目录 -a是and的意思

#其它参数 -user -group -type -perm 权限 -size 大小 -mtime 时间

详细看一下权限查找

find / -perm +777 -type d -ls 权限是用9位二进制数表示的,+777 的意思是指9位中任何一位有1的权限,通俗点说就是任意权限 find / -perm -777 -type d –ls -777 的意思是所有位都是1,即查找777权限的目录,这个操作还是很有用的。

  1. grep 这个是查找文件内容的

grep root /etc/passwd #在passwd中查找包含root的行

root:x:0:0:root:/root:/bin/bash

grep -R root /etc #在/etc下所有文件及子文件中查找

/etc/anacrontab:HOME=/root

/etc/anacrontab:LOGNAME=root

/etc/cron.weekly/man-db: chown man:root /var/cache/man || true

/etc/shadow:root:$6$TXA2sjeg$/yQGd91.Fq0kF6RNkT.sHkCzdwGs8yU4Ucz

EnVAO.Td7sBweenU.R0Gcn2DBwXhos/n6tircXjxWkl.3voaLA.:16847:0:99999:7:::

上面递归查找时显示了很多内容,如果我们只想显示包含查找内容的文件

,可加l参数

grep -R -l root /etc

/etc/anacrontab

/etc/cron.weekly/man-db

/etc/shadow

/etc/sysctl.d/10-kernel-hardening.conf

/etc/passwd

/etc/group

/etc/cron.daily/man-db

/etc/cron.daily/apt

/etc/grub.d/20_linux_xen

/etc/grub.d/30_os-prober

/etc/grub.d/20_memtest86+

总结一下:

  1. 如果查找可执行文件,用which

  2. locate查找文件速度非常快,但是需要更新db,如果没有更新,可能查不到最新的文件

  3. find 很强,但是查找速度慢

  4. 如果要查找文件中的内容,用grep

文件压缩及解压

  1. gzip 压缩成.gz, 原文件会被删除 , 压缩率较高

    gunzip 解压

    gzip –d 和上面一样,解压

tar命令

tar本来是打包命令,是将一系列文件及文件夹打包,现在tar命令也可以用来压缩,先看一下有哪些参数

-c 创建打包文件

-v 将打包过程输出

-x 解包

-r 将文件添加到已存在的tar包中

-t 查看包内容

-z 压缩

$ tar cvf a.tar .

./ ./a.txt tar: ./a.tar: 文件是归档文件;未输出 ./newfile.txt 后面的.是指当前目录, 将当前目录打包成a.tar,并存放在当前目录中

$ tar cvf b.tar ~/test

tar: 从成员名中删除开头的“/”

/home/god/test/

/home/god/test/a.txt

/home/god/test/a.tar

/home/god/test/newfile.txt

$ tar -tvf b.tar

drwxrwxr-x god/god 0 home/god/test/

-rw-rw-r– god/god home/god/test/a.txt

-rw-rw-r– god/god 10240

home/huanghao/test/a.tar

-rw-rw-r– god/god

home/huanghao/test/newfile.txt

这里压缩包的内容里文件都带上了路径,注意这两种方式的区别。

当然也可以将不同目录的文件打包到一个文件中:

$ tar cvf b.tar a.txt /etc/passwd

a.txt tar: 从成员名中删除开头的“/” /etc/passwd 解压:

$ tar xvf a.tar #解压到当前文件夹 ./ ./a.txt ./newfile.txt $ tar xvf a.tar -C ./a #解压到当前目录的目录a中 ./ ./a.txt ./newfile.txt

打包并压缩’

$ tar cvfz c.tar.gz /etc/passwd a.txt #也可以打包压缩不同目录的文件 tar: 从成员名中删除开头的“/” /etc/passwd a.txt 同样解压也可以用-C解压到其它目录中

$ tar xvfz c.tar.gz -C ./a etc/passwd a.txt

linux tar打包

例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar

[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!

[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩

[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩

特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。

如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~

如果加 j 参数,则以 .tar.bz2 来作为附档名啊~

上述指令在执行的时候,会显示一个警告讯息:

『tar: Removing leading `/” from member names』那是关于绝对路径的特殊设定。

例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件? [root@linux ~]# tar -ztvf /tmp/etc.tar.gz

由于我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时, 就得要加上 z 这个参数了!这很重要的

例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下

[root@linux ~]# cd /usr/local/src

[root@linux src]# tar -zxvf /tmp/etc.tar.gz

在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说, 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,

则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc

则会发现,该目录下的文件属性与 /etc/ 可能会有所不同

例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已

[root@linux ~]# cd /tmp

[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd

我可以透过 tar -ztvf 来查阅 tarfile

内的文件名称,如果单只要一个文件,

就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!

例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!

[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc

这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!

例六:在 /home 当中,比 2005/06/01 新的文件才备份

[root@linux ~]# tar -N ‘2005/06/01′ -zcvf home.tar.gz /home

例七:我要备份 /home, /etc ,但不要 /home/dmtsai [root@linux ~]# tar –exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件! [root@linux ~]# cd /tmp [root@linux tmp]# tar -cvf – /etc | tar -xvf –

这个动作有点像是 cp -r /etc /tmp 依旧是有其有用途的!

要注意的地方在於输出档变成 – 而输入档也变成 – ,又有一个 | 存在~

这分别代表 standard output, standard input 与管线命令

.tar

解包:tar xvf FileName.tar

打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)

.gz

解压1:gunzip FileName.gz

解压2:gzip -d FileName.gz

压缩:gzip FileName

.tar.gz 和 .tgz

解压:tar zxvf FileName.tar.gz

压缩:tar zcvf FileName.tar.gz DirName

.bz2

解压1:bzip2 -d FileName.bz2

解压2:bunzip2 FileName.bz2

压缩: bzip2 -z FileName

.tar.bz2

解压:tar jxvf FileName.tar.bz2 或tar –bzip xvf FileName.tar.bz2

压缩:tar jcvf FileName.tar.bz2 DirName

.bz

解压1:bzip2 -d FileName.bz

解压2:bunzip2 FileName.bz

压缩:未知

.tar.bz

解压:tar jxvf FileName.tar.bz

压缩:未知

.Z

解压:uncompress FileName.Z

压缩:compress FileName

.tar.Z

解压:tar Zxvf FileName.tar.Z

压缩:tar Zcvf FileName.tar.Z DirName

.zip

解压:unzip FileName.zip

压缩:zip FileName.zip DirName

压缩一个目录使用 -r 参数,-r 递归。例: $ zip -r FileName.zip DirName

.rar

解压:rar x FileName.rar

压缩:rar a FileName.rar DirName

rar请到:http://www.rarsoft.com/download.htm 下载!

解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以)

原创文章,作者:charlest,如若转载,请注明出处:http://www.178linux.com/83672

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code