通常,要在 Linux 终端删除一个文件[1],我们使用 rm 命令(删除文件)、shred 命令(安全删除文件)、wipe 命令(安全擦除文件)或者 secure-deletion 工具包(一个安全文件删除工具集合)。
成都创新互联公司长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为遵化企业提供专业的网站制作、成都做网站,遵化网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
我们可以使用上述任意的工具来处理相对较小的文件。如果我们想要删除超大的文件/文件夹,比如大概 100-200GB,在删除文件(I/O 调度)所花费的时间以及 RAM 占用量方面,就没有你想的那么简单。
在本教程中,我们会解释如何在 Linux 中有效率并可靠地删除大文件/文件夹。
建议阅读: 5 个在 Linux 中清空或者删除大文件的方法[2]
我们的主要目标是使用一种不会在删除大文件时拖慢系统的技术,合理地占用 I/O。我们可以用 ionice 命令实现这个目标。
在Linux 中使用 ionice 命令删除超大(200GB)文件
ionice 是一个可以对另一个程序设置或获取 I/O 调度级别和优先级的有用程序。如果没有给出参数或者只有 -p 参数,那么 ionice 将会查询该进程的当前的 I/O 调度级别以及优先级。
如果我们给出命令名称,如 rm 命令,它将使用给定的参数运行此命令。要获取或设置调度参数,请指定[进程的 PID],如下:
# ionice -p PID
要指定名字或者调度的数字,使用(0 表示无、1 表示实时、2 表示尽力、3 表示空闲)下面的命令。
以下命令表示 rm 会属于空闲 I/O 级别,并且只在其他进程不使用的时候使用 I/O:
---- Deleting Huge Files in Linux -----# ionice -c 3 rm /var/logs/syslog# ionice -c 3 rm -rf /var/log/apache
如果系统中没有很多空闲时间,那么我们希望使用尽力调度级别,并且使用低优先级:
# ionice -c 2 -n 6 rm /var/logs/syslog# ionice -c 2 -n 6 rm -rf /var/log/apache
注意:要使用安全的方法删除大文件,我们可以使用先前提到的 shred、wipe 以及 secure-deletion 工具包中的不同工具,而不是 rm 命令。
作为linux服务器管理员,经常要使用ssh登陆到远程linux机器上做一些耗时的操作。也许你遇到过使用telnet或SSH远程登录linux,运行一些程序。如果这些程序需要运行很长时间(几个小时),而程序运行过程中出现网络故障,或者客户机故障,这时候客户机与远程服务器的链接将终端,并且远程服务器没有正常结束的命令将被迫终止。又比如你SSH到主机上后,开始批量的scp命令,如果这个ssh线程断线了,scp进程就中断了。在远程服务器上正在运行某些耗时的作业,但是工作还没做完快要下班了,退出的话就会中断操作了,如何才好呢?我们利用screen命令可以很好的解决这个问题。实现在断开SSH的情况下,在服务器上继续执行程序。那什么是screen命令?Screen被称之为一个全屏窗口管理器,用他可以轻松在一个物理终端上获得多个虚拟终端的效果。Screen功能说明:简单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器,这意味着你能够使用一个单一的终端窗口运行多终端的应用。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。Screen命令语法:screen [-AmRvx -ls -wipe][-d 作业名称][-h 行数][-r 作业名称][-s ][-S 作业名称]Screen命令参数:-A -[rR] 将所有的视窗都调整为目前终端机的大小。-c filename 用指定的filename文件替代screen的配置文件’.screenrc’.-d [pid.tty.host] 断开screen进程(使用该命令时,screen的状态一定要是Attached,也就是说有用户连在screen里)。一般进程的名字是以pid.tty.host这种形式表示(用screen -list命令可以看出状态)。-D [pid.tty.host] 与-d命令实现一样的功能,区别就是如果执行成功,会踢掉原来在screen里的用户并让他logout。-h 行数 指定视窗的缓冲区行数。-ls或–list 显示目前所有的screen作业。-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。-p number or name 预先选择一个窗口。-r [pid.tty.host] 恢复离线的screen进程,如果有多个断开的进程,需要指定[pid.tty.host]-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。-s shell 指定建立新视窗时,所要执行的shell。-S 作业名称 指定screen作业的名称。(用来替代[pid.tty.host]的命名方式,可以简化操作).-v 显示版本信息。-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。-x 恢复之前离线的screen作业。Screen命令的常规用法:screen -d -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户再连接。screen -D -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户并让他logout再连接screen -ls或者-list:显示存在的screen进程,常用命令screen -m:如果在一个Screen进程里,用快捷键crtl+a c或者直接打screen可以创建一个新窗口,screen -m可以新建一个screen进程。screen -dm:新建一个screen,并默认是detached模式,也就是建好之后不会连上去。screen -p number or name:预先选择一个窗口。Screen实现后台运行程序的简单步骤:1 要进行某项操作时,先使用命令创建一个Screen:代码如下:[linux@user~]$ screen -S test12接着就可以在里面进行操作了,如果你的任务还没完成就要走开的话,使用命令保留Screen:代码如下:[linux@user~]$ Ctrl+a+d #按Ctrl+a,然后再按d即可保留Screen[detached] #这时会显示出这个提示,说明已经保留好Screen了如果你工作完成的话,就直接输入:代码如下:[linux@user~]$ exit #这样就表示成功退出了[screen is terminating]3 如果你上一次保留了Screen,可以使用命令查看:代码如下:[linux@user~]$ screen -lsThere is a screen on:9649.test1 (Detached)恢复Screen,使用命令:代码如下:[linux@user~]$ screen -r test1 (or 9649)Screen命令中用到的快捷键Ctrl+a c :创建窗口Ctrl+a w :窗口列表Ctrl+a n :下一个窗口Ctrl+a p :上一个窗口Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换Ctrl+a K(大写) :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)exit :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)Ctrl+a d :退出当前终端,返回加载screen前的shell命令状态多窗口screen,像许多的窗口管理器一样,能支持多窗口。这个功能在处理多个任务且同时没有打开新的会话时 很有用。作为一个系统管理员,我常常要同时开四五个SSH会话。在每个shell下,我可能要处理两三个任务。不使用screen的话,需要15个SSH 会话,15次登录,15个窗口等等。使用screen,每个系统都分配到一个单独的会话中,我通过screen来管理系统上不同的作业。要打开新的窗口,只需要使用“Ctrl-A”“c”。创建的新的窗口会显示一个默认的命令提示符。例如,我可以运行top命令后再打开一个新的窗口来做其它的工作。Top继续留在那运行!可以亲身实验一下,启动screen并运行top。(注:为了节省空间我截断了多个屏幕。)启动top代码如下:Mem: 506028K av, 500596K used, 5432K free,0K shrd, 11752K buffSwap: 1020116K av, 53320K used, 966796K free393660K cached p PID USER PRI NI SIZE RSS SHARE STAT %CPU %ME6538 root 25 0 1892 1892 596 R 49.1 0.36614 root 16 0 1544 1544 668 S 28.3 0.37198 admin 15 0 1108 1104 828 R 5.6 0.2现在可以通过“Ctrl-A”“c”来打开一个新窗口代码如下:[admin@ensim admin]$To get back to top, use "Ctrl-A "n"Mem: 506028K av, 500588K used, 5440K free,0K shrd, 11960K buffSwap: 1020116K av, 53320K used, 966796K free392220K cached p PID USER PRI NI SIZE RSS SHARE STAT %CPU %ME6538 root 25 0 1892 1892 596 R 48.3 0.36614 root 15 0 1544 1544 668 S 30.7 0.3你可以创建多个窗口然后通过“Ctrl-A”“n”切换到下一个窗口,或者使用“Ctrl-A”“p”返回上一个窗口。当你在其它窗口工作时,其它窗口的每个程序都会保持运行。退出screen有两种方式退出screen。第一种和登出一个shell一样,你可以通过“Ctrl-A”“K”或者“exit”来终止一个窗口。这样当前的窗口会被关闭,如果你打开了多个窗口,你就会直接转到其余中的一个,而如果是仅有的一个窗口时,你就退出了screen。另外一种退出screen的方式是分离窗口。这种方式只是简单地关闭了窗口但进程仍运行着。如果你有确定要长时间执行的进程,还需要关闭SSH程序时,你便可以使用“Ctrl-A”“d”分离窗口。这会使你回到shell中。所有的screen窗口都待在那里,你可以稍后重新接管它们。(译者注:这很像我们实际中的最小化窗口和程序后台运行)接管会话假设你正用着screen花了很长时间编译着一个程序,突然间你的连接断开了。请不用担心,screen会保存你的编译进度。重新登录你的操作系统后使用screen列表工具查看有哪些会话正在运行:代码如下:[root@gigan root]# screen -lsThere are screens on:31619.ttyp2.gigan (Detached)4731.ttyp2.gigan (Detached)2 Sockets in /tmp/screens/S-root.在这里,我有两个不同的screen会话。要需要重新接管其中一个,使用恢复窗口的命令:代码如下:[root@gigan root]#screen -r 31619.ttyp2.gigan只需要使用 -r 选项再接会话的名,现在你便可以重新回到刚才的屏幕。令人欣喜的是,你还可以在任何地方重新接管。不论在办公室还是其它客户端上,你都可以使用screen来启动一项工作然后退出。多窗口screen,像许多的窗口管理器一样,能支持多窗口。这个功能在处理多个任务且同时没有打开新的会话时 很有用。作为一个系统管理员,我常常要同时开四五个SSH会话。在每个shell下,我可能要处理两三个任务。不使用screen的话,需要15个SSH 会话,15次登录,15个窗口等等。使用screen,每个系统都分配到一个单独的会话中,我通过screen来管理系统上不同的作业。要打开新的窗口,只需要使用“Ctrl-A”“c”。创建的新的窗口会显示一个默认的命令提示符。例如,我可以运行top命令后再打开一个新的窗口来做其它的工作。Top继续留在那运行!可以亲身实验一下,启动screen并运行top。(注:为了节省空间我截断了多个屏幕。)启动top代码如下:Mem: 506028K av, 500596K used, 5432K free,0K shrd, 11752K buffSwap: 1020116K av, 53320K used, 966796K free393660K cached p PID USER PRI NI SIZE RSS SHARE STAT %CPU %ME6538 root 25 0 1892 1892 596 R 49.1 0.36614 root 16 0 1544 1544 668 S 28.3 0.37198 admin 15 0 1108 1104 828 R 5.6 0.2现在可以通过“Ctrl-A”“c”来打开一个新窗口代码如下:[admin@ensim admin]$To get back to top, use "Ctrl-A "n"Mem: 506028K av, 500588K used, 5440K free,0K shrd, 11960K buffSwap: 1020116K av, 53320K used, 966796K free392220K cached p PID USER PRI NI SIZE RSS SHARE STAT %CPU %ME6538 root 25 0 1892 1892 596 R 48.3 0.36614 root 15 0 1544 1544 668 S 30.7 0.3你可以创建多个窗口然后通过“Ctrl-A”“n”切换到下一个窗口,或者使用“Ctrl-A”“p”返回上一个窗口。当你在其它窗口工作时,其它窗口的每个程序都会保持运行。退出screen有两种方式退出screen。第一种和登出一个shell一样,你可以通过“Ctrl-A”“K”或者“exit”来终止一个窗口。这样当前的窗口会被关闭,如果你打开了多个窗口,你就会直接转到其余中的一个,而如果是仅有的一个窗口时,你就退出了screen。另外一种退出screen的方式是分离窗口。这种方式只是简单地关闭了窗口但进程仍运行着。如果你有确定要长时间执行的进程,还需要关闭SSH程序时,你便可以使用“Ctrl-A”“d”分离窗口。这会使你回到shell中。所有的screen窗口都待在那里,你可以稍后重新接管它们。(译者注:这很像我们实际中的最小化窗口和程序后台运行)接管会话假设你正用着screen花了很长时间编译着一个程序,突然间你的连接断开了。请不用担心,screen会保存你的编译进度。重新登录你的操作系统后使用screen列表工具查看有哪些会话正在运行:代码如下:[root@gigan root]# screen -lsThere are screens on:31619.ttyp2.gigan (Detached)4731.ttyp2.gigan (Detached)2 Sockets in /tmp/screens/S-root.在这里,我有两个不同的screen会话。要需要重新接管其中一个,使用恢复窗口的命令:代码如下:[root@gigan root]#screen -r 31619.ttyp2.gigan只需要使用 -r 选项再接会话的名,现在你便可以重新回到刚才的屏幕。令人欣喜的是,你还可以在任何地方重新接管。不论在办公室还是其它客户端上,你都可以使用screen来启动一项工作然后退出。
1. nohup 命令
nohup命令的功能就和它的名字一样,no hup,忽略hup信号,不挂断进程,进程仍然属于当前会话(终端关闭后,进程会变成孤儿进程,PPID变成1)。
例如:(不加 命令不会在后台执行)
[root@localhost ~]# nohup ping 127.0.0.1 [1] 27641nohup: 忽略输入并把输出追加到"nohup.out"123
nohup会将ping命令的默认输出从屏幕重定向到当前目录的nohup.out文件,如果当前目录不可写,会重定向到 $HOME/nohup.out 。
如果ping命令已经重定向输出了,就不会重定向到nohup.out了,例如nohup ping 127.0.0.1/dev/null
2. screen 命令
如果程序需要交互等复杂的操作,推荐使用功能强大的screen。screen 提供了 ANSI/VT100 的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。
不是所有Linux都自带screen。查询安装包信息:rpm -qa|grep screen
安装方法:
CentOS系统:yum install screen
Debian 系统:apt-get install screen
用法:
打开新的会话窗口:screen
结束当前会话:exit
在新会话中执行程序(程序关闭时会话自动结束):screen vi test.c
打开新会话并起个名字:screen -S myname
暂时离开会话(经常用):Ctrl+a 然后 d
查看会话列表: screen -ls
恢复之前离开的会话:screen -r 会话名或进程号
清除dead状态的会话:screen -wipe
启动一个开始就是Detached状态的会话:screen -dmS 名字 命令
1. shred – 覆盖文件以隐藏内容
shred可覆盖文件以隐藏内容,另外还可以删除文件。
$ shred -zvu -n 5 passwords.list
这个命令包括的几个选项有:
-z – 最后一次覆盖添加0,以隐藏覆盖操作
-v – 能够显示操作进度
-u – 覆盖后截断并删除文件
-n – 指定覆盖文件内容的次数(默认值是3次)
shred – 覆盖文件以隐藏内容。
你可以在shred的参考手册页找到更多的使用选项和信息:
$ man shred
2. wipe – 安全地擦除Linux下的文件
Linux的wipe命令,可安全地删除磁存储器中的文件,后续无法恢复已删除文件或目录的内容。
首先,你需要安装wipe工具才能使用它,运行下面命令:$ sudo apt-get install wipe [在Debian及其衍生版上]
$ sudo yum install wipe [在基于RedHat的系统上]
下面这个命令将擦除目录private下面的一切内容。
$ wipe -rfi private/*
相关标志的用法如下:
-r – 告诉wipe递归查询子目录
-f – 启用强行删除,并禁用确认查询
-i – 显示删除过程的进度
wipe – 安全地删除Linux下的文件
注意:wipe只能适用于磁存储器,对于固态磁盘要使用其他方法。
仔细阅读wipe的参考手册页,了解更多的使用选项和使用说明:
$ man wipe
3. 面向Linux的secure-deletetion工具包
secure-delete是一套安全文件删除工具,包含SRM(secure_deletion)工具,它是用来安全地删除文件。
首先,你要安装它,为此使用下面这个相关命令:$ sudo apt-get install secure-delete [在Debian及其衍生版上]
$ sudo yum install secure-delete [在基于RedHat的系统上]
一旦安装完毕,你可以使用srm工具,在Linux系统上安全地删除文件或目录,如下所示。
$ srm -vz private/*
使用的选项如下:
-v – 启用详细信息模式
-z – 用0而不是随机数据擦除上一次写入的内容
srm – 安全删除Linux下的文件
仔细阅读srm的参考手册页,了解更多的使用选项和信息:
$ man srm
4. sfill –安全免费的磁盘/索引节点空间擦除工具
ffill是secure-deletetion工具包的一部分,它是一种安全免费的磁盘和索引节点空间擦除工具,可以安全地删除闲置磁盘空间上的文件。sfill可检查指定分区上的闲置空间,并用来自/dev/urandom的随机数据来填充。
下面这个命令将在我的根分区上执行sfill,-v参数选项符启用详细信息模式:
$ sudo sfill -v /home/aaronkilik/tmp/
假设你创建了一个单独的分区,/home用来存储平常的系统用户主目录,那么你可以在该分区上指定一个目录,对它进行sfill操作:
$ sudo sfill -v /home/username
sfill有几个局限性,参考手册页中有说明,你还能找到另外的使用标志和操作说明:
$ man sfill
注意:secure-deletetion工具包中的下面两个工具(sswap和sdmem)与本文并不直接有关,不过我们会介绍它们,也许将来用得着。
5. sswap – 安全交换分区擦除工具
这是一个安全分区擦除工具,sswap删除的数据驻留在交换分区上的数据。
警告:记得在使用sswap之前先卸载掉你的交换分区!不然系统可能会崩溃!
只要确定你的交换分区(并使用swapon命令,核实分页和交换设备/文件是否开启),下一步,使用swapoff命令,禁用分页和交换设备/文件。
然后,在交换分区上运行sswap命令:
$ cat /proc/swaps
$ swapon
$ sudo swapoff /dev/sda6
$ sudo sswap /dev/sda6 #这个命令需要一段时间才能完成,默认情况下执行38趟
sswap – 安全交换分区擦除工具
确保仔细阅读sswap的参考手册页,了解更多的使用选项和信息:
$ man sswap
6. sdmem – 安全内存擦除工具
sdmem是安全内存擦除工具,它旨在安全地删除驻留在内存中的数据。
它原先名叫smem,但是在Debain系统上,有另一个程序包名叫smem(报告每个进程和每个用户的内存使用情况),于是开发人员将它改名为sdmem。
$ sudo sdmem -f -v
想了解更多的使用信息,请仔细阅读sdmem的参考手册页:
$ man sdmem
Ctrl+z/bg/nohup/setsid/
在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上即可,实际上,这样是将命令放入到一个作业队列中了:
./rsync.sh jobs
但是如上方到后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略hangup信号,或者setsid将将父进程设为init进程(进程号为1):对于已经在前台执行的命令,也可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行:bg %1,放回前台运行:%1。
# nohup ./rsync.sh setsid ./rsync.sh 或
# (./rsync.sh ) ////在一个subshell中执行# ps -ef|grep rsync
nohup 的用途就是让提交的命令忽略 hangup 信号,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。。一般我们可在结尾加上””来将命令同时放入后台运行,也可用” log.out 21”来更改缺省的重定向文件名。
上面的试验演示了使用nohup/setsid加上使进程在后台运行,同时不受当前shell退出的影响。那么对于已经在后台运行的进程,该怎么办呢?可以使用disown命令:
# jobs
# disown -h %1# ps -ef|grep rsync
效果与setid相同,但是disown后无法通过jobs命令查看了。
screen
还有一种更加强大的方式是使用screen,首先创建一个断开模式的虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令需要在后台连续执行的时候比较方便。
GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换,可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
# yum install screen -y
常用screen参数:
# screen -S docker-d 新建一个名叫docker-d的session,并马上进入
# screen -dmS docker-d 新建一个名叫docker-d的session,但暂不进入,可用于系统启动脚本里
# screen -ls 列出当前所有session
# screen -r docker-d 恢复到zhouxiao这个session,前提是已经是断开状态(-d可以远程断开会话)
# screen -x docker-d 连接到离线模式的会话(多窗口同步演示)
# screen ./rsync.sh screen创建一个执行脚本的单窗口会话,可以attach进程ID
# screen -wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业
正常情况下,当你退出一个窗口中最后一个程序(通常是bash)后,这个窗口就关闭了。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
C-a w 显示所有窗口列表
C-a k 这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
C-a d detach,暂时离开当前session
上面只是基本也是最常用的用法,更多请参考man screen或linux screen 命令详解。需要了解的是,一个用户创建的screen,其他用户(甚至root)通过screen -ls是看不见的。另外,Ctrl+a在bash下是用来回到行开头,不幸与上面的组合快捷键冲突。
一、sshd服务
sshd服务的配置文件一般保存在/etc/ssh/sshd_config文件中。
在RHEL7中,一般默认已经安装sshd服务程序,使用ssh命令进行远程连接。
格式:ssh [options] ip地址
ssh 192.168.106.139
1、centos7使用ssh登录远程服务器
ssh xiaogua@192.168.106.139
exit 退出登录
-r :用于传输文件夹
-6:使用IPv6协议
2)、从本地复制一个文件夹到远程主机
执行后会立即返回一个提示符
-S :创建会话窗口
-d:指定会话进行离线处理
-r:恢复指定会话
-x:一次性恢复所有的会话
-ls:显示当前已有的会话
-wipe:把目前无法使用的会话删除
2)、screen -ls
查看当前的会话正在工作中