文件查找:
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
2. 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:
3. 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,看一下
# pwd /etc/cron.daily # ll mlocate -rwxr-xr-x 1 root root 435 6月 20 2013 mlocate*
在每天的任務中有一個mlocate*的任務,打開看一下
#! /bin/bash set -e [ -x /usr/bin/updatedb.mlocate ] || exit 0 if which on_ac_power >/dev/null 2>&1; then ON_BATTERY=0 on_ac_power >/dev/null 2>&1 || ON_BATTERY=$? if [ "$ON_BATTERY" -eq 1 ]; then exit 0 fi fi # See ionice(1) if [ -x /usr/bin/ionice ] && /usr/bin/ionice -c3 true 2>/dev/null; then IONICE="/usr/bin/ionice -c3" fi flock --nonblock /run/mlocate.daily.lock $IONICE /usr/bin/updatedb.mlocate ~
先不管能不能看懂,最后有updatedb的操作。
4. 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 時間 -a and -o or
詳細看一下權限查找
# find / -perm +777 -type d -ls
權限是用9位二進制數表示的,+777 的意思是指9位中任何一位有1的權限,通俗點說就是任意權限
# find / -perm -777 -type d –ls
5. 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.sHkCzdwGs8yU4UczEnVAO.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+ /etc/grub.d/05_debian_theme
總結一下:
1. 如果查找可執行文件,用which
2. locate查找文件速度非常快,但是需要更新db,如果沒有更新,可能查不到最新的文件
3. find 很強,但是查找速度慢
4. 如果要查找文件中的內容,用grep
文件壓縮及解壓
1. gzip 壓縮成.gz, 原文件會被刪除 , 壓縮率較高
gunzip 解壓
gzip –d 和上面一樣,解壓
$ ls -l 總用量 0 -rw-rw-r-- 1 huanghao huanghao 0 3月 1 12:24 a.txt -rw-rw-r-- 1 huanghao huanghao 0 3月 1 12:30 newfile.txt $ gzip a.txtt$ ls -l 總用量 4 -rw-rw-r-- 1 huanghao huanghao 26 3月 1 12:24 a.txt.gz -rw-rw-r-- 1 huanghao huanghao 0 3月 1 12:30 newfile.txt
$ gzip -d a.txt.gz $ ll 總用量 8 drwxrwxr-x 2 huanghao huanghao 4096 3月 1 13:55 ./ drwxr-xr-x 19 huanghao huanghao 4096 3月 1 12:24 ../ -rw-rw-r-- 1 huanghao huanghao 0 3月 1 12:24 a.txt -rw-rw-r-- 1 huanghao huanghao 0 3月 1 12:30 newfile.txt
bzip2 bunzip2 bunzip2 –d 壓縮率比gzip高
$ bzip2 a.txt $ ls -l 總用量 4 -rw-rw-r-- 1 huanghao huanghao 14 3月 1 12:24 a.txt.bz2 -rw-rw-r-- 1 huanghao huanghao 0 3月 1 12:30 newfile.txt $ bzip2 -d a.txt.bz2 $ ls -l 總用量 0 -rw-rw-r-- 1 huanghao huanghao 0 3月 1 12:24 a.txt -rw-rw-r-- 1 huanghao huanghao 0 3月 1 12:30 newfile.txt
tar命令
tar本來是打包命令,是將一系列文件及文件夾打包,現在tar命令也可以用來壓縮,先看一下有哪些參數
| -c | 創建打包文件 |
| -v | 將打包過程輸出 |
| -x | 解包 |
| -r | 將文件添加到已存在的tar包中 |
| -t | 查看包內容 |
| -z | 壓縮 |
$ tar cvf a.tar . ./ ./a.txt tar: ./a.tar: 文件是歸檔文件;未輸出 ./newfile.txt
后面的.是指當前目錄, 將當前目錄打包成a.tar,並存放在當前目錄中
$ ls -l 總用量 12 -rw-rw-r-- 1 huanghao huanghao 10240 3月 1 14:00 a.tar #這個是打包文件 -rw-rw-r-- 1 huanghao huanghao 0 3月 1 12:24 a.txt -rw-rw-r-- 1 huanghao huanghao 0 3月 1 12:30 newfile.txt
來看一下打包文件的內容
$ tar tvf a.tar drwxrwxr-x huanghao/huanghao 0 2016-03-01 14:00 ./ -rw-rw-r-- huanghao/huanghao 0 2016-03-01 12:24 ./a.txt -rw-rw-r-- huanghao/huanghao 0 2016-03-01 12:30 ./newfile.txt
$ tar cvf b.tar ~/test tar: 從成員名中刪除開頭的“/” /home/huanghao/test/ /home/huanghao/test/a.txt /home/huanghao/test/a.tar /home/huanghao/test/newfile.txt
$ tar -tvf b.tar drwxrwxr-x huanghao/huanghao 0 2016-03-01 14:00 home/huanghao/test/ -rw-rw-r-- huanghao/huanghao 0 2016-03-01 12:24 home/huanghao/test/a.txt -rw-rw-r-- huanghao/huanghao 10240 2016-03-01 14:00 home/huanghao/test/a.tar -rw-rw-r-- huanghao/huanghao 0 2016-03-01 12:30 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
