文件查找:
- 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.www58058.com/83672