文件查找:
- 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
- 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:
- 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,看一下
- 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权限的目录,这个操作还是很有用的。
- 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+
总结一下:
-
如果查找可执行文件,用which
-
locate查找文件速度非常快,但是需要更新db,如果没有更新,可能查不到最新的文件
-
find 很强,但是查找速度慢
-
如果要查找文件中的内容,用grep
文件压缩及解压
-
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