精华内容
下载资源
问答
  • /Dev/null
    2021-05-10 23:48:06

    问题描述

    我阅读了/dev/null上的维基百科文章,并将文件移动到/dev/null。

    为此,我创建了一个test_file并在其中放入一些内容:

    $ touch test_file

    $ echo "This is written by Aditya" > test_file

    $ cat test_file

    This is written by Aditya

    此后,我尝试将文件移至/dev/null:

    $ mv test_file /dev/null

    mv: inter-device move failed: ‘test_file’ to ‘/dev/null’; unable to remove target: Permission denied

    因为,这给了我一个Permission denied错误;无论何时遇到Permission denied错误,我都会像往常一样使用sudo。

    $ sudo mv test_file /dev/null

    该命令成功并且test_file不再存在于该目录中。

    但是,维基百科文章指出,无法恢复任何移动到/dev/null的内容,并且它会将EOF提供给任何尝试从其读取数据的进程。但是,我可以从/dev/null读取:

    $ cat /dev/null

    This is written by Aditya

    我做错了什么,如何修复/dev/null恢复正常?为什么我首先遇到Permission denied错误?

    最佳解决办法

    /dev/null是一个文件。一个特殊的文件。像/dev /sda或/dev /tty这样的设备文件可以与系统中的一块硬件进行通信。

    与/dev/null的唯一区别是没有硬件与其链接。您发送给它的任何数据都将被丢弃。像下面的命令一样:

    echo "Hello World" > /dev/null

    这将不会在您的终端上打印任何内容,因为您将echo的输出发送到空白处,因此发生黑洞。

    但是当你做mv test_file /dev/null时,你已经用普通的文本文件替换了特殊文件/dev/null,并保存了test_file的内容副本。换句话说,你已经失去了你的/dev/null。

    现在,你需要做的是(重建它):

    sudo rm /dev/null

    sudo mknod /dev/null c 1 3

    sudo chmod 666 /dev/null

    chmod需要修复his answer中hope中记录的权限。

    你应该重建它,因为很多脚本通过默认输出发送到/dev/null。如果/dev/null不再是一个黑洞,而是一个普通的文本文件,它可能会增长,增长并填充您的file-system。我相信你想避免这种情况。

    而且更危险的是,很多脚本都假定从/dev/null读取的内容什么都不会读取;打破这个假设可能导致随机垃圾写入您系统周围的文件中……实际上不可能修复。

    请记住,Linux是multi-tasking:当你与/dev/null玩,有很多的进程正在运行,甚至在几秒钟的“机会之窗”可以肆虐。

    如果你想玩/dev/null,你可以创建一个副本并进行实验:

    sudo mknod -m 0666 /tmp/null c 1 3

    将创建一个与/dev/null完全相同的/tmp/null文件,但您可以在没有任何系统风险的情况下进行操作和测试。

    次佳解决办法

    $ sudo rm /dev/null

    $ sudo mknod /dev/null c 1 3

    $ ls -l /dev/null

    crw-r--r-- 1 root root 1, 3 Mar 18 08:38 /dev/null

    $ sudo chmod 666 /dev/null

    $ ls -l /dev/null

    crw-rw-rw- 1 root root 1, 3 Mar 18 08:38 /dev/null

    这会恢复权限。否则,作为non-root用户,您将无法使用echo foo > /dev/null。

    第三种解决办法

    覆盖文件和写入文件有很大的区别。

    当您向/dev/null写入内容时,例如,

    $ echo Hello > /dev/null

    它被默默丢弃。为此,您需要向/dev/null写入权限,每个人都有权限:

    $ ls -l /dev/null

    crw-rw-rw- 1 root root 1, 3 Mar 18 13:17 /dev/null

    当您覆盖/dev/null时,就像您使用mv命令所做的那样,将特殊文件/dev/null替换为您在那里移动的任何文件。不要这样做!您需要使用root权限来执行此操作的原因是,要覆盖文件,您需要向包含该文件的目录(在本例中为/dev)写入权限:

    $ ls -ld /dev

    drwxr-xr-x 16 root root 4640 Mar 18 13:17 /dev

    要恢复/dev/null,请发出命令

    $ sudo rm /dev/null

    $ sudo mknod -m 0666 /dev/null c 1 3

    (另请参阅U& L StackExchange:如何创建/dev/null)

    第四种办法

    当你运行命令

    $ sudo mv test_file /dev/null

    您已将特殊文件/dev/null替换为您的文本文件。随后尝试从/dev/null读取返回您的文本文件的内容,并试图以正常方式使用/dev/null的程序可能会中断。

    替换或删除/dev/中的设备文件需要超级用户权限,这就是您的non-sudo尝试失败并出现错误的原因。

    有关如何手动恢复/dev/null的信息,请参阅Benoit的答案,但由于大多数(如果不是全部)/dev/的内容由udev动态管理,我怀疑简单的重启也可能会修复它。

    第五种办法

    要回答你应该做什么的问题,要删除一个文件,你需要:

    rm test_file

    正如其他人所说的,/dev /null是程序输出的目的地。

    参考资料

    更多相关内容
  • 相信大家经常能在shell脚本中发现>/dev/null 2>&1这样的语句。以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>&1 >/dev/null,出了一点小问题之后,我才开始去了解这段...
  • nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对 于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_result ,然后复制标准输出到文件描述
  • win10安装git报错 fatal:open /dev/null or dup failed: No such file or directory错误,将该文件复制到C:\Windows\System32\drivers 替换掉原有的null.sys文件重启即可
  • Git安装成功后 打开报fatal: open /dev/null or dup failed: No such file or directory(解决文件)而且 git Bash闪现-附件资源
  • 使用git Bash here闪退并生成mintty.exe.stackdump文件 cmd使用git 报错 fatal:open /dev/null or dup failed: No such file or directory 并弹出mitty.dump文件 使用方法见我的CSDN
  • win10专业版,在命令行使用git的时候出现此报错,或者...在别的win10专业版上的电脑上拷贝C:\Windows\System32\drivers文件夹中的null.sys文件到覆盖到相应目录下的相应文件,即可完美解决此问题 ,下载解压到对应文件
  • 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别

    万次阅读 多人点赞 2019-05-24 17:05:08
    /dev/null 意思就是把错误输出到“黑洞” >/dev/null 2>&1 默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出...

    一、区别:

    2>/dev/null
    意思就是把错误输出到“黑洞”

    >/dev/null 2>&1
    默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”

    2>&1 >/dev/null
    意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕

    二、解释:

    1、文件描述符
    Linux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:
    0——标准输入(stdin)
    1——标准输出(stdout)
    2——标准错误(stderr)

    标准输出——stdout
    假设:在当前目录下,有且只有一个文件名称为ljl.txt的文件,这时我们运行这个命令【ls ljl.txt】,就会获得一个标准输出stdout的输出结果:ljl.txt
    在这里插入图片描述
    错误输出——stderr
    按照上面的假设,我们运行另一条命令【ls gss.txt】,这样我们就会获得一个标准错误stderr的输出结果“ls:无法访问gss.txt:没有那个文件或目录”。
    在这里插入图片描述
    2、重定向
    重定向的符号有两个:>或>>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举个例子:
    (1)、重定向标准输出stdout
    在这里插入图片描述
    如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将123.txt打印到屏幕。在紧接的cat操作后,可以发现本来应该被输出的内容被记录到stdout.txt中。

    (2)、重定向标准错误stderr
    在这里插入图片描述
    如上图所示,文件描述符2,标准错误的重定向也是同样的原理被记录在了文件stderr.txt这个文件里面了。

    (3)、可以将stderr单独定向到一个文件,stdout重定向到另一个文件
    cmd 2> stderr.txt 1>stdout.txt

    (4)、也可以将stderr和stdout重定向到同一个文件
    cmd > output.txt 2>&1

    或采用下面的方法,可以少写几个字,能达到同样的效果

    cmd &> output.txt

    cmd >& output.txt #两个表达式效果一样的

    3、Linux特殊文件
    /dev/null是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃。因此,null这个设备通常也被称为位桶(bit bucket)或黑洞。
    所以,2>/dev/null的意思就是将标准错误stderr删掉。

    附:linux中单进程的文件数据结构图
    在这里插入图片描述
    上图是linux中单进程的文件数据结构图,最左边使我们熟悉的fd标志,也就是文件描述符,一个进程内所有的文件描述符按照顺序排列构成一张文件描述符表,其中包括fd0,fd1,fd2。(注意:这里并没有说标准输入,标准输出,错误输出,原因后面讲)
      那么,问题来了,假如我们想fd1写入数据时,最终数据会到哪儿呢?事实上fd1作为文件描述符,它本身并不是文件的真正的“入口”,文件真正的“入口”在文件描述符表的第二列:记录了每个文件描述符所对应文件位置的文件指针。换言之,如果我们更换fd1所对应的文件指针,就改变了fd1指向文件的”真正位置”。
      fd0,fd1,fd2指向的文件默认情况下分别是/dev/stdin、/dev/stdout和/dev/stderr,这才是真正的标准输入,标准输出,错误输出,如果将数据写入到/dev/stdout中,就会在屏幕上显示数据,fd0,fd1,fd2只是标志而已,真正起作用的是他们对应的文件指针!
      所以重定向命令’>’所做的工作就是就是改变了fd所对应的文件指针!

    参考来自:https://blog.csdn.net/gramdog/article/details/80374119,https://blog.csdn.net/zhongqi2513/article/details/78613768,https://blog.csdn.net/a1439458305/article/details/79586567

    展开全文
  • fatal: open /dev/null or dup failed: No such file or directory 解决文件
  • Win10 安装git 2.x之后出现 Git闪退,并且git GUI报错open /dev/null or dup failed: No such file or directory-附件资源
  • 本章详解讲解/dev/null,/dev/zero设备的用途和区别,swap原理作用,swap详解,swap配置

    本章详解讲解/dev/null,/dev/zero设备的用途和区别,swap原理作用,swap详解,swap配置


    /dev/null

    “空”设备,也有人称它为黑洞。任何输入到这个“设备”的数据都将被直接丢弃。
    最常用的用法是把不需要的输出重定向到这个文件。
    对于空设备,任何写入它的输出都会被抛弃。 它等价于一个只写文件,所有写入它的内容都会永远丢失.,而尝试从它那儿读取内容则什么也读不到。

    /dev/null用途

    /dev/null对命令行和脚本都非常的有用

    禁止标准输出

    [root@zaishu ~]# cat $filename >/dev/null #
    

    禁止标准错误

    [root@zaishu ~]# rm $badname 2>/dev/null #这样错误信息[标准错误]就被丢弃
    

    禁止标准输出和标准错误的输出

    [root@zaishu ~]#cat $filename 2>/dev/null >/dev/null
    

    如果文件不存在,将不会有任何错误信息提示;如果文件存在, 文件的内容不会打印到标准输出。因此,上面的代码根本不会输出任何信息。当只想测试命令的退出码而不想有任何输出时非常有用。

    输入输出内容可参照之前输入输出这一章节讲解。

    使用/dev/zero

    /dev/zero是一个输入设备,用来初始化文件。该设备无穷尽地提供0,可以使用任何你需要的数目
    用于向设备或文件写入字符串0。
    /dev/zero是一个伪文件, 实际上产生不断的null的流(二进制的零流) 写入它的输出会丢失不见。

    /dev/zero用途

    /dev/zero主要的用处是用来创建一个指定长度的初始化空文件。

    [root@zaishu ~]# if=/dev/zero of=./test.txt bs=1k count=1
    [root@zaishu ~]# ls –l
    total 4
    -rw-r--r-- 1 oracle dba 1024 Jul 15 16:56 test.txt
    

    SWAP

    物理内存就是系统硬件提供的内存大小,是真正的内存。在 Linux 中还有一个虚拟内存的概念,它是利用磁盘空间虚拟出的一块逻辑内存。用作虚拟内存的磁盘空间被称为交换空间( swap )。

    作为物理内存的扩展,Linux 会在物理内存不足时,使用交换分区的虚拟内存,更详细地说,就是内核会将暂时不用的内存块信息写到交换空间,这样一来,物理内存得到了释放,这块内存就可以用于其他目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。

    Linux 的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。

    当内存不够用时,我们使用 swap 分区来临时顶替。

    设置遵循如下原则:
    如果内存较小(根据经验,物理内存小于 4GB),一般设置 swap 分区大小为内存的 2 倍;
    如果物理内存大于 4GB,而小于 16GB,可以设置 swap 分区大小等于物理内存;
    如果内存大小在 16GB 以上,可以设置 swap 为 0,但并不建议这么做,因为设置一定大小的 swap 分区是有一定作用的。

    建立新的 swap 分区,只需要执行以下几个步骤。
    分区:不管是 fdisk 命令还是 parted 命令,都需要先区。
    格式化:格式化命令稍有不同,使用 mkswap 命令把分区格式化成 swap 分区。
    使用 swap 分区。

    示例

    • 创建分区
      命令如下:
    [root@localhost ~]# fdisk /dev/sdb
    ...
    Command (m for help): w  //保存退出
    The partition table has been altered!
    Calling ioctl() to re-read partition table.
    Syncing disks.
    

    或者使用dd 创建文件也可以

    dd if=/dev/zero of=/swapfile bs=1024 count=262144
    
    • 格式化
      使用命令 mkswap 对文件系统格式化。命令如下:
    [root@localhost ~]# mkswap /dev/sdb1
    Setting up swapspace version 1, size = 522076 KiB
    no label, UUID=c3351 dc3-f403-419a-9666-c24615e170fb
    
    • 使用swap分区
    [root@localhost ~]#free //查看内存
    total used free shared buffers cached
    Mem: 1030796 130792 900004 0 15292 55420
    -/+ buffers/cache: 60080 970716
    Swap: 2047992 0 2047992  //当前是200M
    

    free 命令主要是用来查看内存和 swap 分区的使用情况的,其中:
    total:是指总数;
    used:是指已经使用的;
    free:是指空闲的;
    shared:是指共享的;
    buffers:是指缓冲内存数;
    cached:是指缓存内存数,单位是KB;

    buffers(缓冲)和 cached(缓存)的含义。cached 是给读取数据时加速的,buffers 是给写入数据加速的。cached 是指把读取出来的数据保存在内存中,当再次读取时,不用读取硬盘而直接从内存中读取,加速了数据的读取过程;buffers 是指在写入数据时,先把分散的写入操作保存到内存中,当达到一定程度后再集中写入硬盘,减少了磁盘碎片和硬盘的反复寻道,加速了数据的写入过程。

    • 添加swap
    [root@localhost ~]# swapon /dev/sdb1  
    swap分区已加入,我们查看一下。
    [root@localhost ~]#free
    total used free shared buffers cached
    Mem: 1030796 131264 899532 0 15520 55500
    -/+ buffers/cache: 60244 970552
    Swap: 2570064 0 2570064
    
    • 取消swap
    [root@localhost ~]# swapoff /dev/sdb1
    
    • 自动挂载
      让 swap 分区开机之后自动挂载,需要修改 /etc/fstab 文件:
    [root@localhost ~]#vi /etc/fstab
    UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults 1 1
    UUID=0b23d315-33a7-48a4-bd37-9248e5c443451 boot ext4 defaults 1 2
    UUID=4021be19-2751-4dd2-98cc-383368c39edb swap swap defaults 0 0
    tmpfs /dev/shm
    tmpfs defaults 0 0
    devpts /dev/pts
    devpts gid=5, mode=620 0 0
    sysfs /sys
    sysfs defaults 0 0
    proc /proc
    proc defaults 0 0
    /dev/sdb1 swap swap
    defaults 0 0
    

    加入新swap分区的相关内容,这里直接使用分区的设备文件名,也可以使用UUID。


    总结

    本章详解讲解/dev/null,/dev/zero设备的用途和区别,swap原理作用,swap详解,swap配置

    展开全文
  • /dev/null : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它会立即得到一个EOF。 /dev/null 被称为位桶(bit bucket)或者黑洞(black ...

    1.概论(维基百科解释)

    • /dev/null : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它会立即得到一个EOF。
    • /dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。这些操作通常由重定向完成。

    • /dev/zero:在类UNIX操作系统中,/dev/zero是一个特殊的文件,当你读它时,它会提供无限的空字符(NULL , ASCALL NUL, 0x00)。

    • 例:其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件。BSD就是通过mmap把/dev/zero映射到虚地址空间实现共享内存的。可以使用mmap将/dev/zero映射到一个虚拟的内存空间,这个操作的效果等同于使用一段匿名的内存(没有和任何文件相关)。

    2. /dev/null使用

    • 把/dev/null看作“黑洞”。它等价于一个只写文件,并且所有写入它的内容都会永远丢失,而尝试从它那读取内容则什么也读不到。然而,/dev/null对命令行和脚本都非常的有用。

    • 我们都知道 cat $filename 会输出filename对应的文件内容(输出到标准输出)
      而使用

    • cat $filename >/dev/null 则不会得到任何信息,因为我们将本来该通过标准输出显示的文件信息重定向到了 /dev/null 中,so what will you get ?

    • 使用 cat $filename 1>/dev/null 也会得到同样的效果,因为默认重定向的 1 就是标准输出。 如果你对 shell 脚本或者重定向比较熟悉的话,应该会联想到 2 ,也即标准错误输出。

    • 我们使用 cat $filename 时如果filename对应的文件不存在,系统肯定会报错: “ cat: filename: 没有那个文件或目录 ” 。

    • 如果我们不想看到错误输出呢?我们可以禁止标准错误: cat $badname 2>/dev/null

    $cat test.txt   
    just for test  
    $cat test.txt >/dev/null   
    $cat test.txt 1>/dev/null   
    $cat test2.txt   
    cat: test2.txt: 没有那个文件或目录  
    $cat test2.txt >/dev/null   
    cat: test2.txt: 没有那个文件或目录  
    $cat test2.txt 2>/dev/null   
    

    有些时候我们并不想看到任何输出,我们只想看到这条命令运行是否正常,那么我们可以同时禁止标准输出和标准错误的输出:

    cat $filename 2>/dev/null >/dev/null
    

    所以:

    • 如果"$filename"不存在,将不会有任何错误信息提示,

    • 如果"$filename"存在, 文件的内容不会打印到标准输出。

    • 因此, 上面的代码根本不会输出任何信息,当只想测试命令的退出码而不想有任何输出时非常有用。

    下一步,我们使用 echo $? 查看上条命令的退出码:0为命令正常执行,1-255为有出错。

    当然,使用 cat $filename &>/dev/null 也可以达到 cat $filename 2>/dev/null >/dev/null 一样的效果。

    $cat test2.txt 2>/dev/null   
    $cat test.txt 2>/dev/null >/dev/null   
    $echo $?  
    0  
    $cat test2.txt 2>/dev/null >/dev/null   
    $echo $?  
    1  
    $cat test.txt &>/dev/null  
    $echo $?  
    0  
    

    有时候,我们需要删除一些文件的内容而不删除文件本身:(这个方法可以用来删除日志文件,在我的Debian笔记本上我给 /var 盘配的空间有些过小,有时候就需要手动使用这个操作来清空日志)

    # cat /dev/null > /var/log/messages

    : > /var/log/messages 有同样的效果,但不会产生新的进程。(因为:是内建的)

    • 下面的实例中,使用/dev/null 来删除cookie 并且不再使用cookie
     if [ -f ~/.netscape/cookies ]       # 如果存在则删除,删除后才可以添加软链接  
         then  
           rm -f ~/.netscape/cookies  
         fi  
           
         ln -s /dev/null ~/.netscape/cookies  
    

    其中,cookies的目录是可以变换的,比如说我自己电脑上的firefox的cookie目录为: ~/.mozilla/firefox/nah4b6di.default/cookies*

    /dev/zero使用

    像/dev/null一样,/dev/zero也是一个伪文件,但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的)。写入它的输出会丢失不见,/dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,像临时交换文件。

    比如说,在我的前一篇博客中(《尝试安装Chrome OS的新版本 Vanilla & 安装之后U盘遇到的问题解决》),提到我使用dd 制作的U盘系统,而我的U盘有16G,而制作好后,系统盘只占了2.5G,而其他的空间(将近12G)都无发使用。我只能使用 dd if=/dev/zero of=/dev/sdb bs=4M 来重新给我整个U盘清零。

    脚本实例: 1. 用/dev/zero创建一个交换临时文件

    #!/bin/bash  
    # 创建一个交换文件,参数为创建的块数量(不带参数则为默认),一块为1024B(1K)  
      
    ROOT_UID=0         # Root 用户的 $UID 是 0.  
    E_WRONG_USER=65    # 不是 root?  
      
    FILE=/swap  
    BLOCKSIZE=1024  
    MINBLOCKS=40  
    SUCCESS=0  
      
    # 这个脚本必须用root来运行,如果不是root作出提示并退出  
    if [ "$UID" -ne "$ROOT_UID" ]  
    then  
      echo; echo "You must be root to run this script."; echo  
      exit $E_WRONG_USER  
    fi   
        
      
    blocks=${1:-$MINBLOCKS}          # 如果命令行没有指定,则设置为默认的40块.  
    # 上面这句等同如:  
    # --------------------------------------------------  
    # if [ -n "$1" ]  
    # then  
    #   blocks=$1  
    # else  
    #   blocks=$MINBLOCKS  
    # fi  
    # --------------------------------------------------  
      
    if [ "$blocks" -lt $MINBLOCKS ]  
    then  
      blocks=$MINBLOCKS              # 最少要有 40 个块长,如果带入参数比40小,将块数仍设置成40  
    fi   
      
    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  
    
    

    结果

    sudo ./testswap.sh             
    [sudo] password for long:       
    Creating swap file of size 40 blocks (KB).  
    记录了40+0 的读入  
    记录了40+0 的写出  
    40960字节(41 kB)已复制,0.000904021 秒,45.3 MB/秒  
    正在设置交换空间版本 1,大小 = 36 KiB  
    无标签, UUID=3e59eddf-098f-454d-9507-aba55f434a8c  
    Swap file created and activated.  
    
    

    关于 /dev/zero 的另一个应用是为特定的目的而用零去填充一个指定大小的文件,如挂载一个文件系统到环回设备 (loopback device) 或"安全地" 删除一个文件。

    脚本实例: 2. 创建ramdisk

    #!/bin/bash  
    # ramdisk.sh  
      
    # "ramdisk"是系统RAM内存的一段,它可以被当成是一个文件系统来操作.  
    # 优点:存取速度非常快 (包括读和写).  
    # 缺点: 易失性, 当计算机重启或关机时会丢失数据.  
    #       会减少系统可用的RAM.  
    #  
    # 那么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" ]  
    then  
      echo "Must be root to run ""`basename $0`""."  
      exit $E_NON_ROOT_USER  
    fi  
      
    if [ ! -d "$MOUNTPT" ]         # 测试挂载点是否已经存在了,  
    then                           #+ 如果这个脚本已经运行了好几次了就不会再建这个目录了  
      mkdir $MOUNTPT               #+ 因为前面已经建立了.  
    fi  
      
    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。这样很合适速度要求高的数据库服务器.  
    exit 0  
    
    

    运行效果:

    long@Raring:/tmp$ ./ramdisk.sh  
    Must be root to run ramdisk.sh.  
    long@Raring:/tmp$ sudo ./ramdisk.sh  
    记录了2000+0 的读入  
    记录了2000+0 的写出  
    2048000字节(2.0 MB)已复制,0.0113732 秒,180 MB/秒  
    mke2fs 1.42.8 (20-Jun-2013)  
    Discarding device blocks: 完成  
    文件系统标签=  
    OS type: Linux  
    块大小=1024 (log=0)  
    分块大小=1024 (log=0)  
    Stride=0 blocks, Stripe width=0 blocks  
    16384 inodes, 65536 blocks  
    3276 blocks (5.00%) reserved for the super user  
    第一个数据块=1  
    Maximum filesystem blocks=67108864  
    8 block groups  
    8192 blocks per group, 8192 fragments per group  
    2048 inodes per group  
    Superblock backups stored on blocks:  
        8193, 24577, 40961, 57345  
      
    Allocating group tables: 完成  
    正在写入inode表: 完成  
    Writing superblocks and filesystem accounting information: 完成  
      
    /mnt/ramdisk now available for use.
    
    

    转载:https://blog.csdn.net/u012611644/article/details/79851449

    展开全文
  • static const struct file_operations null_fops = { .llseek = null_lseek, .read = read_null, .write = write_null, .read_iter = read_iter_null, .write_iter = write_iter_null, .splice_write = ...
  • /dev/null 权限不足

    千次阅读 2021-05-10 23:49:06
    /dev/null文件设备的权限不对,会造成诸如pop3中的:Starting POP3d: ll_daemon_resetio: Permission denied的错误,或者是启动时候出现如下错误:/etc/rc.d/rc.sysinit:line 88: /dev/null: Read-only file system/...
  • nohup结合/dev/null

    2021-05-19 03:53:59
    示例:ls >/dev/null 2>&1 注意:顺序不能更改,先把标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,因为标准输出已经重定向到了/dev/null,因此标准错误也将重定向到/dev/null nohup结合/dev/null ...
  • 2&.../dev/null和>/dev/null 2>&1和2>&1>/dev/null:https://blog.csdn.net/zhongqi2513/article/details/78613768 连接远程机器执行 she...
  • Linux 中的 &> /dev/null

    千次阅读 2021-06-01 18:05:34
    /dev/null2>&1 和 command &> /dev/null 是一样的。就是把命令的标准输出和标准错误全都扔了! command > /dev/null2>&1: [root@master ~]# ll no_exist.txt ls: cannot access no_...
  • /dev/null 权限不足/dev/null文件设备的权限不对,会造成诸如pop3中的:Starting POP3d: ll_daemon_resetio: Permission denied的错误,或者是启动时候出现如下错误:/etc/rc.d/rc.sysinit:line 88: /dev/null: Read...
  • Linux——/dev/null详解

    2021-05-14 18:17:32
    一、 /dev/null/dev/null属于字符特殊文件,它属于空设备,是一个特殊的设备文件,它会丢弃一切写入其中的数据,写入它的内容都会永远丢失,而且没有任何可以读取的内容;就像是黑洞一样。我们用file命令查看下,...
  • dd命令及/dev/null和/dev/zero

    千次阅读 2018-08-08 19:48:57
    像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的)。 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一...
  • 主要介绍了shell中>/dev/null 2>&1到底是什么,文中介绍的很详细,需要的朋友可以参考借鉴,下面来一起看看吧。
  • Shell中 &>/dev/null和 >/dev/null 2>&1

    千次阅读 2019-03-05 09:07:27
    /dev/null 代表什么意思?答:“2> /dev/null” 代表忽略掉错误提示信息。如题 2> 代表什么意思?讲错误输出删除?答:“2>” 代表重定向操作错误提示信息。只有这两个字符并不能删除错误输出。如果有正确...
  • 一个问题引出的>/dev/null 2>&1详解

    千次阅读 多人点赞 2022-03-22 11:50:30
    /dev/null 2>&1 详解1.文件描述符2.shell 重定向(1)输入重定向(2)输出重定向(3)文件描述符的复制(4)重定向命令列表3. /dev/null4. 2>&15.重定向顺序(1)>/dev/null 2>&1 和 2>&...
  • 作者:裕用ID ...来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,... /dev/null 代表什么意思? 答:“2> /dev/null” 代表忽略掉错误提示信息。 如题 2> 代表什么意思?讲错误输出删除? 答:“2&g.
  • /dev/null 和 /dev/zero详细解释

    千次阅读 2018-04-08 14:24:19
    1、概论 -- 来自维基的解释/dev/null : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。在程序员行话,尤其是Unix...
  • /dev/null 2>&1 "出现,这具体代表什么意思呢,接下来会一步步操作,大概理清楚流程及作用(咳咳,那个,一些linux内置的方法咱就不理了) 先解释一下字面意思: >/dev/null 就是重定向,将结果(标准...
  • Linux中的/ dev / null

    千次阅读 2020-07-18 16:54:52
    /dev/null in Linux is a null device file. This will discard anything written to it, and will return EOF on reading. Linux中的/ dev / null是空设备文件。 这将丢弃写入其中的所有内容,并在读取时返回EOF 。...
  • Linux输入输出重定向 >/dev/null 2>&1

    千次阅读 2019-03-08 11:13:31
     .../dev/null和>/dev/null 2>&1和2>&1>/dev/null:https://blog.csdn.net/zhong...
  • /dev/null 2>&1 不显示 不显示 2>&1 >/dev/null  不显示 显示 每个进程都有默认的三个文件描述符:标准输入 0 标准输出 1 标准错误 2 从键盘获得输入 /...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 452,802
精华内容 181,120
关键字:

/Dev/null