【改造Linux命令之rm - 刪除文件或目錄-】


用途說明

rm命令是常用的命令,用來刪除文件或目錄(remove files or directories)。它也是一個危險的命令,使用的時候要特別當心,尤其對於新手,否則整個系統就會毀在這個命令(比如在/下執行rm * -rf)。所以,我們在執行rm之前最好先確認一下在哪個目錄,到底要刪除什么東西,操作時保持清醒的頭腦。

在rm的手冊中寫道:用rm刪除文件還是有可能恢復文件內容的,如果要不可恢復的刪除文件,考慮使用shred命令。(_Warning_: If you use `rm' to remove a file, it is usually possible to recover the contents of that file.  If you want more assurance that the contents are truly unrecoverable, consider using `shred'.)至於具體怎么恢復rm刪除的文件,有文章專門討論了。但是不幸的是文件系統是ext2可恢復、ext3不可恢復,ext3的刪除機制是直接把 inode data 刪除了,所以造成 ext3 無法反刪除(ext3設計為無法恢復被刪除的文件)。不過,有些文章提到可以使用debugfs工具來嘗試恢復。無論如何,rm文件之后要想恢復還是很麻煩的。

為了避免一個命令毀掉整個系統、或者誤刪重要文件( 比如辛苦編寫的源程序文件),最好的方式不去刪除,而是采用改名或者移動文件位置來去掉不需要的文件(mv命令)。還有就是,在進行一些關鍵操作時,先對數據進行備份,尤其是異機備份、異地備份。

 

常用參數

格式:rm file

刪除文件file,系統會先詢問是否刪除。

 

格式:rm -f file

強行刪除file,系統不再提示。

 

格式:rm -rf dir

強行刪除目錄dir下的所有文件、子目錄下的所有文件和目錄、刪除dir本身。

 

格式:rm -f *.LOG*

刪除日志文件。

 

使用示例

示例一 rm的真實身份

[root@jfht ~]# type -a rm 
rm is aliased to `rm -i'
rm is /bin/rm
[root@jfht ~]#

 

示例二 回收站嘗試

下面的操作過程模擬了回收站的效果,即刪除文件的時候只是把文件放到一個臨時目錄中,這樣在需要的時候還可以恢復過來。

[root@jfht ~]# myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; } 
[root@jfht ~]# alias rm='myrm' 
[root@jfht ~]# touch 1.txt 2.txt 3.txt 
[root@jfht ~]# ls [123].txt           
1.txt  2.txt  3.txt
[root@jfht ~]# rm [123].txt 
moved to /tmp/20110401214056 ok
[root@jfht ~]# ls /tmp/20110401214056/ 
1.txt  2.txt  3.txt
[root@jfht ~]#

 

示例三 刪除以-開頭的文件

[root@jfht ~]# touch -- -f 
[root@jfht ~]# ls -- -f 
-f
[root@jfht ~]# rm -- -f 
moved to /tmp/20110401214709 ok

也可以使用下面的操作步驟。

[root@jfht ~]# touch ./-f 
[root@jfht ~]# ls ./-f 
./-f
[root@jfht ~]# rm ./-f 
moved to /tmp/20110401214859 ok
[root@jfht ~]#

 

問題思考

相關資料

【1】Linux寶庫 Linux指令篇:檔案目錄管理--rm
http://doc.linuxpk.com/206.html
【2】Linux公社 Linux下用rm刪除的文件的恢復方法
http://www.linuxidc.com/Linux/2008-08/14744.htm
【3】maxpassion的個人空間 Linux恢復誤刪除文件(轉載)
http://www.cnttr.com/49230/viewspace_6093.html
【4】52CTO Linux ext3文件系統 rm恢復
http://os.51cto.com/art/200908/141407.htm

 

 

我使用過的Linux命令系列總目錄

我使用過的Linux命令系列總目錄

本文鏈接: http://codingstandards.iteye.com/blog/786653   (轉載請注明出處)

 

概述

關於命令類型划分

本表中列出了我窮盡了我所有的記憶整理出來的Linux命令,其中關於外部命令、關鍵字或內建命令的划分,不一定正確。有很多命令,既是內建命令也可能是外部命令,為啥?Bash為了更高效率的執行命令和腳本,把很多外部命令以內建命令的方式實現了。我們使用type這個命令就可以知道一個命令的類型了,如下所示:

[root@jfht ~]# type -a type 
type is a shell builtin     <== builtin就是指內建命令 
[root@jfht ~]# type -a pwd 
pwd is a shell builtin
pwd is /bin/pwd           <== 此乃外部命令 
[root@jfht ~]# type -a ls 
ls is aliased to `ls --color=tty'     <== 此乃別名 
ls is /bin/ls
[root@jfht ~]# type -a for 
for is a shell keyword           <== 此乃Shell關鍵字 
[root@jfht ~]#

關於本系列文章

首先,這只是我個人十多年來使用Unix/Linux的經驗的總結。我經常感覺自己在Linux的使用和維護方面好像知道得不少了,但是發現沉下心來總結的時候,發現還是很弱的。其實很多東西只是知道個名字,知道點皮毛,更談不上深入的理解。在寫這些文章的時候,我參考了相同類型的文章,通常是Google搜索的前幾頁結果,我都會看一下,發現總能得到一些新的知識、新的啟發,感覺到學無止境,厲害的角色很多。

其次,這些文章並非某個命令的手冊頁,只是我平時使用它們的時候的一些慣用法,或者寫Bash腳本的時候是怎么用的。我認為,對於這些Linux命令,不可能、也沒有必要把所有的參數記住,只需要把常用的記住,然后使用man去查看手冊頁。與其知道每個具體的東西,不如知道在哪里去找它。這一點,我深深的體會到Unix/Linux在文檔方面的完善,真正是一個適合開發者使用的平台。

再次,我所寫的東西並非完全正確、有可能似是而非,但我盡可能多去實際的去執行一下它們。我非常歡迎各位熱愛Linux的朋友們一起參與討論,特別是我每篇文章都會有一個“問題思考”部分,其實有些問題也是我本人不那么確定或者正在尋找答案的問題。在此,我要感謝各位,浪費了你們寶貴的時間來看這些質量不怎么高的文章。

命令字母順序表

這個一個浩大而艱巨的任務,我非常擔心能不能完成它。我想說,世界上最難得兩個字:堅持!

 

首字母

外部命令(某些也可能是內建命令)

關鍵字或內建命令

內置環境變量

A

ac   在線時間統計

adduser   添加用戶賬號

ant 強大的Java開發構建工具

apropos   根據關鍵字搜索命令

ar

arp 操作arp緩存

at 在指定時間執行一次任務

autofork

awk

alias

 

B

bash

base64 用base64編解碼

basename 去掉文件名的目錄和后綴

bc   浮點數計算器、進制轉換

bg

break

 

 

 

C

cal 顯示日歷

cat 連接文件或標准輸入並打印

cc

chgrp

chkconfig 查詢/修改系統服務的運行級別

chmod

chown

chroot

clear 清除終端屏幕,不是cls

comm

complete 強勁的bash參數補全功能

compress

cp   復制文件

cpio

cronolog     (2009.09.22)

crontab

curl 強大的網絡傳輸工具

cut

cvs

case 多分支判斷語句

cd   更改當前工作目錄

continue

 

CDPATH

 

 

 

D

date

dd  (2009.09.19)

df   查看磁盤空間占用情況

diff

dir

dirname 截取給定路徑的目錄部分

dmesg 查看開機信息/打印或控制內核環形緩沖區

dmidecode   查看硬件信息

dos2unix 把DOS格式的文本文件轉換成Unix格式

dot 繪制DOT語言腳本描述的圖形

doxygen

du   查看文件的磁盤空間占用情況

declare

dirs (2010.03.15)

do

done

 

 

 

E

echo   顯示文本、打印信息

egrep

env 顯示當前用戶的環境變量

eval

exec

expr

elif

else

esac

exit 退出當前shell

export

 

 

 

 

 

F

false

fgrep

file 檢測並顯示文件類型

find

free 顯示內存的使用情況

ftp

fg

fi

for   Bash中的for循環

 

 

 

 

G

gawk

gdb

gcc

grep

groupadd   (2009.09.19)

groupdel   (2009.09.19)

groupmod   (2009.09.19)

groups     (2009.09.19)

gunzip

gzip

g++

 

 

H

halt 停止系統運行,但不關閉電源

head

help 顯示Bash內建命令的幫助信息

hexdump “十六”進制查看器

hostname 顯示或設置主機名

hwclock 查詢和設置硬件時鍾

help

history

HISTTIMEFORMAT

HISTSIZE

HISTFILESIZE

HISTFILE

HISTCONTROL

HISTIGNORE

I

iconv 字符編碼轉換工具

ij

ifconfig

iptables

iptables-save      (2009.09.19)

iptables-restore   (2009.09.19)

info

insmod

if Bash中的條件判斷

in

 

 

J

java

javac

jar

jps     (2009.09.19)

jstat   (2009.09.19)

jmap    (2009.09.19)

jinfo   (2009.09.19)

javadoc

jobs   顯示當前終端關聯的后台任務情況

join   根據關鍵字合並數據文件

 

 

K

kill 終止進程/發送信號

killall 殺死指定名字的進程

 

 

L

ls 顯示文件目錄列表

less

lsof

locate

ln

lsmod

last

ld

ll

lsb_release 查看當前系統的發行版信息

 

 

M

more

mv 文件或目錄改名、移動位置

man 顯示在線手冊頁

mail

MySQL MySQL客戶端命令行工具

mkdir

make 強大的編譯工具

mysqldump

mount

mysqladmin  (2009.09.27)

 

 

N

nano 比vi簡單易用的文本編輯器

nohup 執行其他命令,並且忽略SIGHUP信號

netstat

nslookup

nice  (2010.03.15)

nginx (2010.09.29)

 

 

O

openssl    (2009.09.19)

 

OLDPWD

P

ps 顯示當前正在運行的進程列表

pstree 以樹狀圖顯示進程間的關系

ping

pwd 顯示當前工作目錄

perl

php

pidof 找出正在運行程序的進程PID

printf     (2009.09.22)

popd (2010.03.15)

pushd (2010.03.15)

PATH

PS1

PS2

PS3

PS4

PROMPT_COMMAND

PWD

Q

quota

 

 

R

rm 刪除文件或目錄

rmdir

read

reset 終端屏幕混亂的終結者

rmmod

rar

route

rpm

rpmbuild

rlwrap   (2009.09.19)

rsync (2010.03.08)

renice (2010.03.15)

rz 批量上傳文件,簡單易用

return

RANDOM

S

ssh Secure Shell 客戶端

sftp 安全文件傳輸命令行工具

su

setsid

sort

screen 虛擬終端屏幕管理器

sed

setup

service 系統服務管理

sleep

set

sqlplus

sox

sh

sysctl

sync 強制將內存中的文件緩沖內容寫到磁盤

strings

stty   顯示和修改終端行設置

stat   顯示文件或文件系統狀態

ssh-keygen (2010.03.15)

ssh-copy-id (2010.03.15)

sar (2010.03.15)

sadc (2010.03.15)

sa1 (2010.03.15)

sa2 (2010.03.15)

swig 把C/C++代碼嵌入Java等語言的開發工具

sz 下載文件,無需ftp/sftp

shift

shopt (2010.03.15)

select (2010.03.15)

set (2010.03.15)

source 在當前shell環境中執行指定文件中的命令

 

T

time 測定一個命令的資源使用情況

telnet 基於TELNET協議的遠程登錄工具

tac 與cat相反的命令

tar 解壓縮工具

top 實時監視Linux任務

tty 打印標准輸入的文件名稱

tree 以樹狀圖列出目錄的內容

tracert

test

tail 輸出文件尾部/動態監視文件尾部

tailf 跟蹤日志文件/更好的tail -f版本

touch 創建文件或修改文件時間

true 啥也不做,設置退出碼為0

tee 重定向輸出到多個文件

tr

tsort 拓撲排序

tzselect 選擇時區

type 顯示命令的類型

then

trap 在腳本中處理信號

 

 

 

 

U

uptime 顯示系統運行時間

uname 打印系統信息

uniq

unzip 解壓zip文件

uncompress 解壓.Z文件

unrar 解壓rar文件

updatedb

usleep

useradd 添加用戶賬號

userdel

usermod

umount

unix2dos (2009.09.19)

ulimit 在shell進程中限制系統資源

umask

until

unset

 

 

 

 

V

vi

vim (2010.09.28)

view

vmstat

valgrind  (2010.09.29)

 

 

W

w 顯示誰登錄了系統及在做什么

who 查看當前登錄用戶

whereis 查找命令的位置

wc

wget

wait

whatis ( 2009-10-18 )

while Bash中的while循環

 

X

xargs

 

 

y

yes 重復輸出字符串

 

 

Z

zip

 

 

^

^Z  (2010.03.15)

^R  (2010.03.15)

 

 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM