王者荣耀玩六小时休息怎么玩2小时以上

linux 下查看文件修改时间 等 - 海王 - 博客园
随笔 - 545
查看文件时间戳命令:stat awk.txtFile: `awk.txt'Size: 20& Blocks: 8& IO Block: 4096& regular fileDevice: 801h/2049d& Inode: 380730& Links: 1Access: (0644/-rw-r--r--) Uid: (& 0/& root)& Gid: (& 0/& root)Access:
01:50:44. +0800Modify:
01:48:18. +0800Change:
01:48:18. +0800 说明:Access访问时间。Modify修改时间。Change状态改变时间。可以stat *查看这个目录所有文件的状态。现在是要过滤出Modify的时间戳,并以yyyyMMddHHSS格式保存,则可以利用下面这条命令:stat awk.txt | grep -i Modify | awk -F. '{print $1}' | awk '{print $2$3}'| awk -F- '{print $1$2$3}' | awk -F: '{print $1$2$3}'输出结果:18 修改文件时间与创建新文件:touch 在介绍ls命令时,提到每个文件在Linux下面都会记录3个主要的修改时间:o modification time(mtime,修改时间):当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性。o status time(ctime,状态时间):当该文件的”状态(status)”改变时,就会更新这个时间,举例来说,更改了权限与属性,就会更新这个时间。o access time(atime,存取时间):当“取用文件内容”时,就会更新这个读取时间。举例来说,使用cat去读取 ~/.bashrc,就会更新atime了。举例来说,我们来看一看/etc/man.config文件的时间。[root@linux ~]# ls -l /etc/man.config-rw-r--r-- 1 root root 4506 Apr 8 19:11 /etc/man.config[root@linux ~]# ls -l --time=atime /etc/man.config-rw-r--r-- 1 root root 4506 Jul 19 17:53 /etc/man.config[root@linux ~]# ls -l --time=ctime /etc/man.config-rw-r--r-- 1 root root 4506 Jun 25 08:28 /etc/man.config
看到了吗?在默认的情况下,ls显示的是该文件的mtime,也就是这个文件的内容上次更改的时间。我的系统是在6/25安装的,因此,这个文件产生但状态更改的时间就回溯到那个时间点。因为刚才的范例中使用到这个文件,所以,它的atime就会变成刚刚使用的时间了。
文件的时间很重要,因为如果误判文件时间,可能会造成某些程序无法顺利运行。那么,万一我发现了一个文件来自将来(很多时候会有这个问题的。我们在安装的时候,提到的GMT时间就是那个意思),该如何让该文件的时间变成“现在”的时刻呢?很简单,用touch命令即可。[root@linux ~]# touch [-acdmt] 文件参数:-a : 仅修改access time。-c : 仅修改时间,而不建立文件。-d : 后面可以接日期,也可以使用 --date="日期或时间"-m : 仅修改mtime。-t : 后面可以接时间,格式为 [YYMMDDhhmm]范例: 范例一:新建一个空的文件。[root@linux ~]# cd /tmp[root@linux tmp]# touch testtouch[root@linux tmp]# ls -l testtouch-rw-r--r-- 1 root root&&& 0 Jul 19 20:49 testtouch# 注意,这个文件的大小是0。在默认的状态下,如果touch后面接文件,# 则该文件的3个时间(atime/ctime/mtime)都会更新为当前时间。若该文件不存在,# 则会主动建立一个新的空文件。例如上面这个例子。 范例二:将 ~/.bashrc复制成为bashrc,假设复制完全的属性,检查其日期。[root@linux tmp]# cp ~/.bashrc bashrc[root@linux tmp]# ll --time= ll --time=ctime bashrc-rwxr-xr-x 1 root root 395 Jul 4 11:45 bashrc &==这是mtime-rwxr-xr-x 1 root root 395 Jul 19 20:44 bashrc &==这是atime-rwxr-xr-x 1 root root 395 Jul 19 20:53 bashrc &==这是ctime# 在这个案例中,我们使用了 ; 命令分隔符,它的用法我们会在Bash shell中提到。# 此外,ll是ls -l的命令别名,这个也会在bash shell中再次提及,# 当前可以简单地想成,ll就是ls -l的简写。至于 ; 则是同时发出两个命令,# 且让两个命令“按顺序”执行的意思。上面的结果中可以看到,该文件更改的日期# Jul 4 11:45,但是atime与ctime不一样。 范例三:修改案例二的bashrc文件,将日期调整为两天前。[root@linux tmp]# touch -d "2 days ago" bashrc[root@linux tmp]# ll --time= ll --time=ctime bashrc-rwxr-xr-x 1 root root 395 Jul 17 21:02 bashrc-rwxr-xr-x 1 root root 395 Jul 17 21:02 bashrc-rwxr-xr-x 1 root root 395 Jul 19 21:02 bashrc# 与上一个范例比较,本来是19日的变成了17日了(atime/mtime)。# 不过,ctime并没有跟着改变。 范例四:将上个范例的bashrc日期改为 2:02。[root@linux tmp]# touch -t
bashrc[root@linux tmp]# ll --time= ll --time=ctime bashrc-rwxr-xr-x 1 root root 395 Jul 15 02:02 bashrc-rwxr-xr-x 1 root root 395 Jul 15 02:02 bashrc-rwxr-xr-x 1 root root 395 Jul 19 21:05 bashrc# 注意,日期在atime与mtime都改变了,但ctime则是记录当前的时间。
通过touch命令,可以轻松地修改文件的日期与时间。并且,也可以建立一个空文件。不过,要注意的是,即使复制一个文件,复制所有属性,但也没有办法复 制ctime属性。ctime可以记录文件最近改变状态(status)的时间。无论如何,还是要说明一下,我们平时看的文件属性中,比较重要的还是 mtime。我们关心的常常是这个文件的“内容”是什么时候更改的。touch这个命令最常用的情况是:o 建立一个空文件。o 将某个文件日期修改为当前日期(mtime与atime)。
与文件相关的几个时间:
1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。
2、修改时间,对文件内容修改一次,这个时间就会更新。比如:vi后保存文件。ls -l列出的时间就是这个时间。
3、状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。查看文件的详细的状态、准确的修改时间等,可以通过stat命令 文件名。
阅读(...) 评论()
Copyright & 海王
Powered by:
模板提供:Linux下分割、合并文件——dd和cat
时间: 10:23:03
&&&& 阅读:255
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&功能说明:读取,转换并输出数据。
语  法:dd [bs=&字节数&][cbs=&字节数&][conv=&关键字&][count=&区块数&][ibs=&字节数&][if=&文件&][obs=&字节数&][of=&文件&][seek=&区块数&][skip=&区块数&][&help][&version]
补充说明:dd可从标准输入或文件读取数据,依指定的格式来转换数据,再输出到文件,设备或标准输出。
参  数:
bs=&字节数&
将ibs( 输入)与obs(输出)设成指定的字节数。
cbs=&字节数&
转换时,每次只转换指定的字节数。
conv=&关键字& 指定文件转换的方式。
count=&区块数& 仅读取指定的区块数。
ibs=&字节数&
每次读取的字节数。
从文件读取。
obs=&字节数&
每次输出的字节数。
输出到文件。
seek=&区块数&
一开始输出时,跳过指定的区块数。
skip=&区块数&
一开始读取时,跳过指定的区块数。
dd的作用是转换和拷贝文件,我们可以利用它来分割文件,相关的选项如下:
if=filename:输入的文件名
of=finename:输出的文件名
bs=bytes:一次读写的字节数,默认是512bytes
skip=blocks:拷贝前,跳过的输入文件的前blocks块,块的大小有bs决定
count=blocks:只拷贝输入文件的前blocks块
例如,现在有一个文件file,大小为116616字节:
[root]# du -b file
将其分割为两文件file1和file2,那我们就设置每块为1024字节,将file的前60块放入file1,余下的放入file2:
[root]# dd if=file bs=1024 count=60 skip=0
[root]# dd if=file bs=1024 count=60 skip=60 of=file2
然后用cat将两个文件合并为file.bak,要注意文件的顺序:
[root]# cat file1 file2 & file.bak
可以用md5sum验证一下file和file.bak:
[root]# md5sum file
3ff53f7c30421ace632eefff36148a70
[root]# md5sum file.bak
3ff53f7c30421ace632eefff36148a70
可以证明两个文件时完全相同的。
为了方便分割、合并文件,我写了两个脚本:
#ddf.sh:分割文件,分割后的文件以数字结尾,例如file分割为两个文件:file1和file2
#使用脚本是第一参数是要分割的文件名
Filename=$1
Filesize=0
Path=`pwd`
#验证文件名是否正确,然后计算文件的大小
if [ -z $Filename ];then
echo "Error:The file name can not be empty"
if [ -e $Filename ];then
Filesize=`du -b $Filename | awk ‘{print $1}‘`
if [ $Filesize == 0 ];then
echo "Error:The File size is zero!"
echo "The file size is $Filesize Byte"
echo "Plese enter the subfile size(KB):"
echo "Error:$Filename does not exist!"
#输入分割后每个文件的大小,单位是KB
read Subfilesize
if [ -z $Subfilesize ];then
echo "Error:Input can not be empty"
echo $Subfilesize | grep ‘^[0-9]\+$‘ && /dev/null
if [ $? -ne 0 ];then
&& &echo "Error:The Input is not a number!"
elif [ $Subfilesize -eq 0 ];then
&& &echo "Error:The Subfile size is zero!"
#计算需要分割为几个文件
SubfileByte=`expr $Subfilesize \* 1024`
Subfilenum=`expr $Filesize / $SubfileByte`
if [ `expr $Filesize % $Subfilesize` -ne 0 ];then
&& &Subfilenum=`expr $Subfilenum + 1`
#将文件分割
echo "$Filename will be divided into $Subfilenum"&
while [ $i -le $Subfilenum ]
&& &echo "$Filename$i"
&& &dd if=$Filename of="$Path/$Filename$i" bs=1024 count=$Subfilesize skip=$skipnum
&& &i=`expr $i + 1`
&& &skipnum=`expr $skipnum + $Subfilesize`
echo "$Filename has been divided into $Subfilenum"
echo "Done !"
#caf.sh:合并文件,需要合并的文件要放在一个文件夹里
文件名分为两个部分,第一部分都相同,第二部分必须是从1开始的连续数字,例如file1,file2,file3
合并后的文件名为file.bak
#输入文件名的第一部分
echo "Please enter file name:"
read Filename
if [ -z $Filename ];then
echo "Error:File name can not be empty"
#输入待合并文件的个数
echo "Please enter the number of subfiles:"
read Subfilenum
if [ -z $Subfilenum ];then
echo "Error:The number of subfiles can not be empty"
echo $Subfilenum | grep ‘^[0-9]\+$‘ & /dev/null
if [ $? -ne 0 ];then
echo "Error:Input must be a number"
if [ $Subfilenum -eq 0 ];then
echo "Error:The number of subfiles can not be zero"
Newfile=$Filename\.bak
while [ $i -le $Subfilenum ]
Subfilename=$Filename$i
if [ -e $Subfilename ];then
echo "$Subfilename done!"
cat $Subfilename && $Newfile
i=`expr $i + 1`
echo "Error:$Subfilename does not exist"
rm -rf $Newfile
echo "Subfiles be merged into $Newfile"
echo "Success!"
用这两个脚本完成对file的分割、合并:
[root]# ./ddf.sh file
The file size is 116616 Byte
Plese enter the subfile size(KB):
file will be divided into 2
记录了60+0 的读入
记录了60+0 的写出
61440字节(61 kB)已复制,0.0352612 秒,1.7 MB/秒
记录了53+1 的读入
记录了53+1 的写出
55176字节(55 kB)已复制,0.0316272 秒,1.7 MB/秒
file has been divided into 2
[root]# ls
[root]# ./caf.sh
Please enter file name:
Please enter the number of subfiles:
file1 done!
file2 done!
Subfiles be merged into file.bak
[root]# ls
linux下的两个很实用的命令, 一个切分, 一个合并.非常实用
Copy a file, converting and formatting according to the operands.
read and write up to BYTES bytes at a time
convert BYTES bytes at a time
conv=CONVS
convert the file as per the comma separated symbol list
copy only N input blocks
read up to BYTES bytes at a time (default: 512)
read from FILE instead of stdin
iflag=FLAGS
read as per the comma separated symbol list
write BYTES bytes at a time (default: 512)
write to FILE instead of stdout
oflag=FLAGS
write as per the comma separated symbol list
skip N obs-sized blocks at start of output
skip N ibs-sized blocks at start of input
status=WHICH
WHICH info to suppress
‘noxfer‘ suppresses transfer stats, ‘none‘ suppresses all
&if和of是输入输出
count是操作的块数
bs就是块的大小
seek是略过n个输出的块再写入
skip是略过输入的块数
2. &cat命令
很简单的常用法之一是把两个文件合并在一起
cat a b &c
3. 其它应用&
1.将本地的/dev/hdb整盘备份到/dev/hdd
dd if=/dev/hdb f=/dev/hdd
hdb && 内存 -& hdd
2.将/dev/hdb全盘数据备份到指定路径的image文件
dd if=/dev/hdb f=/root/image
hdb && 内存 -& image文件
3.将备份文件恢复到指定盘
dd if=/root/image f=/dev/hdb
image文件 && 内存 -& hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
dd if=/dev/hdb | gzip& /root/image.gz
5.将压缩的备份文件恢复到指定盘
gzip -dc /root/image.gz | dd f=/dev/hdb
6.备份磁盘开始的512个字节大小的MBR 主引导记录信息到指定文件
dd if=/dev/hda f=/root/image count=1 bs=512
默认从硬盘0柱面0磁道1扇区读取512个字节
count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:dd if=/root/image f=/dev/hda
7.备份软盘
dd if=/dev/fd0 f=disk.img count=1
bs=1440k (即块大小为1.44M)
8.拷贝内存内容到硬盘
dd if=/dev/mem f=/root/mem.bin
bs=1024 (指定块大小为1k)
9.拷贝光盘内容到指定文件夹,并保存为cd.iso镜像文件
dd if=/dev/cdrom(hdc)
of=/root/cd.iso
10.增加swap交换分区文件大小
第一步:创建一个大小为256M的文件:
dd if=/dev/zero
of=/swapfile
bs=1024 count=262144
第二步:把这个文件变成swap交换分区文件:
mkswap /swapfile
第三步:启用这个swap交换分区文件:
swapon /swapfile
第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap交换分区文件:
11.销毁磁盘数据
dd if=/dev/urandom f=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
12.测试硬盘的读写速度
dd if=/dev/zero bs=1024 count=1000000 f=/root/1Gb.file
dd if=/root/1Gb.file bs=64k | dd f=/dev/null
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。
13.确定硬盘的最佳块blocks大小:初始化硬盘
dd if=/dev/zero bs=1024 count=1000000 f=/root/1Gb.file
初始化硬盘
dd if=/dev/zero bs=2048 count=500000 f=/root/1Gb.file
初始化硬盘
dd if=/dev/zero bs=4096 count=250000 f=/root/1Gb.file
初始化硬盘
dd if=/dev/zero bs=8192 count=125000 f=/root/1Gb.file
初始化硬盘
通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。
14.修复硬盘:
自初始化硬盘
dd if=/dev/sda f=/dev/sda
SCSI硬盘 或dd if=/dev/hda f=/dev/hda
Linux&下的dd命令使用详解
一、dd命令的解释
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2
参数注释:
1.&if=文件名:输入文件名,缺省为标准输入。即指定源文件。&&if=input&file&&
2.&of=文件名:输出文件名,缺省为标准输出。即指定目的文件。&&of=output&file&&
3.&ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
&&&&obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
&&&&bs=bytes:同时设置读入/输出的块大小为bytes个字节。
4.&cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
5.&skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
6.&seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
7.&count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
8.&conv=conversion:用指定的参数转换文件。
&&&&ascii:转换ebcdic为ascii
&&&&&ebcdic:转换ascii为ebcdic
&&&&ibm:转换ascii为alternate&ebcdic
&&&&block:把每一行转换为长度为cbs,不足部分用空格填充
&&&&unblock:使每一行的长度都为cbs,不足部分用空格填充
&&&&lcase:把大写字符转换为小写字符
&&&&ucase:把小写字符转换为大写字符
&&&&swab:交换输入的每对字节
&&&&&noerror:出错时不停止
&&&&&notrunc:不截短输出文件
&&&&sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
二、dd应用实例
1.将本地的/dev/hdb整盘备份到/dev/hdd
#dd&if=/dev/hdb&of=/dev/hdd
2.将/dev/hdb全盘数据备份到指定路径的image文件
#dd&if=/dev/hdb&of=/root/image
3.将备份文件恢复到指定盘
#dd&if=/root/image&of=/dev/hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
#dd&if=/dev/hdb&|&gzip&&&/root/image.gz
5.将压缩的备份文件恢复到指定盘
#gzip&-dc&/root/image.gz&|&dd&of=/dev/hdb
6.备份与恢复MBR
备份磁盘开始的512个字节大小的MBR信息到指定文件:
#dd&if=/dev/hda&of=/root/image&count=1&bs=512
&&&count=1指仅拷贝一个块;bs=512指块大小为512个字节。
#dd&if=/root/image&of=/dev/had
将备份的MBR信息写到磁盘开始部分
7.备份软盘
#dd&if=/dev/fd0&of=disk.img&count=1&bs=1440k&(即块大小为1.44M)
8.拷贝内存内容到硬盘
#dd&if=/dev/mem&of=/root/mem.bin&bs=1024&(指定块大小为1k)&&
9.拷贝光盘内容到指定文件夹,并保存为cd.iso文件
#dd&if=/dev/cdrom(hdc)&of=/root/cd.iso
10.增加swap分区文件大小
第一步:创建一个大小为256M的文件:
#dd&if=/dev/zero&of=/swapfile&bs=1024&count=262144
第二步:把这个文件变成swap文件:
#mkswap&/swapfile
第三步:启用这个swap文件:
#swapon&/swapfile
第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
/swapfile&&&&swap&&&&swap&&&&default&&&0&0
11.销毁磁盘数据
#dd&if=/dev/urandom&of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
12.测试硬盘的读写速度
#dd&if=/dev/zero&bs=1024&count=1000000&of=/root/1Gb.file
#dd&if=/root/1Gb.file&bs=64k&|&dd&of=/dev/null
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。
13.确定硬盘的最佳块大小:
#dd&if=/dev/zero&bs=1024&count=1000000&of=/root/1Gb.file
#dd&if=/dev/zero&bs=2048&count=500000&of=/root/1Gb.file
#dd&if=/dev/zero&bs=4096&count=250000&of=/root/1Gb.file
#dd&if=/dev/zero&bs=8192&count=125000&of=/root/1Gb.file
通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。
14.修复硬盘:
#dd&if=/dev/sda&of=/dev/sda&或dd&if=/dev/hda&of=/dev/hda
当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic&flux&point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数&据起死回生。并且这个过程是安全、高效的。
15.利用netcat远程备份
#dd&if=/dev/hda&bs=16065b&|&netcat&&&targethost-IP&&&1234
在源主机上执行此命令备份/dev/hda
#netcat&-l&-p&1234&|&dd&of=/dev/hdc&bs=16065b
在目的主机上执行此命令来接收数据并写入/dev/hdc
#netcat&-l&-p&1234&|&bzip2&&&partition.img
#netcat&-l&-p&1234&|&gzip&&&partition.img
以上两条指令是目的主机指令的变化分别采用bzip2、gzip对数据进行压缩,并将备份文件保存在当前目录。
16.将一个大视频文件的第i个字节的值改成0x41(大写字母A的ASCII值)
#echo&A&|&dd&of=bigfile&seek=$i&bs=1&count=1&conv=notrunc
17.建立linux虚拟盘,用文件模拟磁盘
在进行linux的实验中,如果没有多余的硬盘来做测试。则可以在linux下使用文件来模拟磁盘,以供测试目的。
其模拟过程如下所示,摘录自《Oracle数据库核心技术与实务详解-教你如何成为Oracle&10g&OCP》一书。
1)以root用户创建一个ASM磁盘所在的目录。
#&mkdir&&p&/u01/asmdisks
2)通过dd命令创建6个400M大小的文件,每个文件代表一块磁盘。
[&u01]#&cd&asmdisks
[&asmdisks]#&dd&if=/dev/zero&of=asm_disk1&bs=1024k&count=400
[&asmdisks]#&dd&if=/dev/zero&of=asm_disk2&bs=1024k&count=400
[&asmdisks]#&dd&if=/dev/zero&of=asm_disk3&bs=1024k&count=400
[&asmdisks]#&dd&if=/dev/zero&of=asm_disk4&bs=1024k&count=400
[&asmdisks]#&dd&if=/dev/zero&of=asm_disk5&bs=1024k&count=400
[&asmdisks]#&dd&if=/dev/zero&of=asm_disk6&bs=1024k&count=400
3)将这些文件与裸设备关联。
[&asmdisks]#&chmod&777&asm_disk*
[&asmdisks]#&losetup&/dev/loop1&asm_disk1
[&asmdisks]#&losetup&/dev/loop2&asm_disk2
[&asmdisks]#&losetup&/dev/loop3&asm_disk3
[&asmdisks]#&losetup&/dev/loop4&asm_disk4
[&asmdisks]#&losetup&/dev/loop5&asm_disk5
[&asmdisks]#&losetup&/dev/loop6&asm_disk6
注意:如果要删除通过dd模拟出的虚拟磁盘文件的话,直接删除模拟出的磁盘文件
(也就是asm_disk1、asm_disk2&asm_disk6)还不够,还必须执行losetup&-d&/dev/loopN,在这里N从1到6。否则,磁盘文件所占用的磁盘空间不能释放
三、/dev/null和/dev/zero的区别
/dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!
/dev/zero,是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0,可以使用任何你需要的数目&&设备提供的要多的多。他可以用于向设备或文件写入字符串0。
/dev/null------它是空设备,也称为位桶(bit&bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
#if=/dev/zero&of=./test.txt&bs=1k&count=1#ls&&l
total&4-rw-r--r--&&&&1&oracle&&&dba&&&&&&&&&&1024&Jul&15&16:56&test.txt
#find&/&-name&access_log&&2&/dev/null
3.1使用/dev/null&
把/dev/null看作"黑洞",&它等价于一个只写文件,所有写入它的内容都会永远丢失.,而尝试从它那儿读取内容则什么也读不到。然而,&/dev/null对命令行和脚本都非常的有用
禁止标准输出
#cat&$filename&&/dev/null
文件内容丢失,而不会输出到标准输出.
禁止标准错误
#rm&$badname&2&/dev/null
这样错误信息[标准错误]就被丢到太平洋去了
禁止标准输出和标准错误的输出
#cat&$filename&2&/dev/null&&/dev/null
如果"$filename"不存在,将不会有任何错误信息提示;如果"$filename"存在,&文件的内容不会打印到标准输出。
因此,上面的代码根本不会输出任何信息。当只想测试命令的退出码而不想有任何输出时非常有用。
#cat&$filename&&&/dev/null
这样其实也可以,&由&Baris&Cicek&指出
自动清空日志文件的内容
Deleting&contents&of&a&file,&but&preserving&the&file&itself,&with&all&attendant&permissions&(from&Example&2-1&and&Example&2-3):&
#cat&/dev/null&&&/var/log/messages#&&:&&&/var/log/messages&&&有同样的效果,&但不会产生新的进程.(因为:是内建的)#cat&/dev/null&&&/var/log/wtmp
特别适合处理这些由商业Web站点发送的讨厌的"cookies"
隐藏cookie而不再使用
#if&[&-f&~/.netscape/cookies&]&&#&如果存在则删除.#then#rm&-f&~/.netscape/cookies#fi#ln&-s&/dev/null&~/.netscape/cookies
现在所有的cookies都会丢入黑洞而不会保存在磁盘上了.
3.2使用/dev/zero
像/dev/null一样,&/dev/zero也是一个伪文件,&但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的)。&写入它的输出会丢失不见,&而从/dev/zero读出一连串的null也比较困难,&虽然这也能通过od或一个十六进制编辑器来做到。&/dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件
用/dev/zero创建一个交换临时文件
#!/bin/bash&
&&#&创建一个交换文件.&
&&ROOT_UID=0&#&Root&用户的&$UID&是&0.&
&&E_WRONG_USER=65&#&不是&root?&
&&FILE=/swap&
&&BLOCKSIZE=1024
&&MINBLOCKS=40&
&&SUCCESS=0
&&#&这个脚本必须用root来运行.
&&if&[&"$UID"&-ne&"$ROOT_UID"&]&
&&&&echo&"You&must&be&root&to&run&this&script.";&echo&
&&&exit&$E_WRONG_USER
&&blocks=${1:-$MINBLOCKS}&#&如果命令行没有指定,
&&#+&则设置为默认的40块.&
&&#&上面这句等同如:
&&#&--------------------------------------------------&
&&#&if&[&-n&"$1"&]&
&&#&blocks=$1&
&&#&blocks=$MINBLOCKS&
&&#&--------------------------------------------------
&if&[&"$blocks"&-lt&$MINBLOCKS&]&
&blocks=$MINBLOCKS&#&最少要有&40&个块长.&
&echo&"Creating&swap&file&of&size&$blocks&blocks&(KB)."&
&dd&if=/dev/zero&of=$FILE&bs=$BLOCKSIZE&count=$blocks&#&把零写入文件.&
&mkswap&$FILE&$blocks&#&将此文件建为交换文件(或称交换分区).&
&swapon&$FILE&#&激活交换文件.&
&echo&"Swap&file&created&and&activated."&
&exit&$SUCCESS&
关于&/dev/zero&的另一个应用是为特定的目的而用零去填充一个指定大小的文件,&如挂载一个文件系统到环回设备&(loopback&device)或"安全地"&删除一个文件
例子&创建ramdisk
#!/bin/bash&
&#&ramdisk.sh&
&#&"ramdisk"是系统RAM内存的一段,&
&#+&它可以被当成是一个文件系统来操作.&
&#&它的优点是存取速度非常快&(包括读和写).&
&#&缺点:&易失性,&当计算机重启或关机时会丢失数据.
&#+&会减少系统可用的RAM.&
&#&10&#&那么ramdisk有什么作用呢?
&#&保存一个较大的数据集在ramdisk,&比如一张表或字典,&
&#+&这样可以加速数据查询,&因为在内存里查找比在磁盘里查找快得多.
&&E_NON_ROOT_USER=70&#&必须用root来运行.&
&&ROOTUSER_NAME=root
&&MOUNTPT=/mnt/ramdisk&
&&SIZE=2000&#&2K&个块&(可以合适的做修改)
&&BLOCKSIZE=1024&#&每块有1K&(1024&byte)&的大小&
&&DEVICE=/dev/ram0&#&第一个&ram&设备&
&&username=`id&-nu`&
&&if&[&"$username"&!=&"$ROOTUSER_NAME"&]&
&&&&echo&"Must&be&root&to&run&\"`basename&$0`\"."
&&&&exit&$E_NON_ROOT_USER&
&&&if&[&!&-d&"$MOUNTPT"&]&#&测试挂载点是否已经存在了,
&&then&#+&如果这个脚本已经运行了好几次了就不会再建这个目录了
&&&&mkdir&$MOUNTPT&#+&因为前面已经建立了.&
&&dd&if=/dev/zero&of=$DEVICE&count=$SIZE&bs=$BLOCKSIZE
&&&#&把RAM设备的内容用零填充.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&#&为何需要这么做?&
&&mke2fs&$DEVICE&#&在RAM设备上创建一个ext2文件系统.&
&&mount&$DEVICE&$MOUNTPT&#&挂载设备.&
&&chmod&777&$MOUNTPT&#&使普通用户也可以存取这个ramdisk.&
&&#&但是,&只能由root来缷载它.&
&&echo&"\"$MOUNTPT\"&now&available&for&use."&
&#&现在&ramdisk&即使普通用户也可以用来存取文件了.&
&#&注意,&ramdisk是易失的,&所以当计算机系统重启或关机时ramdisk里的内容会消失.
&#&拷贝所有你想保存文件到一个常规的磁盘目录下.&
&#&重启之后,&运行这个脚本再次建立起一个&ramdisk.&
&#&仅重新加载&/mnt/ramdisk&而没有其他的步骤将不会正确工作.&
&#&如果加以改进,&这个脚本可以放在&/etc/rc.d/rc.local,
&#+&以使系统启动时能自动设立一个ramdisk.&
&#&这样很合适速度要求高的数据库服务器.&
dd命令和cp/cat命令的区别
在了解了上面的内容之后,我更好奇了,为什么dd命令看上去这么好,现在人们在Linux系统上进行文件复制时用的都是cp命令呢?
难道仅仅是因为cp命令用起来简单么?
dd works on the file you specify, making it able to&copy data between devices, or&from a device to a file.
This is commonly used for moving data if devices specifically are involved
(create an iso image from a cd-rom disc for example: dd if=/dev/cdrom of=mycdrom.iso),
or&backup raw devices(sometimes used in RAC databases: dd if=/dev/raw/raw1 of=device_raw1)
cp is used&for duplicating file content&to a new file or to a new location.
things you specifically want there are&preservation of ownership, timestamp and mode (rights),
and being able to recurse the operation(=being able to copy directories).
cp命令是用来复制文件内容的(同时保留所有者、时间戳和权限等信息),并且允许递归操作(方便进行文件夹级别的复制操作);dd命令一般是用来在不同的设备之间复制数据或备份原始数据(早期用得较多)。
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/shangdawei/p/4513638.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!

我要回帖

更多关于 王者荣耀只能玩3小时 的文章

 

随机推荐